Hadoopとその周辺の紹介
BPStyle #41
tokibito
Apache Hadoopとは
● 分散処理基盤
○ HDFS - 分散ファイルシステム
○ MapReduce - 分散処理フレームワーク

● Apache財団のプロジェクト
● Javaで作られている
● http://hadoop.apache.org/
HDFSとは
● 分散ファイルシステムのサービス
● Unixのファイルシステムのように、ディレクトリや
パーミッション、所有者の概念がある
● 大きく分けて2つのコンポーネントで構成
○ NameNode - 各ファイルのメタ情報を管理
○ DataNode - 実データを持つ
NameNodeとDataNodeのイメージ
NameNode

DataNode

DataNode

DataNode

HDD

HDD

HDD

NameNodeが1台でDataNodeが複数台
HDFSの操作
$ hdfs dfs -ls /user/tokibito
Found 3 items
drwx------ tokibito tokibito
0
drwxrwxrwx
- tokibito tokibito
0
-rw-r--r-3 tokibito tokibito
419
$ hdfs dfs -put test.txt /user/tokibito/
$ hdfs dfs -ls /user/tokibito/
Found 4 items
drwx------ tokibito tokibito
0
drwxrwxrwx
- tokibito tokibito
0
-rw-r--r-3 tokibito tokibito
419
-rw-r--r-3 tokibito tokibito
5
$ hdfs dfs -cat /user/tokibito/test.txt
hoge

hdfs dfsコマンドを使ってファイルを操作できる
put get mv rm ls mkdirなどのサブコマンドがある

2013-12-06 09:00 /user/tokibito/.Trash
2013-12-04 18:18 /user/tokibito/tab1
2013-12-06 15:34 /user/tokibito/test.tsv

2013-12-06
2013-12-04
2013-12-06
2014-01-08

09:00
18:18
15:34
11:18

/user/tokibito/.Trash
/user/tokibito/tab1
/user/tokibito/test.tsv
/user/tokibito/test.txt
MapReduceとは
● 分散処理フレームワーク
● 大きく分けて2つのコンポーネントで構成
○ JobTracker
○ TaskTracker

● ジョブ(Job)
○ Map処理とReduce処理の組み合わせ
■ org.apache.hadoop.mapreduce.Mapper
●

分割された入力データを並列処理

■ org.apache.hadoop.mapreduce.Reducer
●

Mapperの処理結果を一つにまとめる

○ jarパッケージにしてJobTrackerに登録する
JobTrackerとTaskTrackerのイメージ
JobTracker

TaskTracker

TaskTracker

JobTrackerが1台でTaskTrackerが複数台
TaskTrackerでMap/Reduce処理が実行される

TaskTracker
Map処理とReduce処理のイメージ
Job
Map処理

Input

Map処理

Map処理

Reduce処理

Output
MapReduceを使うのは面倒くさい
● Javaで処理を書く必要がある
● jarを作ってJobTrackerに登録しないといけない
● SQL使いたい

→そこでApache Hive
Apache Hive
● Hadoop上のクエリエンジン
● SQLで問い合わせ
○ SQLからMapReduceタスクを生成して実行

● Javaで実装されている
● http://hive.apache.org/
Hiveの操作
hiveコマンドで対話シェルを起動する
hive> show databases;
OK
default
tokibito
Time taken: 2.379 seconds
hive> use tokibito;
OK
Time taken: 0.047 seconds
hive> show tables;
OK
tab1
Time taken: 0.143 seconds
hive> select * from tab1;
OK
7
NULL
1
NULL
1
foo
2
hoge
3
bar
4
5
NULL
Time taken: 1.971 seconds
Hiveは遅い?
● 小さなデータに対してクエリした場合でも数十秒
かかったりすることがある
○ HDFSへのアクセスのオーバーヘッドが大きい
○ MapReduce処理が遅い

→そこでCloudera Impala
Cloudera Impala
● Hadoop上のクエリエンジン
● SQLで問い合わせ
○ ImpalaDaemonがSQLをコンパイルして実行(LLVM)

● MapReduce処理の最適化
○ Impaladのノードと同じマシンのDataNodeを直接参照
■ ネットワーク転送のオーバーヘッド軽減

● C++で実装
● Hiveのメタ情報を利用
○ hiveのテーブルを参照できる

● 現状ではHiveの全機能はカバーできてない
● http://impala.io/
Impalaの操作
impala-shellコマンドで対話シェルを起動する
[slave1:21000] > use tokibito;
Query: use tokibito
[slave1:21000] > select * from tab1;
Query: select * from tab1
Query finished, fetching results ...
+----+-------+
| id | col_1 |
+----+-------+
| 7 | NULL |
| 1 | foo
|
| 2 | hoge |
| 3 | bar
|
| 4 |
|
| 5 | NULL |
| 1 | NULL |
+----+-------+
Returned 7 row(s) in 2.46s
他のHadoop関連のプロダクト
●
●
●
●

Apache HBase - KVS
Apache Flume - ログ収集
Apache Oozie - ワークフローエンジン
Cloudera Hue - Hadoopのフロントエンド

など
Hadoopは大変
● コンポーネントの数が多い
● 依存関係の解決が面倒(バージョンも気にする
必要ある)
● 複数台のサーバー管理が必要(HA構成なら最
低でも7〜11台以上)
→そこでCDHとCloudera Manager
CDH
● Cloudera's Distribution Including Apache
Hadoop
● 米Cloudera社
● Hadoopのパッケージ
○ rpm
○ 依存関係が解決されている
○ 安定したバージョンのパッケージ

● http://www.cloudera.
com/content/cloudera/en/products-andservices/cdh.html
Cloudera Manager
● Hadoopクラスタの管理ツール
● Webベース
● ホストの管理
○ 対象の各ホストにagentをインストールする

● ホストへのCDHのインストール
○ 一括で自動インストール可能

● サービスの管理
○ どのホストでどのサービスを動かすかをWebUIから一括
設定可能

● http://www.cloudera.
com/content/cloudera/en/products-and-
Hadoopの利点は?
● 一台で処理できないような量のデータを扱える
○ MapReduce

● 一台で保存できないような量のデータを扱える
○ HDFS
○ 容量が足りなければ台数を増やせばよい
○ 台数を増やせばパフォーマンスも上がる

● メモリに載り切らないようなデータを現実的な時
間で処理できる
● 正規化されていないデータを処理できる
Hadoopの欠点は?
● 速くはない
○ メモリに乗る程度のデータ量ならRDBMSを使ったほう
がかなり速い

● 推奨マシンスペックは低くない
○ Impalaの推奨メモリは128GB以上
■ コモディティサーバー≠安価なサーバー
○ 最低でも1ノードあたり4〜8GB程度ないと、まともに動
かない

● 最小構成のサーバー台数が多い
○ HA構成ならマスター3台、スレーブ4〜8台以上

● コンポーネント数が多く、複雑なのでトラブル
シューティングは大変
http://www.slideshare.net/Cloudera_jp/cloudera-manager-5-hadoop-cwt2013

Hadoopとその周辺の紹介