`

64位linux系统编译hadoop源码 native库

 
阅读更多

 

 

 

 

下面是自己编译hadoop源码, 然后将native库上传覆盖hadoop的过程
 
 
0 hadoop native库:
在hadoop压缩时 调用此库文件的jni(.so)来调用linux系统的功能, 一般我们的linux机器都是64位,而官网下载的hadoop安装文件都是32位编译的,因此如果不在你本机编译的话,想使用hadoop压缩功能受限。
 
0.1 如何知道你的native库是否已经编译过
  1. cd/opt/hadoop2.5.2/lib/native下,[root@hadoop3 native]# file libhadoop.so.1.0.0   看到这个文件是64位的,这里我编译成功后显示结果如下: libhadoop.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
  2. 或者直接用  #hdfs dfs -ls /  执行任何一个hadoop命令,如果出现:Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 则表示没有编译过
  3. 或者执行[root@hadoop3 native]# hadoop  checknative  Native library checking:
    hadoop: false 
    zlib:   false 
    snappy: false 
    lz4:    false 
    bzip2:  false   如果显示结果是这样的,也表示没有编译过
     
     
     
    0.2  为何native库不编译就报Unable to load native-hadoop library的信息:
    具体报错为:
     java.lang.UnstatisfiedLinkError:
     /usr/local/hadoop-2.6.0/lib/native/libhadoop.so.1.0.0:/lib64/libc.so.6: version 'GLIBC 2.14' not found
     意思是hadoop native的libhadoop.so.1.0.0需要编译的版本为GLIBC 2.14,而在本地linux上没找到
 
查看hadoop native的GLIBC支持的版本: 
[root@hadoop3 native]#  strings libhadoop.so.1.0.0 | grep GLIBC    查看hadoop native库
GLIBC_2.2.5
GLIBC_2.12
GLIBC_2.7
GLIBC_2.14
GLIBC_2.6
GLIBC_2.4
GLIBC_2.3.4
查看本地linux的GLIBC版本 
[root@hadoop3 native]# strings /lib64/libc.so.6 | grep GLIBC   查看 linux
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
上面报错可见,在linux上没有GLIBC 2.14,因此报错,处理方式只能是将hadoop源码在本地linux上用本地c库来编译,这样在跑hadoop时就会用本地的c库。
 
 
 
1 下面是编译hadoop源码,顺带自带生成编译后的 native库,然后将编译好的native库上传替代你安装的hadoop
的lib/native库下东西即可, 最后我会贴出我的配置文件 /etc/profile的写法
 
1.0  安装contos, 我本机安装的是6.6 查看版本信息为:
[root@hadoop3 bin]#  cat /etc/redhat-release 
CentOS release 6.6 (Final)
 
1.1 安装jdk, 我按照的1.7
[root@hadoop3 bin]# java -version
java version "1.7.0_71"
 
 
1.2 安装maven, maven历史版本下载地址:  https://archive.apache.org/dist/maven/binaries/
     这里我下载的版本如下
[root@hadoop3 ~]#  mvn -version
Apache Maven 3.0.5
  配置信息见最后的 /etc/profile
 
1.3 安装protoc
  hadoop使用protocol buffer通信,从protoc官网下载protoc,下载地址是https://code.google.com/p/protobuf/downloads/list,选择protobuf-2.5.0.tar.gz 下载。
基于google访问不到,因此我将protobuf-2.5.0.tar.gz 上传到附件上。protobuf-2.5.0.tar.gz
 

为了编译安装protoc,需要下载几个工具,顺序执行以下命令

    yum install gcc  
    yum intall gcc-c++ 跑这块时报错(Loaded plugins: fastestmirror, refresh-packagekitsecurity No such command: intall.),没有处理继续执行下面命令,最终也能编译过hadoop
    yum install make

如果操作系统是CentOS6.5那么gcc和make已经安装了。其他版本不一定。在命令运行时,需要用户经常输入“y”。

 

然后执行以下命令解压缩protobuf

[root@hadoop3 protobuf-2.5.0]# pwd
/opt/soft/protobuf-2.5.0 下执行下面命令
 tar -zxvf  protobuf-2.5.0.tar.gz

会生成一个文件夹protobuf-2.5.0,执行以下命令编译protobuf。

    cd protobuf-2.5.0  
    ./configure --prefix=/usr/local/protoc/  
    make && make install

只要不出错就可以了(我本机执行没有出错)

配置 protoc的环境变量信息见最后的 /etc/profile文件
 
[root@hadoop3 ~]# protoc --version
libprotoc 2.5.0
 
1.4 安装其他依赖:

顺序执行以下命令

    yum install cmake  
    yum install openssl-devel  
    yum install ncurses-devel

安装完毕即可,这里我是一把过的。

 

 

1.5 编译hadoop-2.5.2源码
 
官网下载hadoop-2.5.2源码hadoop-2.5.2-src.tar.gz
解压后查看文件 
hadoop-2.5.2-src/hadoop-common-project/hadoop-auth中的文件pom.xml 55行以下是否有
 <dependency>
         <groupId>org.mortbay.jetty</groupId>
         <artifactId>jetty-util</artifactId>
         <scope>test</scope>
    </dependency>
如果没有添加上,如果有就不做修改,说是个bug(adoop-2.2.0的)。 这里我的版本2.5.2源码已经修复,因此不需要添加,
好了,现在进入到目录/usr/local/hadoop-2.5.2-src中,执行命令
 
mvn package -DskipTests -Pdist,native
 
该命令会从外网下载依赖的jar,编译hadoop源码,需要花费很长时间,40多分钟吧。
 
 
 
 
第一次编译失败截图如下,就是因为1.3步骤的protc没有配置对环境变量造成:
 
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 25:54.735s
[INFO] Finished at: Mon Jun 20 06:55:13 PDT 2016
[INFO] Final Memory: 47M/113M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.hadoop:hadoop-maven-plugins:2.5.2:protoc (compile-protoc) on project hadoop-common: org.apache.maven.plugin.MojoExecutionException: 'protoc --version' did not return a version -> [Help 1]
 
 
 
 
如下是最后编译成功的截图耗时:
 
 
 
1.6  /etc/profile配置信息:
export JAVA_HOME=/opt/jdk1.7
export HADOOP_HOME=/opt/hadoop-2.5.2
export HIVE_HOME=/opt/hive0.13
export ZK_HOME=/opt/zk
export FLUME_HOME=/opt/flume1.5.2
 
#export SOLR_HOME=/opt/solr4
export HBASE_HOME=/opt/hbase-0.98.12
#export KYLIN_HOME=/opt/kylin-0.7.1
#export ZOOKEEPER_HOME=/opt/zookeeper-3.4.5
#export OOZIE_HOME=/opt/foroozie4.0/oozie
export TOMCAT_HOME=/opt/tomcat7
export ANT_HOME=/opt/ant1.9.7
export MAVEN_HOME=/opt/maven305
export LD_LIBRARY_PATH=/usr/local/protoc
 
export PATH=.:$LD_LIBRARY_PATH/bin:$MAVEN_HOME/bin:$ANT_HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$ZK_HOME/bin:$FLUME_HOME/bin:$HBASE_HOME/bin:$TOMCAT_HOME/bin:$PATH
 
 
1.7  将编译后的native包下载,后上传替换 /opt/hadoop-2.5.2/lib/native下
 
编译后的native路径: /opt/soft/hadoop-2.5.2-src/hadoop-dist/target/hadoop-
2.5.2/navive
 
 
然后执行命令:  可以看到识别 native库了
[root@hadoop3 bin]#  hadoop  checknative
16/06/20 20:12:30 WARN bzip2.Bzip2Factory: Failed to load/initialize native-bzip2 library system-native, will use pure-Java version
16/06/20 20:12:30 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
Native library checking:
hadoop: true /opt/hadoop-2.5.2/lib/native/libhadoop.so.1.0.0
zlib:   true /lib64/libz.so.1
snappy: false 
lz4:    true revision:99
bzip2:  false 
 
然后重启hadoop集群(我没试验过不需要重启下),执行任意hadoop命令:
[root@hadoop3 bin]# hdfs dfs -ls /
此时不会再出现 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable的提示。 编译native库完毕。
分享到:
评论

相关推荐

    mac下编译hadoop3.1.4源码生成的native库

    在Mac环境下编译Hadoop 3.1.4的源码以生成其本地库是一个涉及多步骤的过程,这对于理解Hadoop的内部工作原理以及自定义配置具有重要意义。Hadoop是Apache软件基金会的一个开源项目,主要处理分布式存储和计算任务。...

    centos7 64位下编译Hadoop2.7.2源码库文件

    总结来说,编译Hadoop源码库文件是一个涉及系统环境配置、源码获取与编译、本地库构建、配置调整和测试验证的复杂过程。通过这个过程,我们可以得到针对特定平台优化的Hadoop执行环境,这对于在生产环境中提高性能和...

    win 7 64上编译 Hadoop 2.7.3 源码

    ### Win 7 64位系统上编译Hadoop 2.7.3源码的知识点 #### 一、背景介绍 在当前大数据处理技术快速发展的背景下,Hadoop作为主流的大数据处理框架之一,被广泛应用于各类场景之中。对于开发者来说,能够熟练地在自己...

    Centos6.8 32位 64位下编译 hadoop 2.6.4 源码

    为了成功编译Hadoop源码,还需要安装一系列的依赖软件,这些软件可以通过Centos的包管理器`yum`进行安装。具体命令如下: ```bash sudo yum -y install gcc* sudo yum -y install cmake sudo yum -y install glibc-...

    hadoop-2.3.0 的64位 native库

    总之,编译Hadoop的64位native库是确保在64位系统上高效、稳定运行Hadoop的关键步骤。提供的压缩包文件`native`应该包含了编译好的库,可以直接替换到你的Hadoop安装中,避免了自行编译的繁琐过程。在使用时,务必...

    hadoop2.8.1 64bit native 编译

    在64位系统上编译Hadoop native库是为了确保软件能够充分利用64位处理器的优势,包括更大的内存寻址能力和更高的并行计算能力。编译时需要确保你的开发环境(如GCC编译器)也是64位的,并且满足所有依赖项。 4. **...

    编译hadoop-2.5.0-cdh5.3.6 + snappy 源码的native包

    本文将详细讲解如何在CentOS 6.5系统上编译Hadoop 2.5.0 - CDH5.3.6与Snappy的源码,以生成适用于该环境的native库。 首先,我们要了解Hadoop的native库是什么。Hadoop的native库是一组C++编译的库,它们提供了与...

    hadoop 2.4.1 64位native库

    1. **编译和构建**:从源码编译Hadoop,确保在64位环境下进行,以便生成适用于该平台的库。 2. **配置环境变量**:设置`HADOOP_OPTS`或`HADOOP_COMMON_LIB_NATIVE_DIR`,指向64位Native库的路径。 3. **测试验证**...

    mac 下hadoop3.0.2编译的native库

    - 若遇到依赖库版本不匹配的问题,可能需要调整Hadoop源码中的相关版本号或者安装特定版本的依赖库。 完成上述步骤后,你应该能够成功地在Mac上运行Hadoop 3.0.2,并且不会出现因缺少本地库导致的错误。如果你在...

    hadoop-3.1.3-mac-native_lib.zip

    编译Hadoop源码是一项技术性工作,需要熟悉Java开发环境和C++编译器,因为Hadoop的本地库部分是用C++编写的。对于Hadoop 3.1.3,你需要遵循以下步骤来编译macOS的本地库: 1. 首先,确保你的系统已经安装了Java ...

    win10系统编译好的hadoop源码

    在Windows 10环境下编译好的Hadoop源码对于开发者来说是一份宝贵的资源,因为它通常已经解决了在Windows系统上运行Hadoop时可能遇到的兼容性和配置问题。 标题中的"win10系统编译好的hadoop源码"指的是专门为...

    hadoop-2.5.0-cdh5.3.6 编译native包

    总的来说,编译Hadoop的native包是一项技术性较强的任务,需要对Linux系统、编译工具和Hadoop有深入理解。通过这个过程,用户不仅可以学习到Hadoop的内部机制,还可以根据特定环境定制优化Hadoop的性能。然而,对于...

    hadoop2源码编译成64位

    在编译Hadoop源码之前,需要先安装一些基础的编译工具和依赖库。作为root用户执行以下命令: ```bash yum install svn autoconf automake libtool c make yum install ncurses-devel openssl-devel gcc* yum ...

    hadooop-2.6.0 在64位机器编译后的 native 源码

    标题 "Hadoop-2.6.0 在64位机器编译后的 native 源码" 提供了关于Hadoop的一个关键组件的信息,即它的原生库(native library)。Hadoop是一个开源的分布式计算框架,它允许处理和存储大量数据在分布式集群中。原生...

    hadoop3.1.1native文件含zstd

    描述中提到的“centos7 64位下hadoop3.1.1源码编译生native库”是指在CentOS 7操作系统64位环境下,通过源代码编译的方式构建了Hadoop 3.1.1的本地库。源码编译是安装Hadoop时的一个选项,尤其是当需要特定功能或...

    hadoop321 native lib for Catalina.zip

    根据hadoop3.2.1源码编译,native library,native库依赖的第三方库主要有openssl 1.1,protobuf 2.5.0,第三方库未包含,如果有缺失的,例如zlib等,可通过homebrew自行安装,用最新版即可,jdk8,hadoop完整包可用...

    hadoop-2.2.0.tar.gz 64位 part1 hadoop源码包编译为linux64位版本

    本人经过4个小时顺利将hadoop官方的32位编译为64位,通过测试可用,方便在64位linux安装hadoop的用户使用,编译时间很长,也很苦啊,解决了很多报错的问题,所以分多要一点,还望理解! 注:*****因为本人CSDN等级...

    hadoop cdh5 centos 64位系统本地库编译文件

    6. **编译过程**:在CentOS 64位系统上编译Hadoop CDH5的本地库,一般需要安装必要的依赖,如GCC编译器、Java开发工具包(JDK)、CMake等,然后通过源码编译Hadoop及相关组件。 7. **替换问题**:在升级或安装过程中...

    CentOS hadoop native lib

    标题"CentOS hadoop native lib"指的是在CentOS 64位环境下,为Hadoop编译生成的本地库。这些库通常包含了C或C++编写的代码,用于与操作系统底层进行更高效的交互,比如文件I/O、网络通信和内存管理。Hadoop的本地库...

    mac系统下编译hadoop3.2.1生成的native包

    mac系统下编译hadoop3.2.1源码后生成的lib/native下的包,为了解决“WARN util.NativeCodeLoader”警告,包含snappy及isa-l,编译过程可以看https://blog.csdn.net/weixin_44570264/article/details/106846117

Global site tag (gtag.js) - Google Analytics