1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
| 通过命令查看libhadoop.so.1.0.0是否是64位的,如果不是64位的,是32位的,则使用下面的重新编译Hadoop源码之方法来解决。 执行: file /home/wenyou/hadoop-2.5.1/lib/native/*
结果: /home/wenyou/hadoop-2.5.1/lib/native/libhadoop.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped 如果是64位的,还是出现上页的警告,说明本地库不存在,或者本地库与当前操作系统的版本不一致。 则可以通过以下方法来解决: 一、本地库与当前操作系统的版本不一致 出现 “WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable”警告信息 的解决办法: 增加调试信息设置 执行:export HADOOP_ROOT_LOGGER=DEBUG,console 执行:hadoop fs -text /tmp/access.log.gz 出现如下信息: DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /home/wenyou/hadoop-2.5.1/lib/native/libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/wenyou/hadoop-2.5.1/lib/native/libhadoop.so.1.0.0) 说明系统中的glibc的版本和libhadoop.so需要的版本不一致导致 查看系统的libc版本: 执行: ll /lib64/libc.so.6 lrwxrwxrwx. 1 root root 12 6月 11 23:01 /lib64/libc.so.6 -> libc-2.12.so 系统中的版本为2.12, 而libhadoop.so.1.0.0要求2.14。
所以下载glibc-2.14 wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.bz2 wget http://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.5.tar.bz2 tar -jxvf glibc-2.14.tar.bz2 cd glibc-2.14 tar -jxvf ../glibc-linuxthreads-2.5.tar.bz2 cd ../ export CFLAGS="-g -O2" ./glibc-2.14/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin make make install 安装编译过程中需要注意三点: (1)、要将glibc-linuxthreads解压到glibc目录下。 (2)、不能在glibc当前目录下运行configure。 (3)、加上优化开关,export CFLAGS="-g -O2",否则会出现错误。 安装完后,可以查看:ls -l /lib64/libc.so.6 已升级 测试本地库是否升级 执行: export HADOOP_ROOT_LOGGER=DEBUG,console
执行: hadoop fs -text /tmp/access.log.gz 可以看到将glibc升级后不再报错,已经成功加载本地库。
二、32位的本地库,需要通过重新编译Hadoop源码的方法来解决: 原因: Apache提供的hadoop本地库是32位的,而在64位的服务器上就会有问题,因此需要自己编译64位的版本。
有个WARN提示hadoop不能加载本地库,网上搜了下,这个问题基本上是由于在apache hadoop官网上下载的hadoopXXX.bin.tar.gz实在32位的机器上编译的(蛋疼吧),我集群使用的64bit的,加载.so文件时出错,当然基本上不影响使用hadoop(如果你使用mahout做一些机器学习的任务时有可能会遇到麻烦,加载不成功,任务直接退出,所以还是有必要解决掉这个warn的)。 解决方法: 在自己的服务器上下载Hadoop源码hadoop-2.5.1-src.tar.gz,重新编译。 只需要在master上重新编译就行了,把新的本地库替换原来32位的本地库就行了。 编译步骤: 1) yum -y install svn ncurses-devel gcc* 2) yum -y install lzo-devel zlib-devel autoconf automake libtool cmake openssl –devel 3) 安装 maven wget http://www.eng.lsu.edu/mirrors/apache/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz tar -zxvf apache-maven-3.2.3-bin.tar.gz mv apache-maven-3.2.3 /home/wenyou/
配置环境变量,编辑/etc/profile或者~/.bashrc文件 vi /etc/profile 增加: MAVEN_HOME=/home/wenyou/apache-maven-3.2.3 PATH=$PATH:$MAVEN_HOME/bin export MAVEN_HOME 执行: source /etc/profile 通过mvn --version来检查是否安装正常 4) 安装 protobuf(https://github.com/google/protobuf) wget https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz tar -zxvf protobuf-2.5.0.tar.gz cd protobuf-2.5.0 ./configure make make check make install
可以通过protoc --version来查看是否安装正常 5)编译安装 hadoop-2.5.1 cd hadoop-2.5.1-src mvn clean package –P dist,native –D skipTests –D tar
|