CentOSでhadoopソースを再コンパイル


ネットでUnable to load native-hadoop library for your platformを探しました...USing builtin-java classes where applicabl警告の原因は、hadoopの一部のローカルライブラリでコンパイルする際に使用されるCライブラリが本機のバージョンと異なるため、本機環境でhadoopを再コンパイルすればよいということです.
しかし、この警告はhadoopの使用にあまり影響しません.
しかし、強迫症のあるプログラマーとしていくつかの方法を試みたが、成果がなく、自分でソースコードをコンパイルするしかなかった.
rootユーザーに切り替え
Ant Maven ProtocolBuffer findbugs CMakeのtarパッケージをダウンロード/hadoopディレクトリの下に置く
私が使用しているバージョンは次のとおりです.
[hadoop@vm1 Downloads]$ ls
apache-ant-1.9.5.tar.gz    findbugs-2.0.2.tar.gz       jdk-8u45-linux-x64.gz
apache-maven-3.0.5.tar.gz  hadoop-2.7.0-src.tar.gz  protobuf-2.5.0
cmake-2.8.6                 hadoop-2.7.0.tar.gz      protobuf-2.5.0.tar.gz
cmake-2.8.6.tar.gz          jdk-7u79-linux-x64.gz
yum -y install  lzo-devel  zlib-devel  gcc autoconf automake libtool
tar zxf protobuf-2.5.0.tar.gz
cd protobuf-2.5.0
./configure

この場合protobufはc++サポートが必要なため、マシンにc++が装着されていない場合は、次のエラーが発生します.
checking whether to enable maintainer-specific portions of Makefiles... yes
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
checking for g++... no
checking for c++... no
checking for gpp... no
checking for aCC... no
checking for CC... no
checking for cxx... no
checking for cc++... no
checking for cl.exe... no
checking for FCC... no
checking for KCC... no
checking for RCC... no
checking for xlC_r... no
checking for xlC... no
checking whether we are using the GNU C++ compiler... no
checking whether g++ accepts -g... no
checking dependency style of g++... none
checking how to run the C++ preprocessor... /lib/cpp
configure: error: in `/hadoop/protobuf-2.5.0':
configure: error: C++ preprocessor "/lib/cpp" fails sanity check
See `config.log' for more details

----------------------------------------------------------------------------------------
この場合
yum install glibc-headers
yum install gcc-c++

その後protobufフォルダの下で./configure
これでいいです.ではgoon
make 
make check
make install
tar apache-ant-1.9.2-bin.tar.gz
mv apache-ant-1.9.2 /hadoop/app/ant192
tar apache-maven-3.0.5-bin.tar.gz
mv apache-maven-3.0.5 /hadoop/maven305
tar zxf findbugs-2.0.2.tar.gz
mv findbugs-2.0.2 /hadoop/findbugs202
tar zxf cmake-2.8.6.tar.gz
cd cmake-2.8.6
./bootstrap; make; make install
cd ..
tar zxf hadoop-2.7.0-src.tar.gz
mv hadoop-2.7.0-src /hadoop/hadoop270_src
chown -R hadoop:hadoop /hadoop/hadoop270_src
vi /etc/profile
export ANT_HOME=/hadoop/ant192
export MAVEN_HOME=/hadoop/maven305
export FINDBUGS_HOME=/hadoop/findbugs202
export PATH=${ANT_HOME}/bin:${MAVEN_HOME}/bin:${FINDBUGS_HOME}/bin:$PATH
source /etc/profile
su - hadoop
cd /hadoop/hadoop270_src
mvn clean package -DskipTests -Pdist,native,docs -Dtar

初めてmavenを構成するには少し時間がかかりますが、mavenのミラーアドレスを構成したほうがいいです.
コンパイルの最後にこのエラーが発生する可能性があります.
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.7:run (make) on project hadoop-pipes: An Ant BuildException has occured: exec returned: 1
[ERROR] around Ant part ...<exec failonerror="true" dir="/home/hadoop/app/hadoop270_src/hadoop-tools/hadoop-pipes/target/native" executable="cmake">... @ 5:124 in /home/hadoop/app/hadoop270_src/hadoop-tools/hadoop-pipes/target/antrun/build-main.xml

