Hadoopとその周辺の紹介
BPStyle #41
tokibito
Apache Hadoopとは
● 分散処理基盤○ HDFS - 分散ファイルシステム○ MapReduce - 分散処理フレームワーク
● Apache財団のプロジェクト● Javaで作られている● http://hadoop.apache.org/
HDFSとは
● 分散ファイルシステムのサービス● Unixのファイルシステムのように、ディレクトリや
パーミッション、所有者の概念がある● 大きく分けて2つのコンポーネントで構成
○ NameNode - 各ファイルのメタ情報を管理○ DataNode - 実データを持つ
NameNodeとDataNodeのイメージ
NameNode
DataNode
HDD
DataNode
HDD
DataNode
HDD
NameNodeが1台でDataNodeが複数台
HDFSの操作
$ hdfs dfs -ls /user/tokibitoFound 3 itemsdrwx------ - tokibito tokibito 0 2013-12-06 09:00 /user/tokibito/.Trashdrwxrwxrwx - tokibito tokibito 0 2013-12-04 18:18 /user/tokibito/tab1-rw-r--r-- 3 tokibito tokibito 419 2013-12-06 15:34 /user/tokibito/test.tsv$ hdfs dfs -put test.txt /user/tokibito/$ hdfs dfs -ls /user/tokibito/Found 4 itemsdrwx------ - tokibito tokibito 0 2013-12-06 09:00 /user/tokibito/.Trashdrwxrwxrwx - tokibito tokibito 0 2013-12-04 18:18 /user/tokibito/tab1-rw-r--r-- 3 tokibito tokibito 419 2013-12-06 15:34 /user/tokibito/test.tsv-rw-r--r-- 3 tokibito tokibito 5 2014-01-08 11:18 /user/tokibito/test.txt$ hdfs dfs -cat /user/tokibito/test.txthoge
hdfs dfsコマンドを使ってファイルを操作できるput get mv rm ls mkdirなどのサブコマンドがある
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 TaskTracker
JobTrackerが1台でTaskTrackerが複数台TaskTrackerでMap/Reduce処理が実行される
Map処理とReduce処理のイメージ
Input
Map処理
Reduce処理Map処理
Map処理
Output
Job
MapReduceを使うのは面倒くさい
● Javaで処理を書く必要がある● jarを作ってJobTrackerに登録しないといけない● SQL使いたい
→そこでApache Hive
Apache Hive
● Hadoop上のクエリエンジン● SQLで問い合わせ
○ SQLからMapReduceタスクを生成して実行
● Javaで実装されている● http://hive.apache.org/
Hiveの操作
hive> show databases;OKdefaulttokibitoTime taken: 2.379 secondshive> use tokibito;OKTime taken: 0.047 secondshive> show tables;OKtab1Time taken: 0.143 secondshive> select * from tab1;OK7 NULL1 NULL1 foo2 hoge3 bar45 NULLTime taken: 1.971 seconds
hiveコマンドで対話シェルを起動する
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 tab1Query 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-and-services/cdh.html
Cloudera Manager
● Hadoopクラスタの管理ツール● Webベース● ホストの管理
○ 対象の各ホストにagentをインストールする
● ホストへのCDHのインストール○ 一括で自動インストール可能
● サービスの管理○ どのホストでどのサービスを動かすかをWebUIから一括
設定可能
● http://www.cloudera.com/content/cloudera/en/products-and-services/cloudera-manager.html
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