2009年11月12日木曜日

1台構成のHadoopを30分で試してみる(Ubuntu + Cloudera)

概要
・1台のLinux環境で、簡単に、Hadoopを体験してみる方法です。
・HDFSにちょっとファイルを置いてみたり、少しMapReduceジョブを動かしてみます。
・UbuntuとCloudera社版のHadoopディストリビューションパッケージCDH3(無料)を利用します。(debパッケージなので、インストール・アンインストール、サービス起動・停止等が楽です)

その他の記事

Hadoop(1台構成)HBase,Hive,Pig,HUE,Oozie等(1台構成)Hadoop(複数台構成)
CentOSこちらHBase,Hive,Pig,HUE(旧Cloudera Desktop), Oozieこちら
UbuntuこちらHBase,Hive,Pig,HUE(旧Cloudera Desktop)


(参考) Cloudera社のHadoopパッケージの情報 http://archive.cloudera.com/docs/

必要なもの
・UbuntuやdebianのLinux環境1台(手元ではUbuntu Server 11.04/10.04/9.10/8.04, debian 5あたりで試していますが、他バージョンでも大丈夫だと思います)
・インターネット接続
・Sun(Oracle)のJavaパッケージ(aptでインターネットからインストール)
・Cloudera社のCDH3のHadoopパッケージ(aptでインターネットからインストール)

作業手順

1. インストール: Linux環境にて、rootで作業します。

sudo su

1-1. Sun(Oracle)のJavaを入れます。(Sun(Oracle)のものが必要です。)

※ ここで、ubuntu 10や11の人は/etc/apt/sources.listの編集が必要です。(partnerリポジトリの追加)
まず、/etc/apt/sources.listファイルの後ろの方のコメントアウトされている行を有効にします。(lucidの例)
編集前: # deb http://archive.canonical.com/ubuntu lucid partner
編集後: deb http://archive.canonical.com/ubuntu lucid partner
そして、
apt-get update
とします。

※ ここで、debian 5の人は/etc/apt/sources.listの編集が必要です。
まず、/etc/apt/sources.listファイルの最初の方の行を変更(追記)。
編集前: deb http://ftp.jp.debian.org/debian/ lenny main
編集後: deb http://ftp.jp.debian.org/debian/ lenny main non-free
そして、
apt-get update
とします。

Sun社Javaパッケージのインストール
apt-get install sun-java6-jdk

確認します。
java -version

結果例
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)

1-2. Cloudera社版のHadoopを入れます。

1-2-a. Cloudera社リポジトリの追加

1-2-a-1. リポジトリ設定ファイルの作成

とりあえず、以下の感じで動くようです。

Ubuntu 10.10の人(と11.04の人もとりあえず)、
cat << EOF > /etc/apt/sources.list.d/cloudera.list
deb http://archive.cloudera.com/debian maverick-cdh3 contrib
deb-src http://archive.cloudera.com/debian maverick-cdh3 contrib
EOF

Ubuntu 10.04の人、
cat << EOF > /etc/apt/sources.list.d/cloudera.list
deb http://archive.cloudera.com/debian lucid-cdh3 contrib
deb-src http://archive.cloudera.com/debian lucid-cdh3 contrib
EOF

debian 5の人、
cat << EOF > /etc/apt/sources.list.d/cloudera.list
deb http://archive.cloudera.com/debian lenny-cdh3 contrib
deb-src http://archive.cloudera.com/debian lenny-cdh3 contrib
EOF

Ubuntu 9.10の人は、
cat << EOF > /etc/apt/sources.list.d/cloudera.list
deb http://archive.cloudera.com/debian karmic-cdh3 contrib
deb-src http://archive.cloudera.com/debian karmic-cdh3 contrib
EOF

Ubuntu 8.04の人は、
cat << EOF > /etc/apt/sources.list.d/cloudera.list
deb http://archive.cloudera.com/debian jaunty-cdh3 contrib
deb-src http://archive.cloudera.com/debian jaunty-cdh3 contrib
EOF

その他のディストリビューション・バージョンの場合は、以下のようにDISTRO名を確認し、それに応じた設定ファイルを作成します。
・DISTRO名を確認し、
lsb_release -c
Codename:       jaunty
→この場合、DISTRO名は"jaunty"
・以下のようなファイルを作成します。(DISTROの部分をDISTRO名に置き換えます)
ファイル名: /etc/apt/sources.list.d/cloudera.list
内容:
deb http://archive.cloudera.com/debian DISTRO-testing contrib
deb-src http://archive.cloudera.com/debian DISTRO-testing contrib

1-2-a-2. リポジトリーキーを追加し、aptのインデックスを更新します。
wget -q http://archive.cloudera.com/debian/archive.key -O- | apt-key add -
apt-get update

(参考1) http://archive.cloudera.com/docs/_apt.html

1-2-b. Hadoopをインストール

apt-get -y install hadoop-0.20

