1. 搭建windows下Hadoop源码阅读环境

以windows下为例(linux下的类似)

1.1 下载对应版本的Hadoop源码包

  1. 此处以Hadoop-2.7.0为例
  2. 进入Hadoop官网 https://hadoop.apache.org/
  3. 下载Hadoop 2.7.0源代码

    1.2 源码导入IDEA

  4. 将源代码解压到本地路径

  5. 将源代码导入IDEA中;打开IDEA,并导入源码
  6. 选择本地解压后的hadoop源码包
  7. 正在resolving dependencies 解决依赖
  8. 源码导入成功

    2. 编译Hadoop源码

    编译源码最好是在linux平台,此处用CentOS7.4平台编译源码

    2.1 查看编译说明文件

    将hadoop-2.7.0-src.tar.gz源码包放到/opt目录下
    将源码包解压到/opt目录
    1. [root@node-01 opt]# cd /opt/
    2. [root@node-01 opt]# tar -xzvf hadoop-2.7.0-src.tar.gz
    进入解压出来的目录
    1. [root@node-01 opt]# cd hadoop-2.7.0-src/
    2. [root@node-01 opt]# ls
    BUILDING.txt文件是编译hadoop源码的说明文件;打开文件,列出了编译hadoop源码时,要求软件及对应版本要求
    要求在Unix系统下编译

    2.2 安装JDK

    要求版本:JDK1.7+
    确定JDK是否已经安装,要求JDK1.7或以上版本
    若已经安装非系统自带的openjdk且是版本符合要求,则略过步骤“安装JDK”;出现下边结果,说明已经安装符合要求的JDK
    1. [root@node-01 jdk1.8.0_201]# java -version
    2. java version "1.8.0_201"
    3. Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
    4. Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
    (使用root用户)卸载系统自带的openjdk
    1. [root@node-01 ~]# rpm -qa |grep java
    2. python-javapackages-3.4.1-11.el7.noarch
    3. java-1.8.0-openjdk-headless-1.8.0.161-2.b14.el7.x86_64
    4. tzdata-java-2018c-1.el7.noarch
    5. java-1.7.0-openjdk-1.7.0.171-2.6.13.2.el7.x86_64
    6. java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64
    7. javapackages-tools-3.4.1-11.el7.noarch
    8. java-1.7.0-openjdk-headless-1.7.0.171-2.6.13.2.el7.x86_64
    忽略依赖卸载查询到的openjdk相关包
    1. rpm -e --nodeps python-javapackages-3.4.1-11.el7.noarch
    2. rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.161-2.b14.el7.x86_64
    3. ...
    root用户下运行
    1. [root@node-01 ~]# java -version
    上传自己的jdk解压,并配置环境变量
    1. tar -zxvf jdk-8u201-linux-x64.tar.gz -C /opt/
    打开/etc/profile文件添加以下内容
    1. export JAVA_HOME=/opt/jdk1.8.0_201
    2. export PATH=$PATH:$JAVA_HOME/bin
    3. export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    检测是否安装成功
    1. [root@node-01 jdk1.8.0_201]# source /etc/profile
    2. [root@node-01 jdk1.8.0_201]# java -version
    3. java version "1.8.0_201"
    4. Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
    5. Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

    2.3 安装依赖包

    根据编译说明文件BUILDING.txt,安装相关依赖程序包
    1. [root@node-01 jdk1.8.0_201]# yum -y install gcc-c++ build-essential autoconf automake libtool cmake zlib1g-dev pkg-config libssl-devua svn openssl-devel ncurses-devel
    说明:
    gcc-c++ -> liunx环境中的c/c++编译器
    build-essential -> linux操作系统上面开发程序,光有了gcc是不行的;它还需要一个build-essential软件包;作用是提供编译程序必须软件包的列表信息
    如果运行过程中,出现一下类似情况,说明需要跟换yum源(如何更换,自行百度)
    1. 已加载插件:fastestmirror, langpacks
    2. Loading mirror seeds from cached hostfile
    3. * base: mirrors.cn99.com
    4. * extras: mirrors.cn99.com
    5. * updates: mirrors.nwsuaf.edu.cn
    6. 没有可用软件包 build-essential
    7. 没有可用软件包 zlib1g-dev
    8. 没有可用软件包 pkg-config
    9. 没有可用软件包 libssl-devua

    2.4 安装maven

    版本要求:Maven 3.0或以后版本均可
    先确认一下,是否已经安装了符合要求的maven;
    若运行一下命令,并出现以下结果,则略过“安装maven”步骤
    1. [root@node-01 ~]# mvn -v
    2. Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-05T03:00:29+08:00)
    3. Maven home: /home/bruce/apache-maven-3.6.1
    4. Java version: 1.8.0_211, vendor: Oracle Corporation, runtime: /usr/java/jdk1.8.0_211-amd64/jre
    5. Default locale: en_US, platform encoding: UTF-8
    6. OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"
    若没有出现以上结果,则继续此步骤
    安装软件:apache-maven-3.5.4-bin.tar
    解压maven压缩包到/opt目录下
    1. [root@node-01 apps]# ls
    2. apache-maven-3.5.4-bin.tar
    3. [root@node-01 apps]# tar -xvf apache-maven-3.5.4-bin.tar -C /opt
    配置mvn的环境变量
    1. export M2_HOME=/opt/apache-maven-3.5.4
    2. export PATH=$PATH:$M2_HOME/bin
    测试是否安装完成
    1. [root@node-01 opt]# source /etc/profile
    2. [root@node-01 opt]# mvn -v
    3. Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00)
    4. Maven home: /opt/apache-maven-3.5.4
    5. Java version: 18.0_201, vendor: Oracle Corporation, runtime: /opt/jdk1.8.0_201/jre
    6. Default locale: zh_CN, platform encoding: UTF-8
    7. OS name: "linux", version: "3.10.0-862.el7.x86_64", arch: "amd64", family: "unix"

    2.5 安装Findbugs

    版本要求:Findbugs 1.3.9
    安装软件:findbugs-3.0.1.tar
    1. [root@node-01 apps]# ls
    2. findbugs-3.0.1.tar
    3. [root@node-01 apps]# tar -xvf findbugs-3.0.1.tar -C /opt
    配置Findbugs环境变量
    1. export FINDBUGS_HOME=/opt/findbugs-3.0.1
    2. export PATH=$PATH:$FINDBUGS_HOME/bin
    测试是否安装完成
    1. [root@node-01 apps]# source /etc/profile
    2. [root@node-01 apps]# findbugs -version
    3. 3.0.1

    2.6 安装ProtocolBuffer

    版本要求:ProtocolBuffer 2.5.0
    安装软件:protobuf-2.5.0.tar,不建议用其它版本
    1. [root@node-01 apps]# ls
    2. protobuf-2.5.0.tar
    3. [root@node-01 apps]# tar -zxvf protobuf-2.5.0.tar.gz -C /opt
    4. [root@node-01 apps]# cd /opt/protobuf-2.5.0/
    5. [root@node-01 protobuf-2.5.0]# ./configure
    6. [root@node-01 protobuf-2.5.0]# make -j 4 # 干货,-j以4核同时编译;根据实际情况修改
    7. [root@node-01 protobuf-2.5.0]# make install
    测试是否安装完成
    1. [root@node-01 protobuf-2.5.0]# protoc --version
    2. libprotoc 2.5.0

    2.7 安装Snappy

    1. [root@node-01 apps]# ls
    2. snappy-1.1.3.tar.gz
    安装
    1. [root@node-01 opt]# cd snappy-1.1.3/
    2. [root@node-01 snappy-1.1.3]# ./configure
    3. [root@node-01 snappy-1.1.3]# make -j 4
    4. [root@node-01 snappy-1.1.3]# make install
    查看snappy文件库
    1. [root@node-01 snappy-1.1.3]# ls -lh /usr/local/lib | grep snappy
    2. -rw-r--r--. 1 root root 510K 4 12 14:14 libsnappy.a
    3. -rwxr-xr-x. 1 root root 955 4 12 14:14 libsnappy.la
    4. lrwxrwxrwx. 1 root root 18 4 12 14:14 libsnappy.so -> libsnappy.so.1.3.0
    5. lrwxrwxrwx. 1 root root 18 4 12 14:14 libsnappy.so.1 -> libsnappy.so.1.3.0
    6. -rwxr-xr-x. 1 root root 253K 4 12 14:14 libsnappy.so.1.3.0
    7. [root@node-01 snappy-1.1.3]#

    2.8 安装Jansson

    首先确保已经安装wget,若没有,先安装(自行百度)
    1. [root@node-01 opt]# wget http://www.digip.org/jansson/releases/jansson-2.5.tar.gz
    2. [root@node-01 opt]# tar -zxvf jansson-2.5.tar.gz
    3. [root@node-01 opt]# cd jansson-2.5
    4. [root@node-01 jansson-2.5]# ./configure && make && make install

    2.9 安装fuse

    版本要求:fuse 2.6或更新版本
    先安装必要的工具
    1. yum install git libcurl-devel libxml2-devel
    安装fuse
    1. [root@node-01 opt]# cd /opt
    2. [root@node-01 opt]# yum remove -y fuse
    3. [root@node-01 opt]# wget https://github.com/libfuse/libfuse/releases/download/fuse_2_9_4/fuse-2.8.4.tar.gz
    4. [root@node-01 opt]# tar -zxvf fuse-2.8.4.tar.gz
    5. [root@node-01 opt]# cd fuse-2.8.4
    6. [root@node-01 fuse-2.8.4]# ./configure
    7. [root@node-01 fuse-2.8.4]# make
    8. [root@node-01 fuse-2.8.4]# make install
    9. [root@node-01 fuse-2.8.4]# export PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/lib64/pkgconfig/:/usr/local/lib/pkgconfig:.
    10. [root@node-01 fuse-2.8.4]# modprobe fuse
    11. [root@node-01 fuse-2.8.4]# echo "/usr/local/lib" >> /etc/ld.so.conf
    12. [root@node-01 fuse-2.8.4]# ldconfig
    13. [root@node-01 fuse-2.8.4]# pkg-config --modversion fuse

    2.10 安装snappy

    若想让hadoop支持snappy压缩,得先安装snappy;
    若不需要,跳过此步骤
    1. [root@node-01 opt]# wget https://github.com/google/snappy/releases/download/1.1.3/snappy-1.1.3.tar.gz # 下载snappy包
    2. [root@node-01 opt]# tar xzvf snappy-1.1.3.tar.gz
    3. [root@node-01 opt]# cd snappy-1.1.3/
    4. [root@node-01 snappy-1.1.3]# ./configure
    5. [root@node-01 snappy-1.1.3]# make && make install
    6. [root@node-01 snappy-1.1.3]# ls -lh /usr/local/lib |grep snappy

    2.8 编译hadoop

    防止编译时java.lang.OutOfMemoryError:Java heap space堆栈内存溢出问题,可以适当调整一下编译用的内存大小
    1. [root@node-01 opt]# export MAVEN_OPTS="-Xms256m -Xmx1024m"
    进入源码包下,执行命令进行编译
    1. [root@node-01 fuse-2.8.4]# cd
    2. [root@node-01 ~]# cd /opt/
    3. [root@node-01 opt]# cd hadoop-2.7.0-src/
    4. [root@node-01 hadoop-2.7.0-src]# mvn package -Pdist,native,docs -DskipTests -Dtar
    如果中途编译失败,并且不要文档、hadoop支持snappy、支持openssl的话,请使用这个命令
    1. [root@localhost hadoop-2.7.7-src]# mvn clean package -Pdist,native -DskipTests -Dtar -Drequire.snappy -Dsnappy.lib=/usr/local/lib -Dbundle.snappy -Drequire.openssl
    说明:
    支持snappy(若不需要支持snappy,把这些选项去除即可):Drequire.snappy -Dsnappy.lib=/usr/local/lib -Dbundle.snappy