概要
・1台のLinux環境で、簡単に、HadoopのHBase, Hive, Pig, HUEを試してみます。
・Ubuntu(1台)でCloudera社のHadoopパッケージ(CDH3)を利用します。CDH3のHadoopが動いていることを前提とします。 → 構築方法はこちら
(手元ではUbuntu 11.04/10.04/9.10/8.04あたりで試していますが、他バージョンやDebian等でも大丈夫だと思います)
Hadoop(1台構成) | Hive,Pig等(1台構成) | Hadoop(複数台構成) | |
CentOS | こちら | HBase,Hive,Pig,HUE(旧Cloudera Desktop), Oozie | こちら |
---|---|---|---|
Ubuntu | こちら | HBase,Hive,Pig,HUE(旧Cloudera Desktop) |
必要なもの
・Linux(Ubuntu)+Cloudera版Hadoop環境(1台)→ 構築方法はこちら
・インターネット接続
・Cloudera社のCDH3のHBase, Hive, Pig, HUEのパッケージ(aptでインターネットからインストール)
作業手順
以下の、1. HBase, 2. Pig, 3. Hive, 4. HUEの手順は、独立して試すことができますし、一つの環境でまとめて試すこともできます。(それぞれデータの管理は別々です。)
1. HBase
1-1. インストール: Linux環境にて、rootで作業します。
1-1-1. HBaseをインストールします。
apt-get -y install hadoop-hbase
apt-get -y install hadoop-hbase-master
apt-get -y install hadoop-hbase-regionserver
apt-get -y install hadoop-zookeeper-server
1-1-2. 設定を変更する。
うっすら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. サービス起動
※ CDH3 beta2やbeta3では、ここで、以下が必要かもしれません。
mkdir /var/run/hbase
/etc/init.d/hadoop-zookeeper-server start
/etc/init.d/hadoop-hbase-master start
/etc/init.d/hadoop-hbase-regionserver start
確認します。
jps
結果例
3148 TaskTracker 3319 Jps 2973 JobTracker 3053 DataNode 2787 HRegionServer 2889 NameNode 3272 HMaster 2376 QuorumPeerMain1-3. 試してみる。 Hbaseを操作するshellをスタートさせます。 hbase shell 結果例
HBase Shell; enter 'help以下、hbaseプロンプトにて、version, status, exitあたりを試します。 結果例' for list of supported commands. Type "exit " to leave the HBase Shell Version 0.90.3-cdh3u1, r, Mon Jul 18 08:23:50 PDT 2011 hbase(main):001:0>
テーブルを作ったり、 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)してみたりします。base(main):001:0> version 0.90.3-cdh3u1, r, Mon Jul 18 08:23:50 PDT 2011 hbase(main):002:0> status 1 servers, 0 dead, 2.0000 average load hbase(main):003:0> exit
hbase(main):001:0> get 'yamanoteline', 'Osaki' COLUMN CELL location:ku timestamp=1314086040085, value=Shinagawa transfer:jreast timestamp=1314086040125, value=2 transfer:other timestamp=1314086040207, value=1 transfer:subway timestamp=1314086040165, value=0 4 row(s) in 0.0450 seconds hbase(main):002:0> scan 'yamanoteline', {STARTROW => 'G', STOPROW => 'P'} ROW COLUMN+CELL Gotanda column=location:ku, timestamp=1314086040267, value=Shinagawa Gotanda column=transfer:jreast, timestamp=1314086040306, value=0 Gotanda column=transfer:other, timestamp=1314086041294, value=1 Gotanda column=transfer:subway, timestamp=1314086040379, value=1 Osaki column=location:ku, timestamp=1314086040085, value=Shinagawa Osaki column=transfer:jreast, timestamp=1314086040125, value=2 Osaki column=transfer:other, timestamp=1314086040207, value=1 Osaki column=transfer:subway, timestamp=1314086040165, value=0 2 row(s) in 0.1510 seconds hbase(main):011:0>ここで﹁scan 'yamanoteline'﹂とすれば全データが取得されます。 ・HDFS上は、/hbase/以下に、難しそうなファイルができます。 ・ここで使ったデータは、以下の感じです。(山手線の駅の乗り換え路線数と所在(区))
name | transfer:jreast | transfer:subway | transfer:other | location:ku |
---|---|---|---|---|
Shinagawa | 3 | 0 | 2 | Minato |
Osaki | 2 | 0 | 1 | Shinagawa |
Gotanda | 0 | 1 | 1 | Shinagawa |
2. Pig
2-1. インストール: Linux環境にて、rootで作業します。
apt-get -y install hadoop-pig
2-2. 試してみる
テストファイルをローカル(/var/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/lib/jvm/java-6-sun pig
2011-08-22 21:59:22,720 [main] INFO org.apache.pig.Main - Logging error messages to: /root/pig_1314086362718.log 2011-08-22 21:59:23,165 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: hdfs://localhost:8020 2011-08-22 21:59:23,678 [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で作業します。 apt-get -y install hadoop-hive 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> ・ここで使ったテーブルはこんな感じです。
name | color | price |
---|---|---|
apple | red | 100 |
lemon | yellow | 120 |
orange | orange | 20 |
fr | en |
---|---|
pomme | apple |
citron | lemon |
orange | orange |
・もっとためすには、例えば、こちら
・HDFS上には、/user/hive/warehouse/以下にファイルができてたりします。
4. HUE(Hadoop User Experience)
HUEは、Cloudera Desktopの新しい名前です。以下は、CDH3beta3の記事、すいません、CDH3(ベータ無し)では、未確認です。
4-1. インストール: Linux環境にて、rootで作業します。
4-1-1.パッケージのインストール
apt-get -y install hue hue-plugins
4-1-3. 設定ファイルの準備
一台構成のお手軽設定(hadoop-0.20-conf-pseudo-hue)を使っている人は、特に何もしなくてもよさそうです。が、もしかすると、/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. サービスのスタート
/etc/init.d/hadoop-0.20-namenode restart
/etc/init.d/hadoop-0.20-datanode restart
/etc/init.d/hadoop-0.20-jobtracker restart
/etc/init.d/hadoop-0.20-tasktracker restart
/etc/init.d/hue start
4-1-3. firewallの設定
tcpの8088が空いている必要があります。
4-2. 使ってみる
Webブラウザ(Firefox)から、
http://ホスト:8088/
を閲覧します。
ログイン画面がでたら、例えば、
username=hadoop, password=hadoop
と入れてログインし、いろいろと試してみます。
ログイン画面(usernameとpasswordを入力する画面)が出ない場合は、
ブラウザのエンコード設定(表示→エンコーディング)を、西欧やUnicodeにして試してみます。
ログイン画面例
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGlohKBcnCvkuSo24lT8odSsnzOckNJqiStnMZsP_T-a0BvoMPAedFvI1tZVvUKp3MV4Pz1V18tn1Ls90OGH5qgm04ivIebojEc-s4SrVy9i1Z9f95YJCD2lsxPvWuLtDRzqaE8LQmE_ic/s200/hug1.PNG)
ログイン後画面例![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB1gW4uH-sLFB_ijpryChBiLvgJrR9EZHkhF-oaWlWHISCEspucLm0l_0R18xbdTnUXSELWmUhtfj8LQZl0RMI_heoF-B8FUzBGBTme3mfnWTDVBzyPsHwb-XdCk3PrKunTLi2ZTrE8vFq/s200/hug-hive0.PNG)
下部パネルの右のアイコンからいろいろな機能を利用できます。HDFSの中身をみたり(
)、
MapReduce関連の管理・操作をしたり(
,
)することができます。
これらは、Cloudera Desktopのころからあった機能です。
新入りは、Beeswax for Hive(Hiveの操作画面)です。(
)
4-3. Hive操作画面(Beeswax for Hive)
Hive操作画面例
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_lqcAmm5wsiwXo5Gw-2afaqfQTlwHEUxL23DNYtmvMcw0gxXSDezGUGccS_bIQyJ1yyE1fC1wV2jIs9-qq_p4eQUHv1YDo1Yfcl5z0f0VxJsxrJtFMcVEJSmL0Xmm5YEFQD_VCMZU4RsK/s200/hug-hive00.PNG)
HDFS上のファイルから、テーブルを作ったり、![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEintBvcMvpkxVi4paJJRXLcQeo9kOwhl7N1NPnZGHvfdPXrpEjcE_pnqAyprTNRkhsf_XrYCZAhV3C3chyXlpDA2vVv7XDNucM6TxKwREWo7J5_qgzOE1aPTg4J4SMvDt1zMG193Frqh5w4/s200/hug4-newtable1.PNG)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgamI9_Ink-vgECYJ25DKmEhZDaUJpD98rM-sQXkPVOaTEZY_GnhkDMvdIX9I2Ef5v29HDJiVFEstcVEQ9iExoIx51fBPNDDTIrQKtebo8cE4E7-gEWF3dgOrdBB_XKntOTmbXY2nUEGIfQ/s200/hug4-newtable2.PNG)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKw__jLJWPGSVLWO2m2GzPiq5qBKFBPoXlUBFRliQptIWQZcu-rMuE1VZ5Vy7ee6xkPIGJ5Eou49455IF4vp8FVRnAl8LHUDy4zd9c6D36YjIQbJOQSFM4vpnHWxR9YJLDNq9M76h51Vq5/s200/hug4-newtable3.PNG)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgl7OwNqty-GSfWoFvThMsUc2bW_rpXiihD3am2-r9wcojPmqz7R_PFsw5BrtsVXIJSB2RqMpLWejSWYtjcvqWtz9hKPylqcifo7i1dDf3Dg8S6oO74SWrHgrtP_3vW8W_jWyRxKPTZlMYg/s200/hug4-newtable4.PNG)
QUERYの保存や実行等をすることができます。![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDZYuhyphenhyphenISCldFBYw7Acbl3N1hkLkBTKhzgNke1k9n1oywozrjAIUyZpST1k5yJofpUzIBNYyLW_Fw_Zlzy2md6D26NhsXJAKwQcCXZZUjZ9R85OQG6v72_kQGrHX2CE3IowQQVhwiNbbVH/s200/hug3-hive-query1-query.PNG)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgbDYqASNf9HfPOcFAnIhK7ZBHSjiI4G2msvBLRI78qsaf5BYJjCwtNp3AcDsvWNPKnYGVvYPrsgRMSMC1h17IjyZ0kHaZhooHHoUD-mXbLmu3NBMR_R8Sjt9vDzppiJlR2FO4Sjf4CWK-/s200/hug3-hive-query2-computing.PNG)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT6CEvWoQqv6hGuEl2nig1J-4C1DTv4C3Rl1NxjJi9N1GIKcjXLB2CteGazycR-ZhgweRfkCSN1QxjTzVMJ6a7S3Zgtx7QbjrE6e-q30JDpTnIDISpk3TbQDu9i9LUcydFZ0ZtueCombGK/s200/hug3-hive-query3-result.PNG)
-- 以上
ログイン後画面例
下部パネルの右のアイコンからいろいろな機能を利用できます。HDFSの中身をみたり(
HDFS上のファイルから、テーブルを作ったり、
QUERYの保存や実行等をすることができます。
-- 以上
もりやすさん、コメントありがとうございます。この度、本記事のCDH3beta3対応で動作確認していたら、/usr/lib/hbase/pidsの問題が発生しました。とりあえず、手で/var/run/hbaseディレクトリを作れば動くようでした。が、このディレクトリ、なんぞのタイミングで消えるようで。
返信削除