2009年12月9日水曜日

1台でHBase, Hive, Pig, HUE(旧Cloudera Desktop)を試してみる(CentOS + Cloudera)

概要
・1台のLinux環境で、簡単に、HadoopのHBase, Hive, Pig, HUE(旧Cloudera Desktop)を試してみます。
・CentOS(1台)でCloudera社のHadoopパッケージ(CDH3)を利用します。Hadoop環境(CDH3)の構築方法はこちら

その他の記事

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


必要なもの
・Linux(CentOS)+Cloudera版Hadoop環境CDH3(1台) → 構築方法はこちら
・インターネット接続
・Cloudera社のHBase,Hive,Pig,HUEのパッケージ(yumでインターネットからインストール)

作業手順

以下の、1. HBase, 2. Pig, 3. Hive, 4. HUE(旧Cloudera Desktop)の手順は、独立して試すことができますし、一つの環境でまとめて試すこともできます。(それぞれデータの管理は別々です。)

ここでは、Cloudera社のCDH3リポジトリが必要ですので、既に設定されていないか確認します。
ls /etc/yum.repos.d/
で、cloudera-cdh3.repoが存在すれば、OKのはずです。無い場合は、CDHのhadoopのインストール方法を確認してください。

1. HBase

CDH3(beta2以降)のHBaseは、以前(contrib)から、パッケージ名やディレクトリ名がだいぶ変更されているので注意です。ここでは、CDH3にあわせて書いてあります。

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

1-1-1. HBaseをインストールします。

yum -y install hadoop-hbase
yum -y install hadoop-hbase-master
yum -y install hadoop-hbase-regionserver
yum -y install hadoop-zookeeper-server


確認します。
yum list hadoop-hbase-*

結果例
Installed Packages
hadoop-hbase.noarch                                                  0.90.3+15.3-1                                      installedhadoop-hbase-master.noarch                                           0.90.3+15.3-1                                      installed
hadoop-hbase-regionserver.noarch                                     0.90.3+15.3-1                                      installed
Available Packages
hadoop-hbase-doc.noarch                                              0.90.3+15.3-1                                      cloudera-cdh3
hadoop-hbase-thrift.noarch                                           0.90.3+15.3-1  

確認します。
yum list hadoop-zookeeper*

結果例
Installed Packages
hadoop-zookeeper.noarch                                               3.3.3+12.12-1                                         installed
hadoop-zookeeper-server.noarch                                        3.3.3+12.12-1 



1-1-3. 設定を変更する。

うっすらdistributedモードっぽく動かすために、2つのファイルを変更します。

・/etc/zookeeper/zoo.cfg
/etc/zookeeper/zoo.cfgの最後の「server.0=localhost:2888:3888」の「localhost」の部分を他のもの(IPアドレス等)に変えます。

・/etc/hbase/conf/hbase-site.xml
cat << EOF > /etc/hbase/conf/hbase-site.xml
<configuration>
<property>
<name>hbase.zookeeper.quorum</name>
<value>zookeeperのzoo.cfg設定にあわせます(IPアドレス等)</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost:8020/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
</configuration>
EOF

1-2. サービス起動

service hadoop-zookeeper-server start
service hadoop-hbase-master start
service hadoop-hbase-regionserver start

確認します。
/usr/java/default/bin/jps

結果例
4588 Jps
3303 TaskTracker
3161 JobTracker
3224 DataNode
3107 NameNode
4395 HMaster
4549 HRegionServer
4325 QuorumPeerMain


1-3. 試してみる。

Hbaseを操作するshellをスタートさせます。
hbase shell

結果例
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.90.3-cdh3u1, r, Mon Jul 18 08:23:50 PDT 2011>


以下、hbaseプロンプトにて、version, status, exitあたりを試します。

結果例
HBase Shell; enter 'help' for list of supported commands.
Version: 0.89.20100924+28, r, Mon Oct 11 09:52:07 PDT 2010
hbase(main):001:0> version
Version: 0.89.20100924+28, r, Mon Oct 11 09:52:07 PDT 2010
hbase(main):002:0> status
1 servers, 0 dead, 2.0000 average load
hbase(main):003:0> exit



