当前位置:首页 » 编程软件 » hadoop277源码编译

hadoop277源码编译

发布时间: 2023-06-07 01:22:27

‘壹’ 错误: 找不到或无法加载主类 Djava.library.path=.usr.hadoop.hadoop-2.8.0.lib:.

最近,打算Hbase建表用snappy压缩时,碰到一些Hadoop本地库的问题。其实这些问题是一直存在的,只是不影响正常使用,就没有引起重视。这次希望彻底解决以下问题:
问题一:执行start-dfs.sh时出现以下日志
xxxx: Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library /usr/local/hadoop-2.4.0/lib/native/libhadoop.so which might have disabled stack guard. The VM will try to fix the stack guard now.
xxxx: It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.
这是因为官网提供的版本本地库是32位的,在64位主机环境下无法执行。需要下载hadoop源码进行编译(如何编译源码可以上网搜索),编译成功后,找到native下的文件拷贝到${HADOOP_HOME}/lib/native目录下即可。
问题二:执行start-dfs.sh时出现以下日志
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
在网上找到的所有文章中,都是说在hadoop-env.sh中加入以下两行配置:
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/"
但是在测试过程中,加入以上配置还是会提示告警信息,说明本地库未加载成功。
开启debug:
export HADOOP_ROOT_LOGGER=DEBUG,console
执行start-dfs.sh,发现以下日志:
DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: Java.lang.UnsatisfiedLinkError: no hadoop in java.library.path
从日志中可以看出hadoop库不在java.library.path所配置的目录下,应该是java.library.path配置的路径有问题。在hadoop-env.sh中重新配置:
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native/"
执行start-dfs.sh,告警信息不再显示。经测试,其实只需export HADOOP_OPTS即可解决问题。
验证本地库是否加载成功:hadoop checknative
15/08/18 10:31:17 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
15/08/18 10:31:17 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
Native library checking:
hadoop: true /usr/local/hadoop-2.4.0/lib/native/libhadoop.so.1.0.0
zlib: true /lib64/libz.so.1
snappy: true /usr/local/hadoop-2.4.0/lib/native/linux-amd64-64/libsnappy.so.1
lz4: true revision:99
bzip2: true /lib64/libbz2.so.1
以上说明本地库已经加载成功。

‘贰’ hadoop 2.8.2 怎么编译

在不使用eclipse情况使java程序在hadoop
2.2中运行的完整过程。整个过程中其实分为java程序的编译,生成jar包,运行测试。
这三个步骤运用的命令都比较简单,主要的还是如何找到hadoop
2.2提供给java程序用来编译的jar包。具体可以查看:
HADOOP_HOME/share/hadoop/httpfs/tomcat/webapps/webhdfs/WEB-INF/lib目录
下面会通过一个在hadoop中创建一个目录的JAVA例子来进行演示
具体代码如下:
package
com.wan.demo;
import
java.io.IOException;
import
org.apache.hadoop.conf.Configuration;
import
org.apache.hadoop.fs.FileSystem;
import
org.apache.hadoop.fs.Path;
public
class
HADemo
{
public
static
void
main(String[]
args)
{
//
TODO
Auto-generated
method
stub
mkdir(args[0]);
}
public
static
void
mkdir(String
dir){
Configuration
configuration=new
Configuration();
FileSystem
fs;
try
{
fs
=
FileSystem.get(configuration);
fs.mkdirs(new
Path(dir));
fs.close();
}
catch
(IOException
e)
{
//
TODO
Auto-generated
catch
block
e.printStackTrace();
}
}
}
把HADemo.java文件拷贝到linux环境中
配置HADOOP_HOME/bin到环境中,启动集群,进入HADemo.java文件目录中
注:下面的lib目录里面的文件由HADOOP_HOME/share/hadoop/httpfs/tomcat/webapps/
webhdfs/WEB-INF/lib目录中获取,下面做的目的是为了缩减命令长度
1.编译java
#
mkdir
class
#Javac
-classpath
.:lib/hadoop-common-2.2.0.jar:lib/hadoop-annotations-2.2.0.jar
-d
class
HADemo.java
2.生成jar包
#jar
-cvf
hademo.jar
-C
class/
.
added
manifest
adding:
com/(in
=
0)
(out=
0)(stored
0%)
adding:
com/wan/(in
=
0)
(out=
0)(stored
0%)
adding:
com/wan/demo/(in
=
0)
(out=
0)(stored
0%)
adding:
com/wan/demo/HADemo.class(in
=
844)
(out=
520)(deflated
38%)
3.测试运行
#hadoop
jar
hademo.jar
com.wan.demo.HADemo
/test
检测:
#hadoop
fs
-ls
/

