Hadoop学习(source方式安装篇)
Hadoop學習(source方式安裝篇)
1.為什么要進行源碼編譯
網上說Hadoop官網沒有提供32位的編譯好的Hadoop,這其實是假的,自從2.5版本以后,官方已經提供了64位的編譯好的Hadoop,你可以到lib/native目錄下通過命令:
$file libhadoop.so.1.0.0#如果查看到有如下信息代表已經是64-bit libhadoop.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV),那為什么我們還要編譯源碼呢,官方是這么解釋的:
Note: Depending on your environment, the term “native libraries” could refer to all *.so’s you need to compile; and, the term “native compression” could refer to all *.so’s you need to compile that are specifically related to compression. Currently, however, this document only addresses the native hadoop library (libhadoop.so). The document for libhdfs library (libhdfs.so) is here.
Hadoop has native implementations of certain components for performance reasons and for non-availability of Java implementations. These components are available in a single, dynamically-linked native library called the native hadoop library. On the *nix platforms the library is named libhadoop.so.
我們需要linux系統(tǒng)要運行Native 代碼,首先要將Native 編譯成目標CPU 架構的[.so]文件。源碼編譯就是為了連接本地庫生成對應的[.so]文件。
2.為什么不用官方的編譯好的Hadoop
官方編譯好的Hadoop不一定是完全切和我們的虛擬機的,其實你可以下載一個已經編譯好的64位的Hadoop會來,然后通過官方的檢測命令可以是否能正確加載本地庫組件。通過以下命令檢測:
$ hadoop checknative -a官方給出的正確加載的應該會顯示這樣的信息(不過這里的bzip2好像沒有加載啊,搞得會使用純Java版本):
14/12/06 01:30:45 WARN bzip2.Bzip2Factory: Failed to load/initialize native-bzip2 library system-native, will use pure-Java version14/12/06 01:30:45 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib libraryNative library checking:hadoop: true /home/ozawa/hadoop/lib/native/libhadoop.so.1.0.0zlib: true /lib/x86_64-linux-gnu/libz.so.1snappy: true /usr/lib/libsnappy.so.1lz4: true revision:99bzip2: false主要還是查看Native library checking下面的這個部分
2.1如果使用編譯好的Hadoop
如果直接使用官方編譯好的Hadoop版本,就可能會出現以下情況(這個是我直接從官網下載的Hadoop2.7.1版本):
java.lang.UnsatisfiedLinkError: Cannot load libsnappy.so.1 (libsnappy.so.1: cannot open shared object file: No such file or directory)! ...... ...... Native library checking: hadoop: true /home/liangwenyao/hadoop/hadoop-2.7.1/lib/native/libhadoop.so.1.0.0 zlib: true /lib/x86_64-linux-gnu/libz.so.1 snappy: false lz4: true revision:99 bzip2: false openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!我們可以看到拋出錯誤:
ERROR snappy.SnappyCompressor: failed to load SnappyCompressor java.lang.UnsatisfiedLinkError: Cannot load libsnappy.so.1 (libsnappy.so.1: cannot open shared object file: No such file or directory)!openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!這是因為沒有加載到snappy,openssl,bzip2
解決辦法:
1.安裝snappy
sudo apt-get install snappy libsnappy*之后把/usr/lib/libsnappy1.0 復制到$HADOOP_HOME/lib/native下。(這步看情況,有時不復制也能直接加載到。)
2.安裝ssl lib包
apt-get install libssl-dev執(zhí)行過后應該能看到跟官網一樣的提示信息。
3.解決bzip2包 (如果你直接使用官方編譯好的Hadoop,這步還是算了,又要編譯源碼)
步驟一:安裝bzip2包
yum -y install bzip2-devel步驟二:重新編譯源碼(到Hadoop源碼目錄下),這個是需要源碼版本的Hadoop
mvn package -Pdist,native -DskipTests -Dtar -Djavax.net.debug=all步驟三:將編譯好的文件放到官方已經編譯好的版本
cp ~/hadoop-2.6.0-cdh5.7.0/hadoop-dist/target/hadoop-2.6.0-cdh5.7.0/lib/native/* /opt/software/hadoop-2.6.0-cdh5.7.0/lib/native/步驟四:檢測
$Hadoop checknative -a這樣搞還不如下載個Hadoop源碼,進行源碼編譯。
3.編譯Hadoop源碼
說了那么多,最好還是使用Hadoop官方提供的源碼,自己編譯安裝一下。
3.1軟件準備
JDK1.7(這個直接不說)
Maven3.3(下載Maven,配環(huán)境變量跟JDK一樣,如果有鏡像源,可以通過settings.xml文件配置)
ant(更JDK一樣,解壓然后配置環(huán)境變量)
glibc-headers和g++
$yum install glibc-headers $yum install gcc-c++安裝make和cmake命令
$yum install make $yum install cmakeprotocolBuffer 2.5.0(按照這個步驟就可以了)
$tar -zxvf protobuf-2.5.0.tar.gz -C /opt/module/ $cd /opt/module/protobuf-2.5.0/ $./configure $make $make check $make install $ldconfig $vi /etc/profile export LD_LIBRARY_PATH=/opt/module/protobuf-2.5.0 export PATH=$PATH:$LD_LIBRARY_PATH $source /etc/profile $protoc --version安裝openssl和 ncurses-devel庫
$yum install openssl-devel $yum install ncurses-devel安裝bzip2包(防止出現上面的情況,還是安裝一下其他依賴包)
yum -y install bzip2-devel lzo-devel zlib-devel libtool3.2編譯源碼
一定要進入到Hadoop源碼目錄下。
$tar -zxvf hadoop-2.7.2-src.tar.gz -C /opt/ $cd hadoop-2.7.2-src $mvn package -Pdist,native -DskipTests -Dtar然后就是漫長的等待。。。。。。。。。
編譯成功后Hadoop編譯后的包在hadoop-2.7.2-src/hadoop-dist/target下面,這里編譯就完成了。
其余發(fā)生的錯誤請自行查找,因為不同環(huán)境會有不同的錯誤出現,請根據實踐進行解決。源碼編譯篇,我就分享到這里了。
總結
以上是生活随笔為你收集整理的Hadoop学习(source方式安装篇)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: crontab快速上手
- 下一篇: 福特 Maverick Lobo 皮卡路