テーブルを作ったり、
create 'yamanoteline', 'transfer', 'location'

データをいれてみたり、
put 'yamanoteline', 'Shinagawa', 'location:ku', 'Minato'
put 'yamanoteline', 'Shinagawa', 'transfer:jreast', '3'
put 'yamanoteline', 'Shinagawa', 'transfer:subway', '0'
put 'yamanoteline', 'Shinagawa', 'transfer:other', '2'

put 'yamanoteline', 'Osaki', 'location:ku', 'Shinagawa'
put 'yamanoteline', 'Osaki', 'transfer:jreast', '2'
put 'yamanoteline', 'Osaki', 'transfer:subway', '0'
put 'yamanoteline', 'Osaki', 'transfer:other', '1'

put 'yamanoteline', 'Gotanda', 'location:ku', 'Shinagawa'
put 'yamanoteline', 'Gotanda', 'transfer:jreast', '0'
put 'yamanoteline', 'Gotanda', 'transfer:subway', '1'
put 'yamanoteline', 'Gotanda', 'transfer:other', '1'

データを取得(get)してみたり、検索(scan)してみたりします。
hbase(main):001:0> get 'yamanoteline', 'Osaki'

COLUMN                       CELL
location:ku                 timestamp=1260874378675, value=Shinagawa
transfer:jreast             timestamp=1260874469780, value=2
transfer:other              timestamp=1260874574851, value=1
transfer:subway             timestamp=1260874519709, value=0
4 row(s) in 0.8230 seconds
hbase(main):002:0> scan 'yamanoteline', {STARTROW => 'G', STOPROW => 'P'}
ROW     COLUMN+CELL
Gotanda  column=location:ku,    timestamp=1262587519391, value=Shinagawa 
Gotanda column=transfer:jreast, timestamp=1262587519537, value=0     
Gotanda column=transfer:other,  timestamp=1262587519881, value=1      
Gotanda column=transfer:subway, timestamp=1262587519689, value=1
Osaki   column=location:ku,     timestamp=1260874378652, value=Shinagawa
Osaki   column=transfer:jreast, timestamp=1260874469255, value=2
Osaki   column=transfer:other,  timestamp=1260874574371, value=1
Osaki   column=transfer:subway, timestamp=1260874519324, value=0
8 row(s) in 0.2450 seconds
hbase(main):011:0>

ここで「scan 'yamanoteline'」とすれば全データが取得されます。

・HDFS上は、/hbase/以下に、難しそうなファイルができます。
・ここで使ったデータは、以下の感じです。(山手線の駅の乗り換え路線数と所在(区))


nametransfer:jreasttransfer:subwaytransfer:otherlocation:ku
Shinagawa302Minato
Osaki201Shinagawa
Gotanda011Shinagawa


2. Pig

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

yum -y install hadoop-pig

結果例
...(略)
Installed:
hadoop-pig.noarch 0:0.7.0+9-1                                             

Complete!


2-2. 試してみる

テストファイルをローカル(/var/tmp/pigtest.csv)に用意し、
cat << TESTDATA > /var/tmp/pigtest.csv
Shinagawa,3,0,2 Minato
Osaki,2,0,1,Shinagawa
Gotanda,0,1,1,Shinagawa
Meguro,0,2,1,Shinagawa
Ebisu,2,1,0,Shibuya
Shibuya,2,3,3,Shibuya
Harajuku,0,1,0,Shibuya
Yoyogi,1,1,0,Shibuya
Shinjuku,5,3,3,Shinjuku
TESTDATA


テストファイルをHDFS上の/var/pigtest/test置きます。
hadoop-0.20 fs -put /var/tmp/pigtest.csv /var/pigtest/test.csv


pigのシェルを起動させ
JAVA_HOME=/usr/java/default/ pig

