Hadoopのローカルライブラリ(Native Libraries)および関連問題のまとめ
5753 ワード
マスター:http://blog.sina.com.cn/s/blog_3d9e90ad0102wqrp.html(自己測定では、getconf LONG_BITは32を返し、file libhadoop.so.1.0.0は64を返します.反対です)
Hadoopのローカルライブラリ(Native Libraries)の紹介
HadoopはJava言語で開発されていますが、Javaを使用するのに適していない需要や操作があるため、Native Librariesの概念を導入し、ローカルライブラリを通じてHadoopはより効率的にいくつかの操作を実行することができます.
現在Hadoopでは、ローカルライブラリがファイルの圧縮に適用されています.
zlib
gzip
この2つの圧縮方式を使用する場合、Hadoopのデフォルトは$HADOOP_からHOME/lib/native/Linux-*ディレクトリにローカルライブラリをロードします.
ロードに成功した場合は、次のように出力されます.
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のプロファイルcore-site.xmlでは、ローカルライブラリを使用するかどうかを設定できます.
hadoop.native.lib true Should native hadoop libraries, if present, be used.
Hadoopのデフォルト設定は、ローカルライブラリを有効にします.
また、ローカルライブラリを使用する場所は、環境変数で設定できます.
Check
公式リンク:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/NativeLibraries.html#Native_Hadoop_Library
NativeLibraryChecker is a tool to check whether native libraries are loaded correctly. You can launch NativeLibraryChecker as follows:
Hadoopの詳細については、以下を参照してください.http://www.cnblogs.com/gpcuster/tag/Hadoop/
hadoop nativeローカルライブラリの問題概要
最近、hbaseテーブルをsnappyで圧縮しようとしたとき、hadoopローカルライブラリの問題に遭遇しました.実はこれらの問題はずっと存在して、ただ正常な使用に影響しないで、重視を引き起こしていません.今回は以下の問題を徹底的に解決したい:問題1: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 ', or link it with '-z noexecstack'.これは、公式サイトが提供するバージョンのローカルライブラリが32ビットであり、64ビットホスト環境では実行できないためです.hadoopソースをダウンロードしてコンパイルする必要があります(ソースをどのようにコンパイルしてインターネットで検索することができます)、コンパイルに成功した後、nativeの下のファイルを見つけて${HADOOP_HOME}/lib/nativeディレクトリの下にコピーすればいいです.問題2:start-dfsを実行する.sh時に以下のログWARN utilが現れる.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes whereアプリケーションはネット上で見つけたすべての文章の中でhadoop-envと言っています.shには、export HADOOP_の2行の構成を追加します.COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/nativeexport HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/"ですが、テスト中に上記の構成を追加すると、ローカルライブラリがロードされていないことを示す警告メッセージが表示されます.オープンデバッグ: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構成のパスに問題があります.ハドop-env.shでの再構成:export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/nativeexport HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native/"start-dfsを実行する.sh,アラーム情報は表示されなくなった.テストした結果、実はexport HADOOPしか必要ありません.OPTSで問題を解決できる.ローカルライブラリが正常にロードされたことを確認します:hadoop checknative 15/08/18 10:31:17 INFO bzip 2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native15/08/18 10:31:17 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib libraryNative library checking:hadoop: true/usr/local/hadoop-2.4.0/lib/native/libhadoop.so.1.0.0zlib: true/lib64/libz.so.1snappy: true/usr/local/hadoop-2.4.0/lib/native/Linux-amd64-64/libsnappy.so.1lz4: true revision:99bzip2: true/lib64/libbz2.so.1以上は、ローカルライブラリが正常にロードされたことを示しています.snappy圧縮構成のインストールには、次の2つの記事を参照してください.http://www.micmiu.com/bigdata/hadoop/hadoop-snappy-install-config/http://www.cnblogs.com/shitouer/archive/2013/01/14/2859475.html以上の文章に基づいてhbaseを配置すると、表を作るときに引っかかり、regionserverのエラー:IOException:Compression algorithm'snappy'previously failed testはネット上で多くの文章を検索し、千編一律のコピーで貼り付けられており、終始以上の問題を解決できない.幸いなことに、最後にこの文章を見つけました.http://blackwing.iteye.com/blog/1943575ああ、説明はずっと難解でしたが、模索の末、私の問題を解決してくれて、このブロガーに感謝しています.最後にhbaseを構成するには、1、hadoopのローカルライブラリとsnappyのローカルライブラリを$HBASE_にコピーする必要があります.HOME/lib/native/Linux-amd 64-64/ディレクトリの下に、以下のスクリーンショットがあります.
2、hbase-env.shに次の構成を追加します:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native/Linux-amd64-64/export HBASE_LIBRARY_PATH=$HBASE_LIBRARY_PATH:$HBASE_HOME/lib/native/Linux-amd 64-64/同じ問題に遭遇した子供靴に少し役に立つことを望んでいます
Hadoopのローカルライブラリ(Native Libraries)の紹介
HadoopはJava言語で開発されていますが、Javaを使用するのに適していない需要や操作があるため、Native Librariesの概念を導入し、ローカルライブラリを通じてHadoopはより効率的にいくつかの操作を実行することができます.
現在Hadoopでは、ローカルライブラリがファイルの圧縮に適用されています.
zlib
gzip
この2つの圧縮方式を使用する場合、Hadoopのデフォルトは$HADOOP_からHOME/lib/native/Linux-*ディレクトリにローカルライブラリをロードします.
ロードに成功した場合は、次のように出力されます.
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のプロファイルcore-site.xmlでは、ローカルライブラリを使用するかどうかを設定できます.
hadoop.native.lib true Should native hadoop libraries, if present, be used.
Hadoopのデフォルト設定は、ローカルライブラリを有効にします.
また、ローカルライブラリを使用する場所は、環境変数で設定できます.
export JAVA_LIBRARY_PATH=/path/to/hadoop-native-libs
Hadoop , 。
$HADOOP_HOME ,
:
ant compile-native
, $HADOOP_HOME/build/native , 。
:
Check
公式リンク:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/NativeLibraries.html#Native_Hadoop_Library
NativeLibraryChecker is a tool to check whether native libraries are loaded correctly. You can launch NativeLibraryChecker as follows:
$ hadoop checknative -a
14/12/06 01:30:45 WARN bzip2.Bzip2Factory: Failed to load/initialize native-bzip2 library system-native, will use pure-Java version
14/12/06 01:30:45 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library Native library checking:
hadoop: true /home/ozawa/hadoop/lib/native/libhadoop.so.1.0.0
zlib: true /lib/x86_64-linux-gnu/libz.so.1
snappy: true /usr/lib/libsnappy.so.1
lz4: true revision:99
bzip2: false
Hadoopの詳細については、以下を参照してください.http://www.cnblogs.com/gpcuster/tag/Hadoop/
hadoop nativeローカルライブラリの問題概要
最近、hbaseテーブルをsnappyで圧縮しようとしたとき、hadoopローカルライブラリの問題に遭遇しました.実はこれらの問題はずっと存在して、ただ正常な使用に影響しないで、重視を引き起こしていません.今回は以下の問題を徹底的に解決したい:問題1: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 ', or link it with '-z noexecstack'.これは、公式サイトが提供するバージョンのローカルライブラリが32ビットであり、64ビットホスト環境では実行できないためです.hadoopソースをダウンロードしてコンパイルする必要があります(ソースをどのようにコンパイルしてインターネットで検索することができます)、コンパイルに成功した後、nativeの下のファイルを見つけて${HADOOP_HOME}/lib/nativeディレクトリの下にコピーすればいいです.問題2:start-dfsを実行する.sh時に以下のログWARN utilが現れる.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes whereアプリケーションはネット上で見つけたすべての文章の中でhadoop-envと言っています.shには、export HADOOP_の2行の構成を追加します.COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/nativeexport HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/"ですが、テスト中に上記の構成を追加すると、ローカルライブラリがロードされていないことを示す警告メッセージが表示されます.オープンデバッグ: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構成のパスに問題があります.ハドop-env.shでの再構成:export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/nativeexport HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native/"start-dfsを実行する.sh,アラーム情報は表示されなくなった.テストした結果、実はexport HADOOPしか必要ありません.OPTSで問題を解決できる.ローカルライブラリが正常にロードされたことを確認します:hadoop checknative 15/08/18 10:31:17 INFO bzip 2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native15/08/18 10:31:17 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib libraryNative library checking:hadoop: true/usr/local/hadoop-2.4.0/lib/native/libhadoop.so.1.0.0zlib: true/lib64/libz.so.1snappy: true/usr/local/hadoop-2.4.0/lib/native/Linux-amd64-64/libsnappy.so.1lz4: true revision:99bzip2: true/lib64/libbz2.so.1以上は、ローカルライブラリが正常にロードされたことを示しています.snappy圧縮構成のインストールには、次の2つの記事を参照してください.http://www.micmiu.com/bigdata/hadoop/hadoop-snappy-install-config/http://www.cnblogs.com/shitouer/archive/2013/01/14/2859475.html以上の文章に基づいてhbaseを配置すると、表を作るときに引っかかり、regionserverのエラー:IOException:Compression algorithm'snappy'previously failed testはネット上で多くの文章を検索し、千編一律のコピーで貼り付けられており、終始以上の問題を解決できない.幸いなことに、最後にこの文章を見つけました.http://blackwing.iteye.com/blog/1943575ああ、説明はずっと難解でしたが、模索の末、私の問題を解決してくれて、このブロガーに感謝しています.最後にhbaseを構成するには、1、hadoopのローカルライブラリとsnappyのローカルライブラリを$HBASE_にコピーする必要があります.HOME/lib/native/Linux-amd 64-64/ディレクトリの下に、以下のスクリーンショットがあります.
2、hbase-env.shに次の構成を追加します:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native/Linux-amd64-64/export HBASE_LIBRARY_PATH=$HBASE_LIBRARY_PATH:$HBASE_HOME/lib/native/Linux-amd 64-64/同じ問題に遭遇した子供靴に少し役に立つことを望んでいます