Hadoop、 Hive、Impala に関する書籍をちょこちょこ読み始めて、手元に実行環境が欲しくなったのでさくっと構築。
必要なもの: メモリ16GB以上積んだ Mac or Linux インストール済みのPC。
以下の記事を参考にしつつテスト環境を作る。
how-to-install-a-virtual-apache-hadoop-cluster-with-vagrant-and-cloudera-manager
VirtualBox のインストール
以下から最新版をインストール。
https://www.virtualbox.org/wiki/Downloads
Vagrant のインストール
以下から最新版をインストール。
http://www.vagrantup.com/downloads
Vagrant によるクラスタ環境構築
ホストのコンソールで次のコマンドを実行。
$ mkdir ~/vagrant
$ cd ~/vagrant/
$ vagrant plugin install vagrant-hostmanager
$ git clone https://github.com/DandyDev/virtual-hadoop-cluster.git
$ cd virtual-hadoop-cluster
$ vagrant up
Cloudera Manager によるクラスタ環境設定
ブラウザで以下にアクセス。
http://vm-cluster-node1:7180
Cloudera Manager 5 の画面にアクセスできるはず。
- admin / admin でログイン。
- Cloudera Express を選んで「続行」をクリック。
- CDHクラスタインストールのホストを指定。
- vm-cluster-node[1-4] と入力して「検索」をクリックすると4台のノードが検索できる。
- クラスタのインストール > リポジトリの選択
- デフォルトのまま「続行」をクリック。
- クラスタのインストール > JDK インストールオプション
- デフォルトのまま「続行」をクリック。
- クラスタのインストール > SSH ログインの資格情報を入力してください。
- 別のユーザー: vagrant パスワード: vagrant パスワードの確認:vagrant を入力。これでクラスタのインストール作業が進む。
- 途中で1台のみインストールが進行しなくなったので一度中止をクリックした後、もう一度インストールを進めたら問題なく進行。「続行」をクリック。
- 別のユーザー: vagrant パスワード: vagrant パスワードの確認:vagrant を入力。これでクラスタのインストール作業が進む。
- クラスタのインストール > 選択した Parcel のインストール
- 各種パッケージがインストールされるのを待つ。終わったら「続行」をクリック。
- クラスタのインストール > ホストが正常かどうかの検査
- インストール状況を確認できる。「続行」をクリック。
- クラスタのセットアップ > クラスタにインストールする CDH 5 サービスを選択してください。 *「すべてのサービス」を選んで「続行」をクリック。
- クラスタのセットアップ > ロール割り当てのカスタマイズ デフォルトのまま「続行」をクリック。
- クラスタのセットアップ > データベースセットアップ
- デフォルトのまま「続行」をクリック。
- クラスタのセットアップ > 変更の確認
- デフォルトのまま「続行」をクリック。
- クラスタのセットアップ > 進行状況
- 全てインストールされるのを待ち「続行」をクリック。
これで Cloudera Manager のホーム画面にアクセス出来る。
Impala のインストール
http://gyazo.com/f606d5ead7ffe1152e9353ae6f1f1204
この図の6になっている部分をクリックし、Impalaをダウンロード。
画面下部の Cluster 1 の部分の配布ボタンをクリック。
作成したクラスタにログイン
ホストのコンソールで次のコマンドを実行。
$ ssh vagrant@vm-cluster-node1
PASS は vagrant
YARN で MapReduce 処理の動作チェック
vagrant@vm-cluster-node1 で作業。
$ sudo su - hdfs
$ hadoop jar /opt/cloudera/parcels/CDH-5.2.0-1.cdh5.2.0.p0.36/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 4 100
Job の実行状況は下記URLで確認できる。
http://vm-cluster-node1:8088/cluster
実行結果
Number of Maps = 4
Samples per Map = 100
Wrote input for Map #0
Wrote input for Map #1
Wrote input for Map #2
Wrote input for Map #3
Starting Job
14/11/03 11:44:03 INFO client.RMProxy: Connecting to ResourceManager at vm-cluster-node1/10.211.55.100:8032
14/11/03 11:44:04 INFO input.FileInputFormat: Total input paths to process : 4
14/11/03 11:44:04 INFO mapreduce.JobSubmitter: number of splits:4
14/11/03 11:44:05 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1415003058856_0001
14/11/03 11:44:05 INFO impl.YarnClientImpl: Submitted application application_1415003058856_0001
14/11/03 11:44:05 INFO mapreduce.Job: The url to track the job: http://vm-cluster-node1:8088/proxy/application_1415003058856_0001/
14/11/03 11:44:05 INFO mapreduce.Job: Running job: job_1415003058856_0001
14/11/03 11:44:25 INFO mapreduce.Job: Job job_1415003058856_0001 running in uber mode : false
14/11/03 11:44:25 INFO mapreduce.Job: map 0% reduce 0%
14/11/03 11:44:39 INFO mapreduce.Job: map 25% reduce 0%
14/11/03 11:44:40 INFO mapreduce.Job: map 50% reduce 0%
14/11/03 11:44:50 INFO mapreduce.Job: map 100% reduce 0%
14/11/03 11:45:01 INFO mapreduce.Job: map 100% reduce 100%
14/11/03 11:45:02 INFO mapreduce.Job: Job job_1415003058856_0001 completed successfully
14/11/03 11:45:02 INFO mapreduce.Job: Counters: 49
File System Counters
FILE: Number of bytes read=62
FILE: Number of bytes written=532213
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
HDFS: Number of bytes read=1084
HDFS: Number of bytes written=215
HDFS: Number of read operations=19
HDFS: Number of large read operations=0
HDFS: Number of write operations=3
Job Counters
Launched map tasks=4
Launched reduce tasks=1
Data-local map tasks=4
Total time spent by all maps in occupied slots (ms)=40475
Total time spent by all reduces in occupied slots (ms)=5994
Total time spent by all map tasks (ms)=40475
Total time spent by all reduce tasks (ms)=5994
Total vcore-seconds taken by all map tasks=40475
Total vcore-seconds taken by all reduce tasks=5994
Total megabyte-seconds taken by all map tasks=41446400
Total megabyte-seconds taken by all reduce tasks=6137856
Map-Reduce Framework
Map input records=4
Map output records=8
Map output bytes=72
Map output materialized bytes=136
Input split bytes=612
Combine input records=0
Combine output records=0
Reduce input groups=2
Reduce shuffle bytes=136
Reduce input records=8
Reduce output records=0
Spilled Records=16
Shuffled Maps =4
Failed Shuffles=0
Merged Map outputs=4
GC time elapsed (ms)=211
CPU time spent (ms)=5230
Physical memory (bytes) snapshot=1845346304
Virtual memory (bytes) snapshot=8395341824
Total committed heap usage (bytes)=1530396672
Shuffle Errors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=472
File Output Format Counters
Bytes Written=97
Job Finished in 59.247 seconds
Estimated value of Pi is 3.17000000000000000000
hdfs@vm-cluster-node1:~$
MapReduce の Job が YARN で実行できた。
Hive の動作確認
vagrant@vm-cluster-node1 で作業。
$ hive
hive> SHOW databases;
OK
default
Time taken: 0.388 seconds, Fetched: 1 row(s)
hive> CREATE DATABASE IF NOT EXISTS sample_logs;
OK
Time taken: 0.408 seconds
hive> USE sample_logs;
OK
Time taken: 0.54 seconds
hive> CREATE TABLE logs(id INT, created_at STRING) row format delimited fields terminated by ',' lines terminated by '\n';
OK
Time taken: 0.771 seconds
hive>
動作した。
Impala の動作確認
次のURLにアクセスすると Impala の WebUI にアクセスできる。
http://vm-cluster-node1:25010
vm-cluster-node1 で下記コマンドを実行し、シェルの起動。ノード2 ~ 4 のどれかにログイン。
$ impala-shell -i vm-cluster-node2
操作してみる。
[vm-cluster-node2:21000] > SHOW databases;
[vm-cluster-node2:21000] > CREATE DATABASE IF NOT EXISTS sample_logs;
[vm-cluster-node2:21000] > USE sample_logs;
[vm-cluster-node2:21000] > CREATE TABLE logs(id INT, created_at STRING) row format delimited fields terminated by ',' lines terminated by '\n';
[vm-cluster-node2:21000] > SHOW tables;
Query: show tables
+------+
| name |
+------+
| logs |
+------+
動作した。
サーバーからログアウトして、
$ vagrant halt
でクラスタの全サーバーをシャットダウン。
とりあえず、ここまででテスト用の CDH5 の Hadoop (HDFS + YARN によるMapReduce)、Hive、Impala環境が構築できた。