hadoop 2.x安装:不能加载本地库 - 重新编译hadoop本地库
1. 安装编译库的依赖包
此过程需要联网,切换至root用户,输入下面命令安装依赖包:
yum install svn
yum install autoconfautomake libtool cmake
yum install ncurses-devel
yum install openssl-devel
yum install gcc*
解释一下上面依赖包都是做什么的
- svn 源码部署的软件
- autoconfautomake 编译工具
- libtool 编译工具
- cmake 编译工具
- ncurses-devel 编译有关的包
- openssl-devel 跟SSH有关的库
- gcc* C语言的编译器(传说是最优秀的C的编译器)
2.安装maven
下载最新的maven,并解压
wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
tar -xzvf ./apache-maven-3.3.9-bin.tar.gz
将maven移动到公共目录中(为了可以与其他用户共同使用该软件)
mv ./apache-maven-3.3.9 /usr/local
3.配置环境变量
我们在root下配置环境变量
[root@tiny1 usr]# vi /etc/profile
修改/etc/profile文件,配置PATH和JAVA_HOME
## JAVA_HOME 设置
export JAVA_HOME=/usr/java/jdk1.8.0_121
## PATH设置
PATH=$PATH:/usr/java/jdk1.8.0_121/bin
PATH=$PATH:/usr/local/apache-maven-3.3.9/bin
export MAVEN_OPTS='-Xms256m -Xmx1024m'
使用source使其生效
source /etc/profile
4.安装protobuf
1. 下载protobuf
由于我们无法连接谷歌,因此我们使用github的下载链接
我们下载protobuf-2.5.0.tar.gz(谜一般的下载速度啊..)
wget -c https://github.com/google/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz
注释,忍受不了这种速度,我是从百度云下载的具体下载方式如下(网址是经常更新的):
wget -c --referer=http://pan.baidu.com/s/1jG7lWCA -O protobuf-2.5.0.tar.gz "https://4gwh1hpbwfaaurqbqgw5o.ourdvsss.com/d1.baidupcs.com/file/b751f772bdeb2812a2a8e7202bf1dae8?bkt=p3-1400b751f772bdeb2812a2a8e7202bf1dae8dea23a0600000024a66d&xcode=504070a5bb657004a8e05137d854b1cc4ae861d68893197e1682cb8519c2059f&fid=4077236996-250528-677081914465492&time=1489113559&sign=FDTAXGERLBHS-DCb740ccc5511e5e8fedcff06b081203-YLO7khFwwJ%2Fbkh5QChLbJDwFhQ0%3D&to=d1&size=2401901&sta_dx=2401901&sta_cs=72663&sta_ft=gz&sta_ct=7&sta_mt=7&fm2=MH,Ningbo,Netizen-anywhere,,hebeice&newver=1&newfm=1&secfm=1&flow_ver=3&pkey=1400b751f772bdeb2812a2a8e7202bf1dae8dea23a0600000024a66d&sl=72286287&expires=8h&rt=sh&r=294006966&mlogid=1587409026051190627&vuk=4077236996&vbdid=1801066142&fin=protobuf-2.5.0.tar.gz&fn=protobuf-2.5.0.tar.gz&rtype=1&iv=0&dp-logid=1587409026051190627&dp-callid=0.1.1&hps=1&csl=400&csign=6F5x1nX1uzXlw4X3JI%2BiujI8szM%3D&by=themis&wshc_tag=0&wsts_tag=58c211d8&wsid_tag=7cefb03c&wsiphost=ipdbm"
说明一下linux上下载百度云的方式为
使用wget下载 百度云资源格式:wget -c --referer=百度云分享链接 -O 保存的文件名 "百度云实际下载地址".
注:此处-c 为断点续传,--referer为百度云分享地址,-O为指定输出文件,
2. 解压protobuf
[root@tiny1 ~]# tar -xzvf ./protobuf-2.5.0.tar.gz
3. 编译
[root@tiny1 ~]# cd protobuf-2.5.0
[root@tiny1 protobuf-2.5.0]# ./configure
## 下面三个都是编译
[root@tiny1 protobuf-2.5.0]# make
[root@tiny1 protobuf-2.5.0]# make check
[root@tiny1 protobuf-2.5.0]# make install
4. 检查编辑结果
实际上我们费了那么大的力气就是为了一个文件
[root@tiny1 protobuf-2.5.0]# ls /usr/local/bin
protoc
我们就是为了protoc命令,后面会用到他
将protobuf的压缩包和文件夹删除
[root@tiny1 ~]# rm protobuf-2.5.0.tar.gz
rm:是否删除普通文件 "protobuf-2.5.0.tar.gz"?y
[root@tiny1 ~]# rm -fr protobuf-2.5.0/
5. 下载hadoop源码
我们切换回grid
[root@tiny1 ~]# su grid2
[grid2@tiny1 root]$ cd ~
[grid2@tiny1 ~]$
使用下面命令获取hadoop源代码
[grid2@tiny1 ~]$ wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.2/hadoop-2.7.2-src.tar.gz
解压该文件
[grid2@tiny1 ~]$ tar -zxvf hadoop-2.7.2-src.tar.gz
6.编译hadoop
我们进入hadoop源码目录你使用maven对其进行编译(注意文件夹内必须有pom.xml)
[grid2@tiny1 ~]$ cd hadoop-2.7.2-src
[grid2@tiny1 ~]$ mvn package -Pdist,native -DskipTests -Dtar -e
这是一个很漫长的过程,编译了3个小时,实际上修改BUG等原因编译了一天
7.使用编译出来的本地库覆盖掉原来的本地库
实际上编译出来的文件我们可以作为hadoop的安装包直接使用,区别在于一个是官方版,一个是本地编译版。
我们找到编译的本地文件目录
[grid2@tiny1 hadoop-2.7.2-src]$ cd hadoop-dist/target/hadoop-2.7.2/lib/native
[grid2@tiny1 native]$ ll
总用量 4372
-rw-rw-r--. 1 grid2 grid2 1122838 3月 12 02:24 libhadoop.a
-rw-rw-r--. 1 grid2 grid2 1487268 3月 12 02:24 libhadooppipes.a
lrwxrwxrwx. 1 grid2 grid2 18 3月 12 02:24 libhadoop.so -> libhadoop.so.1.0.0
-rwxrwxr-x. 1 grid2 grid2 673180 3月 12 02:24 libhadoop.so.1.0.0
-rw-rw-r--. 1 grid2 grid2 582040 3月 12 02:24 libhadooputils.a
-rw-rw-r--. 1 grid2 grid2 364812 3月 12 02:24 libhdfs.a
lrwxrwxrwx. 1 grid2 grid2 16 3月 12 02:24 libhdfs.so -> libhdfs.so.0.0.0
-rwxrwxr-x. 1 grid2 grid2 229025 3月 12 02:24 libhdfs.so.0.0.0
将编译好的文件复制到相应的位置上:
[grid2@tiny1 native]$ cd ..
[grid2@tiny1 lib]$ cd native/ /home/grid2/hadoop/hadoop-2.7.2/lib/native/
完成