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系统要运行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 version
14/12/06 01:30:45 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
Native library checking:
hadoop: true /home/ozawa/hadoop/lib/native/libhadoop.so.1.0.0
zlib: true /lib/x86_64-linux-gnu/libz.so.1
snappy: true /usr/lib/libsnappy.so.1
lz4: true revision:99
bzip2: 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
执行过后应该能看到跟官网一样的提示信息。
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,配环境变量跟JDK一样,如果有镜像源,可以通过settings.xml文件配置)
-
ant(更JDK一样,解压然后配置环境变量)
-
glibc-headers和g++
$yum install glibc-headers $yum install gcc-c++
-
安装make和cmake命令
$yum install make $yum install cmake
-
protocolBuffer 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 libtool
3.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下面,这里编译就完成了。
其余发生的错误请自行查找,因为不同环境会有不同的错误出现,请根据实践进行解决。源码编译篇,我就分享到这里了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)