大規模並列フレームワークHadoopのご紹介

SRA OSS, Inc. 日本支社
マーケティング部
盛 宣陽Copyright © SRA OSS, Inc. Japan All rights reserved.

1

Hadoopとは●●大規模なデータを並列分散処理を行うフレームワークを提供
Googleによる MapReduce および Google File System(GFS)の論文をベースに開発されたApacheプロジェクトのOSS

MapReduce

MapReduce

分散処理フレームワーク

GFS

HDFS

分散ファイルシステム

Copyright © SRA OSS, Inc. Japan All rights reserved.

2

Hadoopの歴史●

2003年 Google GFS の論文発表●

2004年 Google MapReduce の論文発表●

2005年 Hadoop プロトタイプの誕生●

2006年 20ノードで動作●

2006年 Yahoo!が本格的に注力●

2007年 200ノードで稼働●

2008年 Apacheトップレベルプロジェクトへ昇格●

2008年 大規模なソート処理で世界記録樹立
910台のノードで 1TBデータをソート 297秒 → 209秒!

●

2008年11月 Google 1TBデータをソート 68秒●

2009年 1月 Hadoop 1TBデータをソート 62秒●

現在 Yahoo! 4000台、Facebook 2250台以上

Copyright © SRA OSS, Inc. Japan All rights reserved.

大きな進歩
企業によって育てられたOSS
3

Hadoop が注目された背景
大規模データの保管と大規模データの分析●

時間の経過につれてデータ量が爆発●

バックアップできない!
データの冗長性●

膨大な情報から価値ある情報を抽出するニーズ●

Webショッピングのリコメンダ●

アクセスログ解析での行動分析
大規模データの各データ間の分析
マーケティングデータとして活用
Copyright © SRA OSS, Inc. Japan All rights reserved.

4

大規模データの処理●

ディスク容量の向上、CPU パワーの向上>>

ディスクアクセス性能の向上

データを処理しきれない● CPUを使い切れない●●

データを分散⇒ ディスク I/O を分散、CPUの有効利用
障害発生への対応が必要● データの同期、統合が困難●

Copyright © SRA OSS, Inc. Japan All rights reserved.

5

RDBMSの得意不得意●

得意細かいデータのインデックス高速検索●
細かいデータの更新が得意● データ一貫性の保証
●

●

不得意
●

大規模処理 ディスクI/O以上の性能は出せない●

スケールアウト〔並列分散処理〕が困難-性能を稼ぐためにスケールアップに頼る

可用性・性能を求めるとコストが増大

データ可用性を高めることが困難● 複数台構成の運用が困難●

Copyright © SRA OSS, Inc. Japan All rights reserved.

6

Hadoopの得意不得意●

得意高スループット処理● 高スケーラビリティ● 高可用性● 一般に調達できるサーバで構成
●

●

不得意
●

RDBMSが得意なトランザクション一貫性保証●

データの更新(出来ない)●

OLTP処理のような”秒”以下のレイテンシが必要な処理(Hadoopの処理は”分”のオーダで処理が終わる)
Copyright © SRA OSS, Inc. Japan All rights reserved.

7

Hadoop の２大構成要素
●

●

HDFS
●

Hadoop のファイルシステム●

大規模分散ストレージ

MapReduce●

Hadoop の分散処理フレームワーク

Copyright © SRA OSS, Inc. Japan All rights reserved.

8

Hadoop のファイルシステム

HDFS: Hadoop Distributed File System●

大規模分散ストレージ●

大規模データを複数のサーバに分散して保存●

クライアントからは１つのストレージとして見える●

サーバを増やすことで拡張可能 （= スケールアウト）●

サーバが壊れることを想定したアーキテクチャ

HDFS．．．
ClientCopyright © SRA OSS, Inc. Japan All rights reserved.

9

Hadoop のファイルシステム

HDFS: Hadoop Distributed File System●

通常のファイルシステム上で動作● 各サーバに保存されているデータは通常のファイルhadoop コマンド
HDFS
ext3
OSH/W

●

普通のファイルシステムと似たコマンドで扱える●

hadoop fs コマンド$ hadoop fs -put local_file.txt hdfs_file.txt$ hadoop fs -ls$ hadoop fs -mkdir mydata$ hadoop fs -cat hdfs_file.txt
Copyright © SRA OSS, Inc. Japan All rights reserved.

10

ファイル

Hadoop のファイルシステム

HDFS: Hadoop Distributed File System
●

AB

冗長性
●

C

１つのファイルを複数のブロックに分割して同じブロックを複数のサーバーに複製（レプリケーション）–●

デフォルトのレプリケーション数は ３

サーバ１
A

アクセスパターンの制限
●

AＢ

Ｃ

Write-Once
ファイルの更新は行わない
シーケンシャルな読み込みを前提–

●

Ｂ

