Linux勉強会 ~Hadoopと高可用性~
Hadoop入門
日本ヒューレット・パッカード株式会社
ESSNプリセールス統括本部
エンタープライズサーバー・ストレージ技術第1本部
Linuxソリューション部
Cloudera Certified Administrator for Apache Hadoop'CCAH(認定技術者
古賀 政純
Twitter: @masazumi_koga
背景:データ処理のニーズの変化
定型処理
非定型処理
• 人間が介在しない完全な自動化が可
能
• 厳密さが求められる
• トランザクション管理
• データ量は多くても
Gbytesオーダー
• 給与計算、売上集計、伝票処理など
• 人間の介在が必要
• 厳密さよりカバレッジ重視(データ量が
重要
)
• データ量はTbytes~Pbytesオーダーにな
り得る
• スケールアウトによる性能向上
• 統計データ作成、検索、データ・マイ
ニングなど
RDBMSが得意とする領域
RDBMSが苦手とする領域
従来からの定型処理に加え近年では、非定形処理が必要になってきた。
Hadoopが必要か?
• ペタ級のデータ処理
–テラ級ならRDBMSで処理可能
項目 RDBMS Hadoop データサイズ ~テラ ペタ 想定データ操 作 小さなデータ 参照/更新 大きなデータ 挿入/参照 レスポンス 速い 遅い スケールアッ プ・アウト せいぜい1ケタ 台のサーバ 数十台~数千 台 データ構造 構造化データ 準構造化デー タデ
ー
タ
サ
イ
ズ
大
デ
ー
タ
サ
イ
ズ
小
レスポンス長い
DWH
アプライアンス
RDBMS
Hadoop開発の歴史的経緯
GoogleFileSystemやMapReduceなどと呼ばれる分
散処理技術を独自に開発。ソースコードではなく、そ
の仕組みを論文として発表'
2004年(
膨大なデータに対する検索処理で課題を抱えていた
Yahoo Inc.は、著名なエンジニアであるDoug Cutting
氏を中心に上記論文を元に、
Hadoopを開発。
Apache Hadoopプロジェクトとして公開され、オープ
ンソースソフトウェアとして開発が進む。
米国を中心に利用が進み、
Hadoop自
体も様々な改良が加えられる。
日本でも導入事例
が増えつつある。
なにを
Hadoopに期待するか
– 過去できない/できなかったことの実現
−ペタ級のデータ処理
従来方式との差がなにか
実感できるようなことがで
きないか
やっぱり、データ
検索
/集計だよね
レポートのたびに
Javaで開発する
のは
…
業務系
ITにおける、RDBMS、DWH
および
Hadoopの位置づけ
RDBMS
Oracle / MySQL
MS SQL Server など
データウェアハウス
RDBMS/DWH専用機
トランザクション処理
Hadoopクラスタ
データ分析
BI
データ蓄積
非構造型データ
膨大な過去データ
複雑かつ大量のデータを高速に分析
結局、
Hadoopとは?
HDFSのデータ保持、管理概要
Name Node
Master Node
1 2 3 4
ブロック
1
4
クライアント
データ
4
1
1
4
2
2
2
3
3
3
問い合わせ
メタデータ管理 DataNode 状態監視 ブロック管理1
4
2
3
DataNodes
Name Nodeを利用して、 データをブロックに分割 し、DataNodeに配置 1つのブロックを複 数の、DataNodeに 複製'複製数:3(HDFSを体験しよう:
例
1(巨大なファイルをHDFSにコピー&様子を見る
•HDFSに置きたいファイルを生成する。今回はファイルサイズが10GBのファイルを生成
する。
# dd if=/dev/zero of=/tmp/file10GB bs=1024M count=10
# ls -lh /tmp/file10GB
-rw-r--r-- 1 root root 10G 3月 1 02:41 /tmp/file10GB
コピー元の巨大ファイル:
/tmp/file10GB
分散
FS
HDFS
HDFSを体験しよう:
例
1(巨大なファイルをHDFSにコピー&様子を見る
HDFS上に保存用のディレクトリを生成する。Cloudera版Hadoopにおいて、
HDFSの操作は、アカウントhdfsで行う。
# su – hdfs
$ whoami
hdfs
$ hadoop fs –mkdir /user/hdfs/BIGFILEDIR/
Name Nodeの/tmpに作成した10GBのファイルfile10GBをHDFSにコピーする。
$ hadoop fs -put /tmp/file10GB /user/hdfs/BIGFILEDIR/
上記コマンドを実行することで、データノードで構成されている
HDFSに、目的のファイル
HDFSを体験しよう:
例
1(巨大なファイルをHDFSにコピー&様子を見る
•WebブラウザでHDFSの使用量を確認する。Webブラウザで、Name NodeのIPアドレス
またはホスト名に
50070ポートでアクセスする。
Webブラウザをリロードすると、「DFS Used」の値が変化することが わかる。 上記例は、10GBのファイルのコピー途中での様子 '4GBあたりまでコピーした状態で画面ダンプを取得した( 10GBのファイルのコピー操作を 行う前の段階。 「DFS Usedは1.41MB」である。HDFS上にファイルfile10GBがコピーされていることを確認する。
$ hadoop fs -ls /user/hdfs/BIGFILEDIR/ Found 1 items -rw-r--r-- 2 hdfs supergroup 10737418240 2011-03-01 02:51 /user/hdfs/BIGFILEDIR/file10GBHDFSの基礎
•前提となる考え
•構成されるノードは障害率が高いという前提で進める。
•安価なサーバーはいつダウンしてもおかしくないという考え。
•ファイルサイズ
•HDFSで取り扱うファイルは
数
TB~PBクラス
•一つのファイルサイズが巨大
•アクセス
•ファイルはライトワンス。
•大規模なストリーミングリード。
•ランダムアクセスはしない。
•性能、特徴
•安定したスループットを目的とする。
•低レイテンシではない
。
ブロック'128MB( ブロック'128MB( ブロック'128MB( ブロック'128MB( ブロック'128MB( ブロック'128MB( ブロック'128MB( ブロック'128MB(
HDFSのブロック書き込み例
ブロック'128MB( ブロック'128MB( ブロック'128MB( ブロック'128MB( ブロック'128MB( ブロック'128MB( ブロック'128MB( ブロック'128MB( HP ProLiant DL2000Map処理とReduce処理の例:
文字例のカウントを行う
<Hello, 1回出現> <World, 1回出現> <Bye, 1回出現> <World, 1回出現> <Hello, 2個> <World, 2個> <Bye, 1個> <Bob, 1個>出力
Bob 1
Bye 1
Hello 2
World 2
Map
Reduce
<Hello, 1回出現> <Bob, 1回出現>入力
Hello World Bye World Hello Bob Hello World Bye World Hello Bob
Map
テキストの
1行目
テキストの
2行目
処理対象となるログデータ等を入力にする。 Map処理: ログデータを行毎に処理して、検索結果をキーと値の組にする Reduce処理: 同じキー'文字列(を集計し、結果を出す。Map Reduceを体験しよう:
例
2(テキストファイルの単語数をカウントする
•対象のテキストファイル例:
/usr/share/doc/glibc-2.5/以下のテキストファイル「NEWS」 調査対象となる
入力ファイル:/usr/share/doc/glibc-2.5/NEWSファイル
Map Reduce
the 315 * 314 NEW: 313 and 192 C 173 to 152 ISO 149 for 147 9x 141 of 135 The 127 by 115 … …
得たい結果:
単語数のリスト
GNU C Library NEWS -- history of user-visible changes. 2006-09-29
Copyright (C) 1992-2002,2003,2004,2005,2006 Free Software Foundation, Inc.
See the end for copying conditions.
Please send GNU C library bug reports via <http://sources.redhat.com/bugzilla/> using `glibc' in the "product" field. ^L
Version 2.5
* For Linux, the sorting of addresses returned by getaddrinfo now also
handles rules 3, 4, and 7 from RFC 3484. I.e., all rules are handled.
Implemented by Ulrich Drepper.… …
… …
HDFSに配置したINDIR/NEWSファイルをHadoopのMap Reduceで分散処理を行う $ cd $HOME; pwd
/usr/lib/hadoop-0.20 $ whoami
hdfs
$ hadoop jar contrib/streaming/hadoop-streaming-0.20.2-CDH3B4.jar ¥
-file bin/map.py -mapper bin/map.py -file bin/red.py -reducer bin/red.py ¥ -input INDIR -output OUTDIR1
...
11/03/01 01:48:08 INFO streaming.StreamJob: map 0% reduce 0% 11/03/01 01:48:10 INFO streaming.StreamJob: map 50% reduce 0% 11/03/01 01:48:11 INFO streaming.StreamJob: map 100% reduce 0% 11/03/01 01:48:17 INFO streaming.StreamJob: map 100% reduce 33% 11/03/01 01:48:19 INFO streaming.StreamJob: map 100% reduce 100%
11/03/01 01:48:20 INFO streaming.StreamJob: Job complete: job_201102281749_0005 11/03/01 01:48:20 INFO streaming.StreamJob: Output: OUTDIR1
$ hadoop dfs -ls Found 2 items drwxr-xr-x - hdfs supergroup 0 2011-03-01 01:10 /user/hdfs/INDIR drwxr-xr-x - hdfs supergroup 0 2011-03-01 01:48 /user/hdfs/OUTDIR1 •出力するディレクトリにOUTDIR1を指定したので HDFS上にOUTDIR1が生成されていることがわかる Hadoop Streamingを利用することで、Javaで記述しなくても、PythonやPerlなどの スクリプトでMapReduceを実現できる。
Map Reduceを体験しよう:
例
2(テキストファイルの単語数をカウントする
データウェアハウスとして
Hive
– Facebookのジョブの95%は、Hive
– 非常に早く書くことができ、普通は約10分しかかからない
– HiPalというwebベースのツール
•
Hiveを使うビジネスアナリストが、簡単にクエリを書ける
•データウェアハウスにロードされている20000のテーブルを調べることが
できる
•'HiPalは、公開されていない(
– 日に1回のバッチ処理からリアルタイムなクエリにずっと近いも
のに変化
– 最も速いクエリを1分以内で返すことができるシステムを開発
することが、全く新しい領域のアプリケーションを切り開くキー
となる
FacebookのHadoopの現状
– Facebookは、引き続きHadoop技術に投資
– 彼らが使っているHive (彼らが始めた) や HBase のよ
うなオープンソース プロジェクトに貢献
– コンピューティング クラスタで、大規模なデータを処理
– Hadoopとのデータベースの統合
– 高可用性、低遅延なアプリケーションをサポートする
アーキテクチャを有している。
Hadoopのシステム構成考慮点:
小規模から大規模クラスタ構成'
1000ノード(へ
Hadoop管理ノード: •Hadoop Name Node •Hadoop Job Tracker
Lig hts -O ut10 0 HP ProLiant SL170s G6 ラック HP ProLiant SL170s G6 x1 CPU: 2x QC Xeon Mem: 18GB Disk : 500GB x 4 SAS Lig hts -O ut10 0 ラック コアスイッチ 'アグリゲーション( コアスイッチ 'アグリゲーション( ネームノード'HA( セカンダリ・ネームノード ジョブ・トラッカー ジョブ・トラッカーの フェールバック先 ジョブ・トラッカーの フェールバック先 HP CMU/HP SIM Nagios/Ganglia
10GbE 10GbE 10GbE
管理ノード・ラック •Name Nodeは大容量メモリ で構成: データノードのデー タ量が大きくなると、ネーム ノードのメモリ中のメタデータ が大きくなるため。 •Name NodeはHA化 •Heartbeat + DRBD
HadoopにおけるRack Awareness構成例
Rack2
Rack3
– エンクロージャ障害、ラック障害に対応させるためのHadoopの機能
– レプリカはラックを跨いでHDFSに保存される
– NameNodeはラックを跨いでHA化
Rack1
Client
Client
Block 1 BLock 2 Block 3ファイル
処理
ファイルは、
ブロックに分割さ
れる
Block 1 BLock 2 Block 3 Block 1 BLock 2 Block 3レプリカ:
3
Rack
Awareness:
ブロックはラック
をまたいでレプリ
ケーションさせる。
所属するラックま
たはエンクロー
ジャを
IPアドレス
の範囲などで区
分けし、
Hadoop
に設定。
Hadoopのシステム構成考慮点:
Nagiosを使ったHadoopクラスタの監視
Data nodeのtasktrackerのポート監視を行う NagiosプラグインをNagiosにインストール Data nodeのポート監視を行う NagiosプラグインをNagiosにインストール HDFSのディスク使用量を監視する Nagiosプラグインcheck_hadoop_metrics をインストールHadoopのシステム構成考慮点:
Gangliaを使ったHadoopクラスタの監視
Name NodeとData Nodeのマルチキャスト アドレスは異なる値にすることが望ましい /etc/sysconfig/network-scripts/route-ethXの値 /etc/hadoop/conf.XXXにあ るhadoo-metrics.properties ファイルにDFSに関する マルチキャストアドレスを記述