Hadoop本地庫

軒墨發表於2017-09-05

本文講的是Hadoop本地庫,【IT168 資訊】鑑於效能問題以及某些Java類庫的缺失,對於某些元件,Hadoop提供了自己的本地實現。 這些元件儲存在Hadoop的一個獨立的動態連結的庫裡。這個庫在*nix平臺上叫libhadoop.so. 本文主要介紹本地庫的使用方法以及如何構建本地庫。
元件
Hadoop現在已經有以下 compression codecs本地元件:
zlib
gzip
lzo
在以上元件中,lzo和gzip壓縮編解碼器必須使用hadoop本地庫才能執行。
使用方法
hadoop本地庫的用法很簡單:
看一下 支援的平臺.
下載 預構建的32位i386架構的Linux本地hadoop庫(可以在hadoop發行版的lib/native目錄下找到)或者自己 構建 這些庫。
確保你的平臺已經安裝了zlib-1.2以上版本或者lzo2.0以上版本的軟體包或者兩者均已安裝(根據你的需要)。
bin/hadoop 指令碼通過系統屬性 -Djava.library.path=來確認hadoop本地庫是否包含在庫路徑裡。
檢查hadoop日誌檔案可以檢視hadoop庫是否正常,正常情況下會看到:
DEBUG util.NativeCodeLoader – Trying to load the custom-built native-hadoop library…
INFO util.NativeCodeLoader – Loaded the native-hadoop library
如果出錯,會看到:
INFO util.NativeCodeLoader – Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
支援的平臺
Hadoop本地庫只支援*nix平臺,已經廣泛使用在GNU/Linux平臺上,但是不支援 Cygwin 和 Mac OS X。
已經測試過的GNU/Linux發行版本:
RHEL4/Fedora
Ubuntu
Gentoo
在上述平臺上,32/64位Hadoop本地庫分別能和32/64位的jvm一起正常執行。
構建Hadoop本地庫
Hadoop本地庫使用 ANSI C 編寫,使用GNU autotools工具鏈 (autoconf, autoheader, automake, autoscan, libtool)構建。也就是說構建hadoop庫的平臺需要有標準C的編譯器和GNU autotools工具鏈。請參看 支援的平臺。
你的目標平臺上可能會需要的軟體包:
C 編譯器 (e.g. GNU C Compiler)
GNU Autools 工具鏈: autoconf, automake, libtool
zlib開發包 (stable version >= 1.2.0)
lzo開發包 (stable version >= 2.0)
如果已經滿足了上述先決條件,可以使用build.xml 檔案,並把其中的compile.native置為 true,這樣就可以生成hadoop本地庫:
$ ant -Dcompile.native=true
因為不是所有使用者都需要Hadoop本地庫,所以預設情況下hadoop不生成該庫。
你可以在下面的路徑檢視新生成的hadoop本地庫:
$ build/native//lib
其中是下列系統屬性的組合 ${os.name}-${os.arch}-${sun.arch.data.model};例如 Linux-i386-32。
注意
在生成hadoop本地庫的目標平臺上必須 安裝了zlib和lzo開發包;但是如果你只希望使用其中一個的話,在部署時,安裝其中任何一個都是足夠的。
在目標平臺上生成以及部署hadoop本地庫時,都需要根據32/64位jvm選取對應的32/64位zlib/lzo軟體包。
使用DistributedCache 載入本地庫
使用者可以通過 DistributedCache 載入本地共享庫,並分發和建立庫檔案的符號連結。
這個例子描述瞭如何分發庫檔案並在從map/reduce任務中裝載庫檔案。
首先拷貝庫檔案到HDFS。
bin/hadoop fs -copyFromLocal mylib.so.1 /libraries/mylib.so.1
啟動作業時包含以下程式碼:
DistributedCache.createSymlink(conf);
DistributedCache.addCacheFile(“hdfs://host:port/libraries/mylib.so.1#mylib.so”, conf);
map/reduce任務中包含以下程式碼:
System.loadLibrary(“mylib.so”);

原文釋出時間為:2009-06-15
本文作者: IT168.com
本文來自雲棲社群合作伙伴IT168,瞭解相關資訊可以關注IT168。
原文標題:Hadoop本地庫


相關文章