サーバ２

–

ブロックサイズ 64MB–ランダムアクセスを想定していない(indexを用いた検索はない)

サーバ３

Copyright © SRA OSS, Inc. Japan All rights reserved.

AＣ

サーバ４
ＢＣ

11

HDFS クライアント

HDFS

単一ストレージのようにファイルを読み書き可能
ファイル1

メタデータのディスク書き出し

Secondary
NameNode

NameNodeA

メタデータ

DataNode

B

ファイル管理
＆監視

ファイル2
ab:

b..

A

C:

B

A
..

DataNode

C

a

B

C

b..

a

DataNode
１つのファイルを複数のブロックに分けてレプリケーション

HDFSの構成 (マスタースレーブ)●●

DataNodes

DataNode （スレーブノード）●

ファイルを構成するブロックを保存●

保持しているブロックがどのファイルを構成するか知らない

NameNode （マスターノード）●

クライアントからのファイルの要求に応答●

メタデータを保持

NameNode

どのファイルがどのブロックで構成されるか– どのブロックがどのノードにあるか
メタデータはメモリ上で管理し処理を高速化

管理監視–

●

●

データ送受信ファイル要求実際のデータの読み書きはクライアントと DateNode が直接通信–

NameNode はボトルネックになりにくい
Copyright © SRA OSS, Inc. Japan All rights reserved.

13

HDFS の単一故障点

DataNodes

マスタサーバの保護はしてくれない！
●

管理監視

NameNode

HDFSメタデータはオンメモリで管理●

メタデータが無くなるとHDFSが破損する●

メタデータ全体のスナップショット(fsimage)

メタデータ＋更新差分ログ(edits) をディスクに保存●●

複数のディスクに書き出し可能

SecondaryNameNode

メタデータのディスク書き出し●

NameNode の切り替わり先ではない！

●

fsimage と edits をまとめて新しい fsimageを生成（チェックポイント生成）しNameNodeに届ける
Copyright © SRA OSS, Inc. Japan All rights reserved.

Secondary
NameNode
14

HDFS の耐障害性 ～データ損傷への対応～●

レプリケーション●

ファイルを構成するブロックはデフォルトで３つ複製される●

１つのDataNode が故障してもデータが失われることはない●

データの読み書きの途中に DataNode で失敗しても、他の DataNode に処理が引き継がれる⇒ クライアント側ではエラーの処理をする必要がない●●

DataNode は NameNode に定期的にハートビートを送っている●

一定時間応答がない DataNode には障害が発生したとみなされる●

既定のレプリケーション数になるまで自動的に複製が行われる

チェックサム●●各ブロックは書込み時にチェックサムが保存され、読み込み時にチェックサムを再計算しデータ損傷の確認を行う。
損傷しているブロックは正常なブロックを他のDataNodeから転送され自動的に復旧される
Copyright © SRA OSS, Inc. Japan All rights reserved.
15

HDFS機能 その他
●

●

バランサー
●

データノード間でブロック分散度合いを再調整●

転送帯域を設定しバックグランドで実行可能

ラックアウェアネス●●●

ラック全体の破損に備え、ラック配置を意識してレプリケーション戦略を立てられる
ラック = 地域として考慮すればディザスタ対策にもなるバージョンアップ対応●

HDFSのバージョンアップ方法が定まっている●

圧縮フォーマットのサポート●

FUSE(Filesystem in Userspace)サポート●

Linuxファイルシステムとしてmountし、ファイル操作ができる
Copyright © SRA OSS, Inc. Japan All rights reserved.

16

Hadoop の並列分散処理●

MapReduce処理～概要# usridaction例えば・・・

00032
00015
00022
00015

login
write_file
logoutread_file:●

右のようなデータ（ユーザID, 行動）から“login” したユーザの一覧が欲しい場合●

コマンドで実現するならば・・・$ cat input.txt | grep “login” | sort | uniq > output.txt

Map●

Shuffle & Sort●

Map ：処理すべき値の生成●

Shuffle & Sort ：関連する値を一箇所に集めてソート●

Reduce ：集められた値の処理

Reduce

この Map 処理と Reduce 処理を複数サーバで並列に行う
Copyright © SRA OSS, Inc. Japan All rights reserved.

17

JobTracker
ジョブの依頼Job クライアント

TaskTracker

タスクの割り当て
スケジューリング
監視

TaskTracker

TaskTracker

Map

Map

Map

ReduceReduceReduceMap / Reduce それぞれの処理を行うプロセスの生成と実行・管理

Hadoop の並列分散処理例） 転置インデックス

MapReduce処理～詳細●

Mapper●

Key-Value ペアからなるレコードを入力として受け取る●

新しく Key-Value ペアを生成して出力 （中間データ）–●●《行番号，その行のテキスト》↓《単語，単語が現れる行のリスト》

