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/

完成

原文地址:https://www.cnblogs.com/erygreat/p/7223967.html