• 详细讲解Hadoop源码阅读工程(以hadoop-2.6.0-src.tar.gz和hadoop-2.6.0-cdh5.4.5-src.tar.gz为代表)


      

      不多说,直接上干货!

      首先,说的是,本人到现在为止,已经玩过。

                     

     对于,这样的软件,博友,可以去看我博客的相关博文。在此,不一一赘述!

    Eclipse *版本

    Eclipse *下载

    Jdk 1.7*安装并配置

    Jdk 1.8*安装并配置

    JDK的windows和Linux版本之下载

    Eclipse下新建Maven项目、自动打依赖jar包

    如何在Maven官网下载历史版本

    setting.xml配置文件

    【转】maven核心,pom.xml详解

     

      本博文呢,Eclipse下详细讲解hadoop-2.6.0-src.tar.gz源码!作为Hadoop-2.*的代表,当然,9月初期,已经发布了Hadoop-3.*了。

    本博文呢

      需要具备一定的知识基础。包括懂Hadoop和源码编译、Eclipse和Jdk的版本、下载、安装、Maven创建项目和自动打依赖jar包等。

     

    直接进入!

     关于源码编译的过程

    Hadoop源码的编译过程详细解读(各版本)

    Spark源码的编译过程详细解读(各版本)

     关于创建源码阅读工程的过程

      有很多种方式,这里我暂时给博友两种。

      1、使用Maven导入和后续attach source的方法

      2、构建Maven工程

      3、构建Java工程,使用源代码压缩包导入Eclipse工程的方法

      总的来说,目前存在两种Hadoop源代码阅读环境搭建方法,分别是构建Maven工程和构建Java工程。两种方法各有利弊:前者可通过网络自动下载依赖的第三方库,但源代码会被分散到多个工程中进而带来阅读上的不便;后者可将所有源代码组织在一个工程中,但需要自己添加依赖的第三方库。

      当然,上述指的是Apache Hadoop版本。

      CDH版本将源代码和JAR包放到了一起,因此,如果使用CDH版本,则直接按照上述方法将源代码导入Eclipse工程即可。

      这里呢,我细说三种方法。

    Apache Hadoop版本 

    1、使用Maven导入和后续attach source的方法

    eclipse下如何打开和关闭一个项目?

    打开项目:在关闭的项目上右击,选择“open project”,即可打开项目。
    关闭项目:在打开的项目上右击,选择“close project”,即可关闭项目。

      已经关闭

    用Maven创建Hadoop260Src

     

    或者

     

     

     

     

    Group Id:com.zhouls.hadoop

    Artifact Id:Hadoop260Src

     

     

     

     

     

     

     

     

     

    默认生成的pom.xml配置文件的,内容是

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    
    <groupId>com.zhouls.hadoop</groupId>
    <artifactId>Hadoop260Src</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    
    <name>Hadoop260Src</name>
    <url>http://maven.apache.org</url>
    
    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    
    <dependencies>
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
    </dependency>
    </dependencies>
    </project>

    这一步,最为关键,具体怎么修改pom.xml,是要看自己的需求。

    http://mvnrepository.com/ 

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    
    <groupId>com.zhouls.hadoop</groupId>
    <artifactId>Hadoop260Src</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    
    <name>Hadoop260Src</name>
    <url>http://maven.apache.org</url>
    
    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <junit.version>4.10</junit.version>
    <hadoop.version>2.6.0</hadoop.version>
    </properties>
    
    <dependencies>
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>${junit.version}</version>
    <scope>test</scope>
    </dependency>
    <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>2.6.0</version>
    </dependency>
    <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version>2.6.0</version>
    </dependency>
    <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-mapreduce-client-core</artifactId>
    <version>2.6.0</version> 
    <exclusions> 
    <exclusion> 
    <groupId>jdk.tools</groupId> 
    <artifactId>jdk.tools</artifactId> 
    </exclusion> 
    </exclusions> 
    </dependency>
    <dependency> 
    <groupId>jdk.tools</groupId> 
    <artifactId>jdk.tools</artifactId> 
    <version>1.6</version> 
    <scope>system</scope> 
    <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath> 
    </dependency> 
    <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>${hadoop.version}</version>
    </dependency>
    </dependencies>
    
    <build>
    <sourceDirectory>src/main/java</sourceDirectory>
    <testSourceDirectory>src/main/test</testSourceDirectory>
    
    <plugins>
    <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
    <descriptorRefs>
    <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
    <archive>
    <manifest>
    <mainClass></mainClass>
    </manifest>
    </archive>
    </configuration>
    <executions>
    <execution>
    <id>make-assembly</id>
    <phase>package</phase>
    <goals>
    <goal>single</goal> 
    </goals>
    </execution>
    </executions>
    </plugin>
    
    <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2.1</version>
    <executions>
    <execution>
    <goals>
    <goal>exec</goal>
    </goals>
    </execution>
    </executions>
    <configuration>
    <executable>java</executable>
    <includeProjectDependencies>true</includeProjectDependencies>
    <includePluginDependencies>false</includePluginDependencies>
    <classpathScope>compile</classpathScope>
    <mainClass>com.zhouls.hadoop.Hadoop260Src</mainClass>
    </configuration>
    </plugin>
    </plugins>
    </build>
    
    </project>

    成功!

    目前,在pom.xml里只加入了部分,如mapreduce和hdfs,随着以后,逐渐,可以将yarn,hive,hbase,pig,zookeeper...等加入。

      至此,成功!

    具体,后续,请见我的博客。地址。。。。

     2、构建Maven工程

    (1)构建Maven工程

      通过Maven工程搭建Hadoop源代码阅读环境的步骤如下:

      步骤1 解压缩Hadoop源代码。

        将下载到的Hadoop源代码压缩包解压到工作目录下,比如hadoop-2.6.0-src.tar.gz

          

      解压到当前目录下,得到

      步骤2 导入Maven工程。

        在Eclipse中,依次选择“File”→“Import”→“Maven”→“Existing Maven Project”,在弹出的对话框中的“Root Directory”后面,选择Java源代码所在的目录。

    单击“Next”按钮,在弹出的对话框中选择“Resolve All Later”,并单击“Finish”按钮完成Maven项目导入。之后,Eclipse会自动通过网络从Maven库中下载依赖的第三方库(JAR包等)。注意,你所使用的电脑必须能够联网。

      将Hadoop 2.0源代码导入Maven项目后,会生成50个左右的工程,这些都是通过Maven构建出来的,每个工程是一个代码模块,且彼此相对独立,可以单独编译。你可以在某个工程下的“src/main/java”目录下查看对应的源代码。

     

     

     

     

     

     

     成功!大功告成!

     每个工程是一个代码模块,且彼此相对独立,可以单独编译。你可以在某个工程下的“src/main/java”目录下查看对应的源代码。

     

     

     

      注意: 中间,也许需要一段时间,因为是Maven嘛,联网下载相关,正常!

     3、构建Java工程,使用源代码压缩包导入Eclipse工程的方法

      

      下载,太简单了,不多赘述!

     解压,

     

     

    新建Java工程,打开Eclipse

    File  ->  New  -> Java Project

     

       并在弹出的对话框中取消选中“Use default location”前的勾号,然后选择刚的hadoop-2.6.0-src的安装目录

    点击Next,最好是点击Finish。

    可以一一看看

     

     

     

    点击Finish

     

     至此,大功告成!

    拿出里面的例子,来看看

     

     

     

     

    ok!

      但是呢?

      需要注意的是,通过以上方法导入Hadoop 2.*源代码后,很多类或者方法找不到对应的JAR包,为了解决这个问题,你需要将第三方JAR包导入工程中,如下所示,

     

          方法如下:解压存放JAR包的压缩包,然后右击Project名称,在弹出的快捷菜单中选择“Properties”命令,将会弹出一个界面,然后在该界面中依次选择“Java Build Path”→ “Libraries”→“Add External JARs...”,将解压目录中share/hadoop目录下各个子目录中lib文件夹下的JAR包导入工程。

      

     

     

    share/hadoop目录下各个子目录中lib文件夹,分别如下

          

     

        

     

     

       

     

     一一导入!!!(细心)

    具体做法,如下:

      右击Project名称,即,hadoop-2.6.0-src,在弹出的快捷菜单中选择“Properties”命令

     

     将会弹出一个界面,然后在该界面中依次选择“Java Build Path”→ “Libraries”→“Add External JARs...”

    1、D:SoftWarehadoop-2.6.0sharehadoopcommonlib

     

    2、D:SoftWarehadoop-2.6.0sharehadoophdfslib

     

     3、D:SoftWarehadoop-2.6.0sharehadoophttpfs omcatlib

     

    4、D:SoftWarehadoop-2.6.0sharehadoopkms omcatlib

     

    5、D:SoftWarehadoop-2.6.0sharehadoopmapreducelib

     

    6、D:SoftWarehadoop-2.6.0sharehadooptoolslib

     

    7、D:SoftWarehadoop-2.6.0sharehadoopyarnlib

     

     

     

    得到,之后,可以看出,错误大大减半。

     

     

      然后,手动再去修改,即可!

    其实这个错误,也不是错误。

     最后成功!

     CDH版本

       这里,我就只已构建Java工程赘述下,其他的几种方法,同理,很简单的!

    关于下载:

    http://archive-primary.cloudera.com/cdh5/cdh/5/

     

     

    解压

     

    这里,我为了方便,自命名。

     

     

     

     

     

     

     

     

     

     

     

      在Eclipse里直接关联源码

     

     

     

     

     

     ok,至此结束!

     欢迎,喜欢专研hadoop/spark源码的博友们,跟我一起交流,互相学习!

     感谢如下的博主:

    http://blog.csdn.net/cnhk1225/article/details/50482431

    http://blog.csdn.net/yhao2014/article/details/43017191

    欢迎大家,加入我的微信公众号:大数据躺过的坑        人工智能躺过的坑
     
     
     

    同时,大家可以关注我的个人博客

       http://www.cnblogs.com/zlslch/   和     http://www.cnblogs.com/lchzls/      http://www.cnblogs.com/sunnyDream/   

       详情请见:http://www.cnblogs.com/zlslch/p/7473861.html

      人生苦短,我愿分享。本公众号将秉持活到老学到老学习无休止的交流分享开源精神,汇聚于互联网和个人学习工作的精华干货知识,一切来于互联网,反馈回互联网。
      目前研究领域:大数据、机器学习、深度学习、人工智能、数据挖掘、数据分析。 语言涉及:Java、Scala、Python、Shell、Linux等 。同时还涉及平常所使用的手机、电脑和互联网上的使用技巧、问题和实用软件。 只要你一直关注和呆在群里,每天必须有收获

          对应本平台的讨论和答疑QQ群:大数据和人工智能躺过的坑(总群)(161156071) 

     

     

    
    
  • 相关阅读:
    QSetting
    类中函数前、后、参数加const
    delete指针
    自定义数组类
    手动调用构造函数
    windows和linux平台下的通用时间测试函数
    多线程编程学习
    Android 利用ImageView显示图片
    特征描述算子-sift
    opencv边界扩展
  • 原文地址:https://www.cnblogs.com/zlslch/p/5891845.html
Copyright © 2020-2023  润新知