例） 《行番号，テキスト》 ⇒ 《単語，行番号》Shuffle & Sort●

同じ中間 key に関連つけられた全ての中間データが集められる●同じ中間 key を持つデータは全て同じ Reducer に渡される●

Reducer に渡される際には、Key-Value リストはそのKeyの順序でソートされる

Reducer●

Key-Value のリストを入力として受け取る●

Key の値に関してデータの集計を行い、Key-Value ペアを出力–例） 《単語，行番号のリスト》 ⇒ 《単語、行番号リスト（カンマ区切り）》
Copyright © SRA OSS, Inc. Japan All rights reserved.

19

Hadoop MapReduce のフレームワーク●●

HDFS 上のファイルが入力

●

データ １

Keyに従ってデータを Reducer に渡す–

デフォルトでは Key のハッシュ値を用いる–

このとき大量のネットワークトラフィックが発生！

入力：Key-[Value list], 出力：Key-Value

出力はHDFS上のファイル●Map

データ 2 …
…

Map

Key = 1のデータ

Key でソート

Reduce：開発者が記述●●

入力：Key-Value ペア，出力：Key-Value ペア

Shuffle& Sort
●

●

入力データ

Mapper：開発者が記述
●

●

HDFS

Key = 2
…のデータ

データ N
Map

Key = Mのデータ

Reduce…

Reduce

結果 1…

結果 M

Reducer の数だけファイルが生成されるCopyright © SRA OSS, Inc. Japan All rights reserved.

HDFS
20

MapReduceの構成●

JobTracker（マスタサーバ）●●依頼された「ジョブ」を「タスク」に分割し、TaskTracker への割り当て＆スケジューリングを行う
タスクの単位
１つのタスクが１つの入力スプリット（デフォルトではブロック単位）を処理
可能な限り「処理すべきデータを持っているノード」へタスクを割り当てる–●

データがあるところでプログラムを実行する ＝ データローカリティ
単一障害点(データは保持していない)–●●

TaskTracker（スレーブサーバ）●

割り当てられたタスクの実行–●

Map プロセス、Reduce プロセスの生成・実行・管理

JobTracker への進捗報告
Copyright © SRA OSS, Inc. Japan All rights reserved.

21

JobTracker
ジョブの依頼Job クライアント

TaskTracker

タスクの割り当て
スケジューリング
監視

TaskTracker

TaskTracker

Map

Map

Map

ReduceReduceReduceMap / Reduce それぞれの処理を行うプロセスの生成と実行・管理

MapReduce の耐障害性 ～部分障害への対応～●

TaskTracker は JobTracker に定期的にハートビートを送っている

●

投機的実行

●

●

ある TaskTracker が明らかに遅い場合、同じタスクを別の TaskTracker に依頼●処理の完了が早かった TaskTracker の結果を採用する

一定期間応答のない TackTracker は強制終了され、同じタスクが別のTaskTrackerに割り振られる●

一定時間に多数の失敗を起した TaskTracker はブラックリストに登録される●

１つのタスクが失敗した場合でも、全体のやり直しをせずにジョブを継続可能●

ただし、タスクが４回（デフォルト）失敗した場合には、ジョブ全体が失敗したとみなされ、MapReduceジョブは終了
Copyright © SRA OSS, Inc. Japan All rights reserved.

23

MapReduce プログラムの記述●●

MapReduce APIの提供●

並列分散処理のフレームワーク、障害処理、等を意識する必要がない●

Map, Reduce の処理を記述するだけ

記述は基本的に Java で行う
●

●

●

●

Mapper クラス–

MapReduceBase クラスを継承–

Mapper インタフェース（map メソッド）を実装

Recucer クラス–

MapReduceBase クラスを継承–

Reducer インタフェース（reduce メソッド）を実装

ドライバ クラス–

Mapper クラス, Reducer クラス, 入出力ファイル、形式の指定などジョブの設定–

ジョブサブミット

その他オプション： Combiner, Partitioner, Comparator
Copyright © SRA OSS, Inc. Japan All rights reserved.

24

MapReduce プログラムの記述●

ジョブの実行●

hadoop jar コマンドを使って、jar ファイルと引数を指定$ hadoop jar wc.jar WordCount inputfile outputfile●

Java 以外の方法●

HadoopストリーミングAPI–

標準入出力を介して map 処理、reduce 処理を行うより慣れた使い慣れた言語、ライブラリ● Ruby, Perl, Python, bash, ...
Hive, Pig–●–

SQL ライクな言語を用いてMapReduce処理を記述できる

Copyright © SRA OSS, Inc. Japan All rights reserved.

25標準的なマシンスペック●

マスタノード (RDBMS並の信頼があるサーバ)-SASディスク RAID構成-冗長電源-デュアルイーサーネットカード-数10GBのRAM-Quad Core x1 以上●