結果例
...略...
hadoop-0.20 (0.20.2+923.97-1~maverick-cdh3) を設定しています ...
update-alternatives: /etc/hadoop-0.20/conf (hadoop-0.20-conf) を提供するために 自動モード で /etc/hadoop-0.20/conf.empty を使います。
update-alternatives: /usr/bin/hadoop (hadoop-default) を提供するために 自動モード で /usr/bin/hadoop-0.20 を使います。
hadoop-0.20-native (0.20.2+923.97-1~maverick-cdh3) を設定しています ...
libc-bin のトリガを処理しています ...
ldconfig deferred processing now taking place


1-2-c. 簡単な設定ファイル一式をインストール(一台構成で試すためのお手軽設定)
apt-get -y install hadoop-0.20-conf-pseudo

結果例
...略...
ureadahead のトリガを処理しています ...
hadoop-0.20-namenode (0.20.2+923.97-1~maverick-cdh3) を設定しています ...
hadoop-0.20-datanode (0.20.2+923.97-1~maverick-cdh3) を設定しています ...
hadoop-0.20-secondarynamenode (0.20.2+923.97-1~maverick-cdh3) を設定しています ...
hadoop-0.20-jobtracker (0.20.2+923.97-1~maverick-cdh3) を設定しています ...
hadoop-0.20-tasktracker (0.20.2+923.97-1~maverick-cdh3) を設定しています ...
hadoop-0.20-conf-pseudo (0.20.2+923.97-1~maverick-cdh3) を設定しています ...
update-alternatives: /etc/hadoop-0.20/conf (hadoop-0.20-conf) を提供するために 自動モード で /etc/hadoop-0.20/conf.pseudo を使います。

1-3. サービス起動

起動
/etc/init.d/hadoop-0.20-namenode start
/etc/init.d/hadoop-0.20-jobtracker start
/etc/init.d/hadoop-0.20-datanode start
/etc/init.d/hadoop-0.20-tasktracker start


2. 確認・お試し

2-1. ブラウザ(Web UI)で様子を見てみる

ローカルのブラウザから
HDFSの様子を見てみる
http://localhost:50070/

MapReduceの様子を見てみる
http://localhost:50030/


※ 別にWebUIを見なくても、以下の手順は試すことができます。
※ 外部から、Web UIにアクセスするには、Hadoopの設定変更と、firewall設定の変更が必要かもしれません。ここでは、50070/tcp、50075/tcp、50030/tcpの許可が必要です。
※ シンプルなUIなので、テキストベースのWebブラウザで十分かもしれません。(links等)

links(テキストベースのWebブラウザ)の例
apt-get -y install links
links http://localhost:50070/





2-2. HDFSを試す

Linux環境にて、作業します。rootでなくてもいいです。
(ここでの"簡単な設定"では、HDFS上のファイルパーミッション機能がOFFになっているので、誰でもいいです。)

2-2-a. フォルダを作ってみる
hadoop-0.20 fs -mkdir TESTFOLDER01

2-2-b. ファイルを置いてみる

ローカルにテストファイル(/var/tmp/test)を作ります。
cat << OTAMESHI > /var/tmp/test
hello hadoop world
OTAMESHI

ローカルのテストファイルをHDFS上にコピーしてみます。
hadoop-0.20 fs -put /var/tmp/test TESTFOLDER01

2-2-c. ファイルを取り出してみる

2-2-c-1. HDFS上のファイルをcatしてみます
hadoop-0.20 fs -cat TESTFOLDER01/test

2-2-c-2. HDFS上のファイルをローカル(/var/tmp/test2)に、取り出してみます
hadoop-0.20 fs -get TESTFOLDER01/test /var/tmp/test2

ローカルに取り出したものの中身を確認します。
cat /var/tmp/test2


2-2-d. 今一度、ブラウザ(Web UI)からHDFSの様子を見てみる

http://localhost:50070/から
一番上のリンク"Browse the filesystem"から、
フォルダを、
user/root/TESTFOLDER01/test
と辿ってみます。

2-2-e. もっとHDFSでいろいろしてみるには、

ヘルプを読みます。
hadoop-0.20 fs -help


2-3. MapReduceを試す

Linux環境にて、作業します。rootでなくてもいいです。

hadoop-0.20 jar /usr/lib/hadoop-0.20/hadoop-*-examples.jar pi 4 2000

結果例
...略...
うっすらmapしてreduceします。
...略...
Job Finished in 94.799 seconds
Estimated value of Pi is 3.14100000000000000000

円周率が計算されました。

本当は3.14159...なので、たいした精度じゃないですね。
最後の引数を多くすると精度が上がるようです。20000とか試してみるといいと思います。
最後から二番目の引数がMapの数です。10とか試してみてもいいと思います。

他のMapReduceのサンプルは、
hadoop-0.20 jar /usr/lib/hadoop-0.20/hadoop-*-examples.jar


3. おまけ

HBase, Hive, Pigなどの便利なサブプロジェクトの成果を試したり、複数台構成のHadoop環境にチャレンジしたりすると楽しいかもしれません。

1台でHive, Pig, Cloudera Desktopを試してみる


--
終わり

0 件のコメント:

コメントを投稿