このガイドでは、ネイティブHadoopライブラリについて説明し、ネイティブ共有ライブラリに関する簡単な議論を含みます。
注: 環境によっては、「ネイティブライブラリ」という用語は、コンパイルする必要があるすべての*.soを指す場合があります。また、「ネイティブ圧縮」という用語は、特に圧縮に関連するコンパイルする必要があるすべての*.soを指す場合があります。ただし、現在、このドキュメントではネイティブHadoopライブラリ(`libhadoop.so`)についてのみ説明しています。 libhdfsライブラリ(`libhdfs.so`)のドキュメントはこちらです。
Hadoopは、パフォーマンス上の理由とJava実装が利用できない場合のために、特定のコンポーネントのネイティブ実装を提供しています。これらのコンポーネントは、ネイティブHadoopライブラリと呼ばれる単一の動的にリンクされたネイティブライブラリで利用できます。 *nixプラットフォームでは、ライブラリの名前は`libhadoop.so`です。
ネイティブHadoopライブラリの使用は非常に簡単です
ネイティブHadoopライブラリには、さまざまなコンポーネントが含まれています
ネイティブHadoopライブラリは、*nixプラットフォームでのみサポートされています。ライブラリは、CygwinまたはMac OS Xプラットフォームでは動作しません。
ネイティブHadoopライブラリは、主にGNU/Linuxプラットフォームで使用され、以下のディストリビューションでテストされています
上記のすべてのディストリビューションで、32/64ビットのネイティブHadoopライブラリは、それぞれの32/64ビットのJVMで動作します。
事前にビルドされた32ビットi386-LinuxネイティブHadoopライブラリは、Hadoopディストリビューションの一部として利用でき、`lib/native`ディレクトリにあります。 Hadoopディストリビューションは、Hadoop Common Releasesからダウンロードできます。
デプロイメントで使用する圧縮コーデックに応じて、zlibおよび/またはgzip開発パッケージを必ずインストールしてください。
ネイティブHadoopライブラリはANSI Cで記述されており、GNU autotoolsチェーン(autoconf、autoheader、automake、autoscan、libtool)を使用してビルドされます。つまり、標準準拠のCコンパイラとGNU autotoolsチェーンを備えたプラットフォームであれば、ライブラリのビルドは簡単です(対応プラットフォームを参照)。
ターゲットプラットフォームにインストールする必要があるパッケージは次のとおりです
前提条件パッケージをインストールしたら、標準のHadoop pom.xmlファイルを使用し、ネイティブフラグを渡してネイティブHadoopライブラリをビルドします
$ mvn package -Pdist,native -DskipTests -Dtar
新しくビルドされたライブラリは、以下の場所に表示されます
$ hadoop-dist/target/hadoop-3.3.6/lib/native
以下の点に注意してください
bin/hadoopスクリプトは、システムプロパティ:`-Djava.library.path=<path>`を介してネイティブHadoopライブラリがライブラリパス上にあることを確認します
ランタイム中は、MapReduceタスクのHadoopログファイルを確認してください。
NativeLibraryCheckerは、ネイティブライブラリが正しくロードされているかどうかを確認するためのツールです。 NativeLibraryCheckerは次のように起動できます
$ 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 zstd: true /usr/lib/libzstd.so.1 lz4: true revision:99 bzip2: false
ライブラリファイルを配布およびシンボリックリンクするために、DistributedCacheを使用して任意のネイティブ共有ライブラリをロードできます。
この例では、共有ライブラリmylib.soを配布し、MapReduceタスクからロードする方法を示します。
注: ネイティブHadoopライブラリをダウンロードまたはビルドした場合、DistibutedCacheを使用してライブラリをMapReduceタスクで使用できるようにする必要はありません。