‘叁’ 如何在CentOS6.5下编译64位的Hadoop2.x

1,安装gcc,执行如下的几个yum命令即可

Java代码

yum -y install gcc

yum -y install gcc-c++

yum install make

yum install autoconf automake libtool cmake ncurses-devel openssl-devel gcc*

2,安装JDK,并设置环境变量,完成后测试安装成功否

Java代码

[root@ganglia ~]# java -version

java version "1.5.0"

gij (GNU libgcj) version 4.4.7 20120313 (Red Hat 4.4.7-4)

Copyright (C) 2007 Free Software Foundation, Inc.

This is free software; see the source for ing conditions. There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[root@ganglia ~]#

3, 安装Maven,安装完成后测试安装与否

Java代码

[root@ganglia ~]# mvn -v

Apache Maven 3.2.1 (; 2014-02-15T01:37:52+08:00)

Maven home: /usr/local/maven

Java version: 1.7.0_25, vendor: Oracle Corporation

Java home: /usr/local/jdk1.7.0_25/jre

Default locale: zh_CN, platform encoding: UTF-8

OS name: "linux", version: "2.6.32-431.el6.x86_64", arch: "amd64", family: "unix"

[root@ganglia ~]#

4, 安装Ant, 安装完成后,依旧测试成功与否

Java代码

[root@ganglia ~]# ant -version

Apache Ant(TM) version 1.9.4 compiled on April 29 2014

[root@ganglia ~]#

5,安装protobuf,安装方式,从官网下载tar.gz的包,并上传到linux上解压,然后进入根目录下,执行如下的几个命令:

Java代码

./configure

make

make check

make install

然后,执行如下命令,进行测试安装成功与否

Java代码

[root@ganglia protobuf-2.5.0]# protoc

Missing input file.

[root@ganglia protobuf-2.5.0]#

6,从hadoop官网下载hadoop2.2.0的版本的源码的src的包,并查看目录

Java代码

[root@ganglia ~]# cd hadoop-2.2.0-src

[root@ganglia hadoop-2.2.0-src]# ll

总用量 108

-rw-r--r--. 1 67974 users 9968 10月 7 2013 BUILDING.txt

drwxr-xr-x. 2 67974 users 4096 10月 7 2013 dev-support

drwxr-xr-x. 4 67974 users 4096 6月 9 17:05 hadoop-assemblies

drwxr-xr-x. 3 67974 users 4096 6月 9 17:27 hadoop-client

drwxr-xr-x. 9 67974 users 4096 6月 9 17:14 hadoop-common-project

drwxr-xr-x. 3 67974 users 4096 6月 9 17:26 hadoop-dist

drwxr-xr-x. 7 67974 users 4096 6月 9 17:20 hadoop-hdfs-project

drwxr-xr-x. 11 67974 users 4096 6月 9 17:25 hadoop-maprece-project

drwxr-xr-x. 4 67974 users 4096 6月 9 17:06 hadoop-maven-plugins

drwxr-xr-x. 3 67974 users 4096 6月 9 17:27 hadoop-minicluster

drwxr-xr-x. 4 67974 users 4096 6月 9 17:03 hadoop-project