2009-12-09 21:43:46,430 [main] INFO  org.apache.pig.Main - Logging error messages to: /etc/hadoop-0.20/conf.pseudo/pig_1260362626428.log
2009-12-09 21:43:47,684 [main] INFO  org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: hdfs://localhost:8020
2009-12-09 21:43:49,200 [main] INFO  org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to map-reduce job tracker at: localhost:8021

grunt> 

以下、検索を試してみます。
grunt> Y1 = LOAD '/var/pigtest/test.csv' USING PigStorage(',')
AS (name: chararray,
transfer_jreast: int, transfer_subway: int, transfer_other: int,
location_ku: chararray);
grunt> Y2 = FILTER Y1 BY location_ku MATCHES 'Shibuya';
grunt> DUMP Y2;
...省略(ここでMapreduceが走るので、少し時間がかかります。)...
ine.mapReduceLayer.MapReduceLauncher - Success!
(Ebisu,2,1,0,Shibuya)
(Shibuya,2,3,3,Shibuya)
(Harajuku,0,1,0,Shibuya)
(Yoyogi,1,1,0,Shibuya)

grunt> QUIT;


3. Hive

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

yum -y install hadoop-hive

結果例
...(略)
Installed:                                         
hadoop-hive.noarch 0:0.5.0+32-2

Complete!


3-2. 試してみる。

ローカルに、テスト用のデータファイルを準備します。(果物の色と値段のデータ)
echo -e "apple\0001red\0001100\0012lemon\0001yellow\0001120\0012orange\0001orange\000160" > /var/tmp/data1


hiveのシェルを起動させ
hive

Hive history file=/tmp/root/hive_job_log_root_200912092154_480111727.txt
hive> 


以下、hive上で、データをロードして、SQLっぽいコマンドで少しいじってみます。
テーブルを作成してみます。SHOW TABLESで確認してみます。
hive> CREATE TABLE fruits (name STRING, color STRING, price INT);
OK
Time taken: 27.504 seconds
hive> SHOW TABLES;
OK
fruits
Time taken: 0.288 seconds

データをロード(果物の色と値段のデータです。)
hive> LOAD DATA LOCAL INPATH '/var/tmp/data1' OVERWRITE INTO TABLE fruits;
Copying data from file:/var/tmp/data1
Loading data to table fruits
OK
Time taken: 1.104 seconds
hive> SELECT * FROM fruits;
apple red 100
lemon yellow 120
orange orange 60

Time taken: 0.665 seconds

データを条件で抽出(80円より安い果物を表示します)
hive> SELECT * FROM fruits WHERE price < 80;
Total MapReduce jobs = 1
Number of reduce tasks is set to 0 since there's no reduce operator
Starting Job = job_200912092139_0003, Tracking URL = http://localhost:50030/jobdetails.jsp?jobid=job_200912092139_0003
Kill Command = /usr/lib/hadoop/bin/hadoop job -Dmapred.job.tracker=localhost:8021 -kill job_200912092139_0003
2009-12-09 09:59:52,112 map = 0%, reduce =0%
...省略(ここでMapreduceが走るので、少し時間がかかります。)...
2009-12-09 10:00:34,989 map = 100%, reduce =100%
Ended Job = job_200912092139_0003
OK
orange orange 60
Time taken: 48.499 seconds
hive> QUIT;


・JOINなども試せます。
もう一つファイルを用意して、
echo -e "pomme\0001apple\0012citron\0001lemon\0012orange\0001orange" > /var/tmp/data2

テーブルを作って、ロードします。(果物の名前のフランス語・英語の辞書です。)
hive> CREATE TABLE enfr (fr STRING, en STRING);
OK
Time taken: 18.98 seconds
hive> LOAD DATA LOCAL INPATH '/var/tmp/data2' OVERWRITE INTO TABLE enfr;
Copying data from file:/var/tmp/data2
Loading data to table enfr
OK
Time taken: 1.115 seconds
hive> SELECT * FROM enfr;
OK
pomme apple
citron lemon
orange orange

