LZO のライセンス (GPL) は Hadoop (Apache) のライセンスと互換性がないため、バンドルすることはできません。クラスターに LZO を個別にインストールする必要があります。
次の手順は、CDH 4.2.0 のフル スタックと CM Free Edition がインストールされたCloudera のデモ VM (CentOS 6.2、x64) でテストされていますが、Red Hat ベースの任意の Linux でも動作するはずです。
インストールは次の手順で構成されます。
LZOのインストール
sudo yum install lzop
sudo yum install lzo-devel
ANTのインストール
sudo yum install ant ant-nodeps ant-junit java-devel
ソースのダウンロード
git clone https://github.com/twitter/hadoop-lzo.git
Hadoop-LZO のコンパイル
ant compile-native tar
詳しい手順とトラブルシューティングについては、https://github.com/twitter/hadoop-lzoを参照してください。
Hapoop-LZO jar を Hadoop ライブラリにコピーする
sudo cp build/hadoop-lzo*.jar /usr/lib/hadoop/lib/
ネイティブ コードを Hadoop ネイティブ ライブラリに移動する
sudo mv build/hadoop-lzo-0.4.17-SNAPSHOT/lib/native/Linux-amd64-64/ /usr/lib/hadoop/lib/native/
cp /usr/lib/hadoop/lib/native/Linux-amd64-64/libgplcompression.* /usr/lib/hadoop/lib/native/
複製したバージョンで正しいバージョン番号
(疑似クラスターとは対照的に) 実際のクラスターで作業する場合は、これらを残りのマシンに rsync する必要があります。
rsync /usr/lib/hadoop/lib/
すべてのホストに。
-n を使用して、最初にこれをドライランできます
Cloudera Manager にログイン
サービスから選択: mapreduce1->Configuration
クライアント -> 圧縮
圧縮コーデックに追加:
com.hadoop.compression.lzo.LzoCodec
com.hadoop.compression.lzo.LzopCodec
「バルブ」ですべてを検索
MapReduce サービス構成に追加 安全弁
io.compression.codec.lzo.class=com.hadoop.compression.lzo.LzoCodec
mapred.child.env="JAVA_LIBRARY_PATH=/usr/lib/hadoop/lib/native/Linux-amd64-64/"
MapReduce サービスに追加 環境安全弁
HADOOP_CLASSPATH=/usr/lib/hadoop/lib/*
それでおしまい。
使用する MarReduce ジョブは、ファイルTextInputFormat
とシームレスに連携する必要があり.lzo
ます。ただし、LZO ファイルにインデックスを付けて ( を使用して) 分割可能にすることを選択した場合、インデクサーが各ファイルの次にファイルをcom.hadoop.compression.lzo.DistributedLzoIndexer
書き込むことがわかります。これらは入力の一部として解釈されるため、これは問題です。この場合、MR ジョブを で動作するように変更する必要があります。.index
.lzo
TextInputFormat
LzoTextInputFormat
Hive の時点では、LZO ファイルのインデックスを作成しない限り、変更も透過的です。インデックス作成を開始する場合 (より良いデータ分散を利用するため)、入力形式を に更新する必要がありますLzoTextInputFormat
。パーティションを使用する場合は、パーティションごとに実行できます。