當前位置:首頁 » 編程軟體 » 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 同樣的所有節點都需要更新 然後重啟集群

熱點內容
聽ti密碼是多少 發布:2025-02-12 08:22:15 瀏覽:288
淘寶上傳視頻憑證 發布:2025-02-12 08:06:46 瀏覽:878
java畫 發布:2025-02-12 08:01:00 瀏覽:549
光遇安卓官服是在哪裡下載 發布:2025-02-12 07:47:47 瀏覽:648
安卓手機如何關閉程序打開廣告 發布:2025-02-12 07:31:06 瀏覽:469
新版影視大全不能緩存 發布:2025-02-12 07:31:04 瀏覽:976
sql兩個欄位in 發布:2025-02-12 07:29:45 瀏覽:771
漂亮網站源碼 發布:2025-02-12 07:26:40 瀏覽:760
執行腳本前 發布:2025-02-12 07:14:49 瀏覽:472
android天氣預報介面 發布:2025-02-12 07:12:43 瀏覽:703