スレーブノード (信頼性より データ量、処理性能を重視)-1TB/2TBのSATAディスク 計4台-Quad Core CPU x2 計8コア
-24~32GByte RAM-Gigabit Ethernet
Copyright © SRA OSS, Inc. Japan All rights reserved.

26

監視のためのWebUI●WebUIから状況確認と各ノードのログ確認

Copyright © SRA OSS, Inc. Japan All rights reserved.

27

ジョブ管理●ジョブの過去履歴や進捗状況の把握

Copyright © SRA OSS, Inc. Japan All rights reserved.

28

Hadoop 周辺ツール●●

MapReduce プログラミング
●Hive

●

Pig

RDBMSデータの利用
●

●

Sqoop

ワークフロー管理●

Oozie

Copyright © SRA OSS, Inc. Japan All rights reserved.

29

HiveとPig●●

SQL ライクな言語でデータ操作を記述●

自動的にMapReduce処理に変換され並列計算を行う●Apache License

Hive
HiveQL: 宣言型●

hive> INSERT OVERWRITE TABLE pv_users
hive>
SELECT pv.*, u.gender, u.age
hive>
FROM user u FULL OUTER JOIN page_view pv ON(pv.userid = u.id)
hive>
WHERE pv.date = '2008-03-03';●Pig●

PigLatin: 手続き型
grunt> A = load '/etc/passwd' using PigStorage(':');
grunt> B = foreach A generate $0 as id;
grunt> dump B;
Copyright © SRA OSS, Inc. Japan All rights reserved.

30

Sqoop●

Sqoop = SQL to Hadoop●

RDBMSからデータをインポート、Hadoop へエクスポート●

Hiveへのエクスポートも可能●

Apache License 2.0

連携Copyright © SRA OSS, Inc. Japan All rights reserved.

31

Oozie●

複雑な処理を行うには、複数の MapReduce をジョブを多段に行う必要がある●●

例）ジョブAとジョブBの出力をジョブCの入力とする

Oozie : ワークフローエンジン●

Apache License 2.0●

Hadoop のワークフローを実行●

ワークフローは XML で記述する●

ジョブには Hive, Pig, Sqoop を含めることもできる
Copyright © SRA OSS, Inc. Japan All rights reserved.

32

HDFS クライアント

Hadoop まとめHDFS

単一ストレージのようにファイルを読み書き可能
ファイル1

●

HDFS
●

●

分散ストレージ

●

A

メタデータ

B

タスクの割り当て
スケジューリング
監視b..

TaskTracker

DataNode

TaskTracker

TaskTracker

MapMap

MapReduce

ReduceReduceファイル管理＆監視

A

a..

b

DataNode

CaB

Cb..

a

DataNode
１つのファイルを複数のブロックに分けてレプリケーション

並列計算フレームワーク

Map / Reduce それぞれの処理を行うプロセスの生成と実行・管理

HDFS

最小限のAPIの提供––●

Job クライアント

ファイル2

:

ジョブの依頼NameNode

B
C:

JobTracker

Secondary
NameNodeA

MapReduce●

メタデータのディスク書き出し

複雑な処理を組み込める周辺ツールを駆使することで開発コストの削減

障害を想定したアーキテクチャ●

データ破損対応●

処理が途中で止まらない●

Hadoop フレームワークがこれらの面倒を見てくれる

入力データ

データ １Map

データ 2 …
…

Map

Key = 1のデータ

Key = 2…のデータ

データ N
Map

Key = Mのデータ

Reduce…

Reduce

結果 1…

結果 M

HDFS

Copyright © SRA OSS, Inc. Japan All rights reserved.

33

OSSプロフェッショナルサポートサービス
33種類以上の幅広いOSSをワンストップでサポート。台数無制限のサービスです。
サービス内容ヘルプデスク

障害対応

ナレッジサービス（プロメニューのみ）

情報配信サービス

サービス対象ソフトウェア
FTPサーバ
ProFTPD,vsftpd

キャッシュサーバ
Squid

ロードバランサ/リバースプロキシ
Pound

DNSサーバ
Bind

ファイル/プリントサーバ
Samba

LDAPサーバ
OpenLDAPKVS：memcached
Kyoto Cabinet,Kyoto Tycoon

分散処理：Hadoop

シングルサインオン
OpenAM

Webサーバ：Apache

APサーバ：Tomcat

DBサーバ：PostgreSQLSQLiteメールサーバPostfix,sendmail
qmail,Dovecot
UW-IMAPCourier-IMAP
Qpopper

HAソフトウェア: Heartbeat, Pacemaker, DRBD
仮想化: Xen,KVM
OS: CentOS

運用監視：Hinemos
Zabbixご清聴ありがとうございました

Copyright © SRA OSS, Inc. Japan All rights reserved.

35