Hadoopにlzoの環境構築(1)

12日目です
今更ながら手元のHadoopクラスタにLZOの環境を構築しました。
Cloudera ManagerにはLZOのPercelレポジトリ[1]があります。Cloudera Manager経由で構築した環境であれば、あえてソースからビルドする必要はありません。使用方法は[2]をご覧下さい。
[1] http://archive.cloudera.com/gplextras/parcels/latest/
[2] http://www.cloudera.com/content/cloudera-content/cloudera-docs/CM4Ent/4.5.3/Cloudera-Manager-Enterprise-Edition-Installation-Guide/cmeeig_install_LZO_Compression.html

ビルドに必要なパッケージのインストール

[shell]$ sudo yum -y install ant-nodeps gcc-c++ lzo-devel rpm-build
$ git clone https://github.com/toddlipcon/hadoop-lzo-packager.git
$ git clone https://github.com/kawamon/hadoop-lzo
$ cd hadoop-lzo-packager/[/shell]
一カ所 run.sh を変更する必要があります。GITHUB_ACCOUNTを必要に応じて修正して下さい。
[shell]— run.sh.orig 2013-12-12 10:05:02.455845143 -0500
+++ run.sh 2013-12-12 10:36:25.090058872 -0500
@@ -175,7 +175,7 @@
}
setup_github() {
– GITHUB_ACCOUNT=${GITHUB_ACCOUNT:-cloudera}
+ GITHUB_ACCOUNT=${GITHUB_ACCOUNT:-kawamon}
GITHUB_BRANCH=${GITHUB_BRANCH:-master}
PACKAGE_HOMEPAGE=http://github.com/$GITHUB_ACCOUNT/hadoop-lzo
TARURL=http://github.com/$GITHUB_ACCOUNT/hadoop-lzo/tarball/$GITHUB_BRANCH[/shell]

ビルド

[shell]$ ./run.sh -D
+ set -e
+ WGET_OPTS=–no-check-certificate
+ ANT_VERSION=1.8.4
+ ANT_TARBALL=apache-ant-1.8.4-bin.tar.gz
+ ANT_TARBALL_URL=http://www.gtlib.gatech.edu/pub/apache/ant/binaries/apache-ant-1.8.4-bin.tar.gz
+ ‘[‘ -n -D ‘]’
+ arg=-D
+ shift
(略)
$[/shell]
無事にビルドが終わったようです。RPMも作成されています。
[shell]$ ls build/topdir/RPMS/i386/
kawamon-hadoop-lzo-20131212105820.5656625-1.i386.rpm[/shell]
インストールと設定 パッケージをインストールし、設定します。
[shell]$ sudo rpm -ivh ./build/topdir/RPMS/i386/kawamon-hadoop-lzo-20131212105820.5656625-1.i386.rpm
Preparing… ########################################### [100%]
1:kawamon-hadoop-lzo ########################################### [100%]
$ sudo cp -a /usr/lib/hadoop-0.20/lib/* /usr/lib/hadoop/lib/
$ sudo cp -a /usr/lib/hadoop/lib/native/Linux-i386-32/* /usr/lib/hadoop/lib/native/
$ [/shell]

テスト

コマンドラインからLZOで圧縮を行うために、 lzop をダウンロードします。
[shell] $ wget http://dl.fedoraproject.org/pub/epel/6/i386/lzop-1.02-0.9.rc1.el6.i686.rpm
$ sudo rpm -ivh lzop-1.02-0.9.rc1.el6.i686.rpm
Preparing… ########################################### [100%]
1:lzop ########################################### [100%]
$ [/shell]
teragenを使って1GBのファイルを作成します。teragenはterasortとペアで使うことが多い、大きなファイルを作成するためのクラスです。
[shell]$ hadoop jar /usr/lib/hadoop-0.20-mapreduce/hadoop-examples.jar teragen 10000000 1G
hadoop jar /usr/lib/hadoop-0.20-mapreduce/hadoop-examples.jar teragen 10000000 1G
13/12/12 11:26:47 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
Generating 10000000 using 1 maps with step of 10000000
13/12/12 11:26:48 INFO mapred.JobClient: Running job: job_201312031004_0003
13/12/12 11:26:49 INFO mapred.JobClient: map 0% reduce 0%
13/12/12 11:26:59 INFO mapred.JobClient: map 18% reduce 0%
13/12/12 11:27:02 INFO mapred.JobClient: map 29% reduce 0%
13/12/12 11:27:05 INFO mapred.JobClient: map 39% reduce 0%
13/12/12 11:27:08 INFO mapred.JobClient: map 49% reduce 0%
(略)
13/12/12 11:27:23 INFO mapred.JobClient: Total committed heap usage (bytes)=16056320
13/12/12 11:27:23 INFO mapred.JobClient: org.apache.hadoop.mapreduce.lib.input.FileInputFormatCounter
13/12/12 11:27:23 INFO mapred.JobClient: BYTES_READ=10000000
$ [/shell]
作成したファイルをローカルにダウンロードします。
[shell]$ hadoop fs -ls 1G/part*
Found 1 items
-rw-r–r– 1 training supergroup 1000000000 2013-12-12 11:27 1G/part-00000
$ hadoop fs -get 1G/part-00000 1G.dat[/shell]
lzopコマンドを使って圧縮します。
[shell]$ lzop 1G.dat
$ ls -l 1G.dat*
-rwxr-xr-x 1 training training 1000000000 Dec 12 11:30 1G.dat
-rwxr-xr-x 1 training training 189710458 Dec 12 11:30 1G.dat.lzo
[/shell]
LZOはスプリット可能な圧縮フォーマットです。しかし、スプリットするためにはインデックスを作成する必要があります。インデックスを作成する前に、HadoopがLZOコーデックを利用できるように core-site.xml にコーデックを追加します。
[html]
<property>
<name>io.compression.codecs</name>
<value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
<property>
<name>io.compression.codec.lzo.class</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
[/html]
ファイルをアップロードして、インデックスを作成しましょう。
[shell]$ hadoop jar /usr/lib/hadoop/lib/kawamon-hadoop-lzo-20131212105820.5656625.jar com.hadoop.compression.lzo.LzoIndexer lzotest/1G.dat.lzo
13/12/12 11:40:22 INFO lzo.GPLNativeCodeLoader: Loaded native gpl library
13/12/12 11:40:22 INFO lzo.LzoCodec: Successfully loaded & initialized native-lzo library [hadoop-lzo rev 477079631bb6c2b47f15140548e2c0f4efa6996f]
13/12/12 11:40:22 INFO lzo.LzoIndexer: [INDEX] LZO Indexing file lzotest/1G.dat.lzo, size 0.18 GB…
13/12/12 11:40:22 WARN snappy.LoadSnappy: Snappy native library is available
13/12/12 11:40:22 INFO snappy.LoadSnappy: Snappy native library loaded
13/12/12 11:40:22 WARN conf.Configuration: hadoop.native.lib is deprecated. Instead, use io.native.lib.available
13/12/12 11:40:23 INFO lzo.LzoIndexer: Completed LZO Indexing in 0.58 seconds (309.27 MB/s). Index size is 29.80 KB.
$ hadoop fs -ls lzotest
Found 2 items
-rw-r–r– 1 training supergroup 189710458 2013-12-12 11:36 lzotest/1G.dat.lzo
-rw-r–r– 1 training supergroup 30520 2013-12-12 11:40 lzotest/1G.dat.lzo.index
[/shell]
無事にインデックスが作成されました。
明日に続きます。

コメント