Time taken: 0.875 seconds

JOINを試してみます。(80円以上する果物を、フランス語で表示します。)
SELECT e.fr, f.price FROM fruits f JOIN enfr e ON f.name = e.en WHERE f.price > 80;
Total MapReduce jobs = 1
...省略(ここでMapreduceが走るので、少し時間がかかります。)...
2009-12-15 10:03:10,274 map = 100%, reduce =100%
Ended Job = job_200912152135_0004
OK
pomme 100
citron 120

Time taken: 132.47 seconds
hive>

・ここで使ったテーブルはこんな感じです。


fruits
namecolorprice
applered100
lemonyellow120
orangeorange20


enfr
fren
pommeapple
citronlemon
orangeorange


・もっとためすには、例えば、こちら
・HDFS上には、/user/hive/warehouse/以下にファイルができてたりします。


4. HUE(Hadoop User Experience)

HUEは、Cloudera Desktopの新しい名前みたいで、CDH3に入っています。以下は、CDH3 beta3での手順です。(すいません、以下は、まだ、betaではないCDH3では未確認です。)

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

4-1-1.パッケージのインストール

yum install hue hue-plugins

4-1-3. 設定ファイルの準備

一台構成のお手軽設定(hadoop-0.20-conf-pseudo)を使っている人は、特に何もしなくてもよさそうです。が、もしかすると、/etc/hue/hue.iniのうしろのnamenode_hostやjobtracker_hostを変更したほうがいいかも。

そうでない人は、おおむね以下を書き換えます。
・/etc/hadoop/conf.pseudo.clouderadesktop/hdfs-site.xmlに以下を追加します。
(<configuration>と</configuration>の間に)
<property>
<name>dfs.namenode.plugins</name>
<value>org.apache.hadoop.thriftfs.NamenodePlugin</value>
<description>Comma-separated list of namenode plug-ins to be activated.
</description>
</property>
<property>
<name>dfs.datanode.plugins</name>
<value>org.apache.hadoop.thriftfs.DatanodePlugin</value>
<description>Comma-separated list of datanode plug-ins to be activated.
</description>
</property>
<property>
<name>dfs.thrift.address</name>
<value>0.0.0.0:9090</value>
</property>

・/etc/hadoop/conf.pseudo.clouderadesktop/mapred-site.xmlに以下を追加します。
(<configuration>と</configuration>の間に)
<property>
<name>jobtracker.thrift.address</name>
<value>0.0.0.0:9290</value>
</property>
<property>
<name>mapred.jobtracker.plugins</name>
<value>org.apache.hadoop.thriftfs.ThriftJobTrackerPlugin</value>
<description>Comma-separated list of jobtracker plug-ins to be activated.
</description>
</property>

4-1-2. サービスのスタート
service hadoop-0.20-namenode restart
service hadoop-0.20-datanode restart
service hadoop-0.20-jobtracker restart
service hadoop-0.20-tasktracker restart
service hue start


4-1-3. firewallの設定

tcpの8088が空いている必要があります。

4-2. 使ってみる

Webブラウザ(Firefox)から、
http://ホスト:8088/
を閲覧します。

ログイン画面がでたら、例えば、
username=hadoop, password=hadoop
と入れてログインし、いろいろと試してみます。

(ログイン画面(usernameとpasswordを入力する画面)が出ない場合は、
ブラウザのエンコード設定(表示→エンコーディング)を、西欧やUnicodeにして試してみます。)

ログイン画面例


ログイン後画面例


下部パネルの右のアイコンからいろいろな機能を利用できます。HDFSの中身をみたり()、
MapReduce関連の管理・操作をしたり(,)することができます。
これらは、Cloudera Desktopのころからあった機能です。
新入りは、Beeswax for Hive(Hiveの操作画面)です。()

4-3. Hive操作画面(Beeswax for Hive)

Hive操作画面例


HDFS上のファイルから、テーブルを作ったり、


QUERYの保存や実行等をすることができます。


--
以上

0 件のコメント:

コメントを投稿