zlib 1 g-devとlibssl-devがインストールされていません.ローカルライブラリをコンパイルするには、この2つのライブラリのサポートが必要です.
解決方法:
yum install openssl-devel

次に、
mvn clean package -DskipTests -Pdist,native,docs -Dtar

注意:jdk 1.8環境でエラーが発生する可能性があります.
[WARNING] The requested profile "native" could not be activated because it does not exist.
[WARNING] The requested profile "docs" could not be activated because it does not exist.
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.7:run (dist) on project hadoop-dist: An Ant BuildException has occured: exec returned: 1
[ERROR] around Ant part ...<exec failonerror="true" dir="/home/hadoop/app/hadoop270_src/hadoop-dist/target" executable="sh">... @ 38:100 in /home/hadoop/app/hadoop270_src/hadoop-dist/target/antrun/build-main.xml

解決方法:1.8を1.7に変更
では、コンパイルに成功しました.
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 25:22.002s
[INFO] Finished at: Tue Jul 07 21:20:38 PDT 2015
[INFO] Final Memory: 131M/405M
[INFO] ------------------------------------------------------------------------
[hadoop@vm1 hadoop270_src]$ ls
BUILDING.txt           hadoop-dist               hadoop-project       NOTICE.txt
dev-support            hadoop-hdfs-project       hadoop-project-dist  pom.xml
hadoop-assemblies      hadoop-mapreduce-project  hadoop-tools         README.txt
hadoop-client          hadoop-maven-plugins      hadoop-yarn-project
hadoop-common-project  hadoop-minicluster        LICENSE.txt
[hadoop@vm1 hadoop270_src]$ cd hadoop-dist/
[hadoop@vm1 hadoop-dist]$ ls
pom.xml  target
[hadoop@vm1 hadoop-dist]$ cd target/
[hadoop@vm1 target]$ ls
antrun                    hadoop-2.7.0           hadoop-dist-2.7.0-javadoc.jar  test-dir
dist-layout-stitching.sh  hadoop-2.7.0.tar.gz    javadoc-bundle-options
dist-tar-stitching.sh     hadoop-dist-2.7.0.jar  maven-archiver
[hadoop@vm1 target]$ pwd
/hadoop/app/hadoop270_src/hadoop-dist/target

自分でコンパイルしたhadoopパッケージで環境を設定し、hdfsを起動しても(Unable to load native-hadoop library for your platform...using builtin-java classes where applicabl)警告はありません.
[hadoop@vm1 hadoop-2.7.0]$ ./sbin/start-dfs.sh 
Starting namenodes on [vm1]
vm1: starting namenode, logging to /home/hadoop/app/hadoop-2.7.0/logs/hadoop-hadoop-namenode-vm1.out
vm1: starting datanode, logging to /home/hadoop/app/hadoop-2.7.0/logs/hadoop-hadoop-datanode-vm1.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: starting secondarynamenode, logging to /home/hadoop/app/hadoop-2.7.0/logs/hadoop-hadoop-secondarynamenode-vm1.out
[hadoop@vm1 hadoop-2.7.0]$ ./sbin/start-yarn.sh 
starting yarn daemons
starting resourcemanager, logging to /home/hadoop/app/hadoop-2.7.0/logs/yarn-hadoop-resourcemanager-vm1.out
vm1: starting nodemanager, logging to /home/hadoop/app/hadoop-2.7.0/logs/yarn-hadoop-nodemanager-vm1.out
[hadoop@vm1 hadoop-2.7.0]$ jps
3251 NodeManager
3540 Jps
3145 ResourceManager
2699 NameNode
2828 DataNode
2991 SecondaryNameNode