drwxr-xr-x. 3 67974 users 4096 6月 9 17:05 hadoop-project-dist

drwxr-xr-x. 12 67974 users 4096 6月 9 17:26 hadoop-tools

drwxr-xr-x. 4 67974 users 4096 6月 9 17:24 hadoop-yarn-project

-rw-r--r--. 1 67974 users 15164 10月 7 2013 LICENSE.txt

-rw-r--r--. 1 67974 users 101 10月 7 2013 NOTICE.txt

-rw-r--r--. 1 67974 users 16569 10月 7 2013 pom.xml

-rw-r--r--. 1 67974 users 1366 10月 7 2013 README.txt

[root@ganglia hadoop-2.2.0-src]#

7,修改/root/hadoop-2.2.0-src/hadoop-common-project/hadoop-auth/pom.xml文件,增加,补丁内容,这部分是hadoop2.2.0的bug,如果是其他的2.x的版本,可以视情况而定,内容如下:

Xml代码

<dependency>

<groupId>org.mockito</groupId>

<artifactId>mockito-all</artifactId>

<scope>test</scope>

</dependency>

<!--新增的内容开始 -->

<dependency>

<groupId>org.mortbay.jetty</groupId>

<artifactId>jetty-util</artifactId>

<scope>test</scope>

</dependency>

<!--新增的内容结束 -->

<dependency>

<groupId>org.mortbay.jetty</groupId>

<artifactId>jetty</artifactId>

<scope>test</scope>

</dependency>

8,修改完毕后,回到hadoop-2.2.0-src的跟目录下执行编译打包命令:

Java代码

mvn clean

mvn package -Pdist,native -DskipTests -Dtar

然后等待半个小时左右的编译时间,网速快的话,时间可能会更短,编译完成 编译好的hadoop包,

Java代码

[root@ganglia target]# pwd

/root/hadoop-2.2.0-src/hadoop-dist/target

[root@ganglia target]# ll

总用量 282348

编译完成后的本地库,位于如下位置,并查看本地库支持位数:

至此,我们的编译已经,成功完成,然后,我们就可以使用在target目录下,编译生成的hadoop新的tar.gz包,来部署我们的hadoop集群。

‘肆’ 如何重新编译hadoop jar包

重新编译hadoop jar包:
编译打包
由于hadoop打包时需要依赖于操作系统的底层。
sudo apt-get install autoconf
sudo apt-get install automake
sudo apt-get install autotool
sudo apt-get install libtool
4.安装jdk1.5 和apache-forrest-0.8
打包命令:ant package -Djava5.home=/home/rongneng/env/jdk1.5.0_22 -Dforrest.home=/home/rongneng/env/apache-forrest-0.8

‘伍’ hadoop源码修改了,编译成功后,将编译后的hadoop文件直接拿来搭建么,还是需要经过什么处理呢

把你编译后的hadoop源码丢到原来的hadoop集群环境中去 即覆盖hadoop安装目录下的原hadoop-core-xxx.jar 同样的所有节点都需要更新 然后重启集群

热点内容
如何让助理服务器可以被远程 发布:2025-02-12 04:47:11 浏览:769
存储空间不足但 发布:2025-02-12 04:46:27 浏览:273
树莓派编程板 发布:2025-02-12 04:41:45 浏览:904
php取整 发布:2025-02-12 04:33:21 浏览:221
我的世界创造服务器位置 发布:2025-02-12 04:24:49 浏览:701
毛利润算法 发布:2025-02-12 04:22:42 浏览:754
战舰少女r红茶脚本 发布:2025-02-12 04:05:05 浏览:465
峰火战国服务器什么时候开 发布:2025-02-12 03:56:31 浏览:175
电脑配置慢怎么解压 发布:2025-02-12 03:52:18 浏览:716
androidsdk功能 发布:2025-02-12 03:43:07 浏览:87