Upload
hadoop-summit
View
286
Download
1
Embed Size (px)
Citation preview
他の講演を聴く前に確認しておきたい
Hadoop/Spark 入門
日本におけるHadoopの状況
日本Hadoopユーザー会
濱野 賢一朗/Kenichiro Hamano (NTTデータ)
2016年10月26日 Hadoop Summit 2016 Tokyo 講演資料
自己紹介
濱野 賢一朗 (はまの けんいちろう)
– 日本Hadoopユーザー会のメンバとして、 イベント Hadoop / Spark Conference Japan や 勉強会 Hadoopソースコードリーディングの企画・ 実施を担当
– 翔泳社 『Hadoop徹底入門』 監修者
– NTT DATA 技術革新統括本部 に所属
– Hadoop 関係者で話題になった「経産省の報告書」 の実証事業のPM
平成21年度 産学連携ソフトウェア工学実践事業報告書 高信頼クラウド実現用ソフトウェア開発(分散制御処理技術等に係るデータセンター高信頼化に向けた実証事業) http: //www.meti.go.jp/policy/mono_info_service/joho/downloadfiles/2010software_research/clou_dist_software.pdf
いまさらですが・・・
そもそも
Hadoopって
何だっけ?
Hadoopを一言でいうと・・・
並列分散処理を実現するミドルウェア
複数のIAサーバを束ねて、 ひとつの大きな処理システムとして利用
特に大量データの格納・処理に最適化 HDDは今でも実質は 80MB/sec 程度が限界
5TBのデータを読み込むのに 約 5*1000*1000 /80 = 62500秒 = 17.4時間
この問題を解決するために、並列分散処理を活用
大量データの処理を実現するには
データを複数のサーバに分割して格納
利用時には、複数のサーバから、 それぞれのデータを同時に読み込む
HDDの台数分だけのスループットを確保 1台だと 80MB/sec 程度でも
1000台だと 80GB/sec のスループット 5TBのデータを読み込みも 62.5 秒で実現
Hadoopの構成 (従来)
大きく 2つのコンポーネントで構成
分散ファイルシステム HDFS Hadoop Distributed File System
並列分散処理フレームワーク MapReduce Framework アルゴリズム MapReduce を実現する
どちらも Google が
発表した論文の アイデアを 元に開発 されている
Hadoopの構成 (従来)
集中管理型の分散システム
データ管理や 分散処理ジョブ の管理は マスタサーバが 実施
スレーブサーバは、 分散処理の 実行や データの実体を 保存
Hadoopマスタサーバ
Hadoopクライアント
L2/L3スイッチ
NameNode JobTracker
L2スイッチ
Hadoopスレーブサーバ群
DataNode TaskTracker
DataNode TaskTracker
DataNode TaskTracker
DataNode TaskTracker
DataNode TaskTracker
ディスク ディスク ディスク ディスク ディスク
分散ファイルシステム HDFS
NameNode (Master)
DataNode (Slave) クライアント
② ③
①
①
①
ファイル
Heartbeat
メタ情報
管理
ブロック
管理
DataNode
状態監視
ブロックの
保存
1つのブロックを複数のDataNodeで保存 → 任意のDataNodeが故障してもデータを失わない
ブロック ①
③
③
③
②
②
②
MapReduce (アルゴリズム)
大量の件数のデータがあった時に、 複数ワーカーで 並列に処理できる仕組み
例として、選挙の開票作業を想定
– 複数人で作業を分担して実施
– 最初に、投票用紙を分けて、 みんなで並行して投票者別に用紙を仕分ける
– 次に、投票者別の用紙を1カ所にまとめて、それぞれの枚数を数える
MapReduce (アルゴリズム)
Aさん Bさん Cさん
①用紙を適当に3つに分ける
・・・ ・・・ ・・・
a氏 b氏 e氏 a氏 b氏 e氏 a氏 b氏 e氏
②3人で並行して、 投票者別に用紙を 仕分ける
第1段階
第2段階
第3段階 ④3人で並行して、 投票者ごとに 枚数を数える
a氏の 得票数
b氏の 得票数
d氏の 得票数
e氏の 得票数
c氏の 得票数
投票結果
Aさん Bさん Cさん a氏 e氏
③投票者ごと 用紙を集める
d氏 c氏 b氏
MapReduce (アルゴリズム)
・・・
・・・
・・・
Aさん Bさん Cさん
a氏 b氏 E氏 a氏 b氏 e氏 a氏 b氏 e氏
①用紙を適当に3つに分ける
②3人で並行して、 投票者別に用紙を 仕分ける
a氏 e氏
③投票者ごと 用紙を集める
④3人で並行して、 投票者ごとに 枚数を数える
第1段階
第2段階
第3段階
投票結果
Aさん Bさん Cさん d氏 c氏 b氏
Map処理 データを分類・仕分け
a氏の 得票数
b氏の 得票数
d氏の 得票数
e氏の 得票数
c氏の 得票数
Reduce処理 分類・仕分けされた データごとに処理
MapReduce (アルゴリズム)
・・・
・・・
・・・
Aさん Bさん Cさん
a氏 b氏 E氏 a氏 b氏 e氏 a氏 b氏 e氏
①用紙を適当に3つに分ける
②3人で並行して、 投票者別に用紙を 仕分ける
a氏 e氏
③投票者ごと 用紙を集める
④3人で並行して、 投票者ごとに 枚数を数える
第1段階
第2段階
第3段階
投票結果
Aさん Bさん Cさん d氏 c氏 b氏
N人でやれば N倍のスピード (相互に影響を受けずに作業できる)
a氏の 得票数
b氏の 得票数
d氏の 得票数
e氏の 得票数
c氏の 得票数
N人でやれば 約N倍のスピード (相互に影響を受けずに作業できる)
MapReduce Framework
JobTracker (MASTER)
TaskTracker (SLAVE)
クライアント
② ③ ①
タスク実行中
タスク実行待ち
タスク実行(競争)中
MapReduce
ジョブ管理 タスク
管理 Heartbeat
TaskTracker
状態監視
MapReduce
ジョブ
M
R
同じ処理の投機的実行
データのローカリティを意識した タスクの実行
Map Map Reduce
M R M
R M
Map,Reduce
タスクの実行
Hadoopの特徴
HDFS
大量のデータを高スループットに読み込める
サーバが故障しても、データの安全性は担保
MapReduce
Map処理、Reduce処理のみを指定すれば (原則はJavaで処理を記述) あとはフレームワークが並列分散処理を実現
ノード数を増やせば、基本スケール
サーバが故障しても、ジョブは実行される
HDFS
大量のデータを高スループットに読み込める
サーバが故障しても、データの安全性は担保
MapReduce
Map処理、Reduce処理のみを指定すれば (原則はJavaで処理を記述) あとはフレームワークが並列分散処理
ノード数を増やせば、基本スケール
サーバが故障しても、ジョブは実行される
Hadoopの特徴
並列分散処理の 面倒な部分を解決してくれる
ミドルウェア
Hadoopは何に利用できるのか?
データ読み込みのスループットの最大化 → 全件データ (Big Data) 処理の実現 ユーザーごとの個別のフィードバックの実現
(ソーシャルなサービス、レコメンドなど)
並列分散処理によるバッチ処理の高速化
→ データ件数の増大に対応
Hadoopの活用例
過去のアクセス履歴を格納・処理して、ユーザーごとの嗜好 (特徴量)を抽出、コンテンツ最適化やレコメンド
オンラインゲームなどのサービスにおいて、ユーザー行動を分析して、 解約低減やその効果の評価
金融商品の現在価値計算 (中間データが肥大化するシミュレーション)、利用者ごとのリスク計算
N:Nのデータの突き合わせが必要な名寄せ系処理
PL/SQL等で多件数の小容量データを繰り返し取得・処理していた 処理の高速化 (並列処理に)
タービン、橋梁、自動車、航空機に付けたセンサーからのデータを 格納・処理して故障検知、利用の効率化
現状のHadoopでは YARN が導入
分散ファイルシステム
HDFS
バッチ処理 MapReduce
従来のHadoop
分散ファイルシステム
HDFS
バッチ処理 MapReduce2
現在のHadoop
リソース制御 YARN
リソース制御のレイヤを切り出された → YARN
YARNを使いこなすと・・・
分散ファイルシステム HDFS
バッチ処理
MapReduce2
リソース制御 YARN
ストリーム処理
Storm
・・・・・・ Spark
単一クラスタ内に複数の分散処理アーキテクチャが同居可能 → 蓄積済みの大量データを移動することなく、 同一計算リソースで多様な処理を実現
Hadoopエコシステム と ディストリビューション
Hadoopエコシステム – Hadoopと連携できる周辺ソフトウェアの総称
– 多数のエコシステムが開発されている
– Hive, Pig, Asakusa Framework , Zookeeper, Tez, ・・・
Hadoopディストリビューション – Hadoopエコシステムをパッケージングしたもの
– HDP (Hortonworks社提供)、CDH (Cloudera社提供) など
Sparkとは
Apache Sparkをざっくり言うと
MapReduceに限らず、DAG(有向非循環グラフ)型で 柔軟に並列分散処理を実行できるエンジン – DAG型エンジンは複数登場している
join
filter
groupby
map
map
SparkではRDD(Resilient Distributed Dataset)というデータ集合を単位に扱う 実際には複数マシンのメモリ上に分散配置され、耐障害性の機構も備わる
ひとつのジョブ
参考: RDDによる開発
RDDベースの処理の記述 – MapReduceに比べると簡便に記述できる
– 配列やリストなどのコレクションのように扱える
Sparkの処理は高速!
HadoopではMapReduceの単位が1つのジョブ 反復処理や複雑な処理では、I/O量が多くなりすぎる
M R
Map処理 Reduce処理
M R M R ・・・
ジョブ
HDFS IO IO IO IO
ジョブ間のデータの受け渡しのたびに、HDFSへのI/Oが伴う
Sparkの処理は高速!
Sparkでは複雑な処理でも1つのジョブで定義でき、 中間データを都度出力する必要がないため、I/Oはジョブの 入出力だけに抑えられる
RDD RDD RDD RDD
RDD RDD
Sparkジョブ
HDFS
複雑な処理においてジョブが多段になることが少ないため、ジョブ間のデータの受け渡しに伴うI/Oは最小限に抑えられる
IO
IO
IO
RDDの変換
補足: キャッシュの活用
何度も利用するRDDは、複数のサーバのメモリに分割して キャッシュできる
キャッシュを活用することで、同じデータを利用する場合でも、都度データを読み込む必要がない
RDD RDD
ジョブA
RDD
HDFS
RDD
キャッシュ済みのRDD
RDD RDD RDD
ジョブB
ジョブBはジョブAがキャッシュしたデータを利用できる
キャッシュを利用できるので、HDFSからのデータの読み込みは発生しない
補足: キャッシュの活用
キャッシュは反復処理でも有効に機能する
RDD RDD RDD
前段の反復処理の結果を入力とするジョブ キャッシュ済みのRDD
2回目の反復以降は、キャッシュしたRDDを処理すれば良い。
HDFS
最初の反復のみ、HDFSからデータを読み出す
Sparkのエコシステム
ジョブもSQLもストリーミングも機械学習も 同一のSparkプラットフォーム上で動作する – Hadoopもエコシステムは充実しているが、個々に開発
データソース(HDFSなど)
• Scala/Java/Pythonで処理が記述できる
• インタラクティブシェルが付属し、試行錯誤も可能
http://cdn.oreillystatic.com/en/assets/1/event/126/Apache%20Spark_%20What_s%20new_%20what_s%20coming%20Presentation.pdf
ストリーミング処理、機械学習ライブラリ、グラフ処理エンジン等が付属
分散処理エンジンを含むコア部分
Sparkの主要なエコシステム
SparkSQL – JavaやScala内のアプリケーション内でSQLを組み込める
Spark Streaming – マイクロバッチ処理によるストリーミングエンジン
– 数秒~数分単位での流入するデータを(繰り返し)処理できる
MLlib / ML pipelines – Spark用の機械学習ライブラリとツール群
– 機械学習では 別プロジェクトの Mahout もSparkに対応
GraphX – Spark用のグラフ処理エンジン
Sparkも 絶賛進化中
これまでのマイナーリリースでも大きく進化を遂げてきた
1.1.0
Sort based shuffle
Netty based block server Dynamic Resource Allocation
1.2.0 バージョン
DataFrame
1.3.0
Visualization Tungsten
1.4.0
Unified Memory Management
1.6.0 2.0.0
Structured Streaming
参考: DataFrame API による開発
Spark 1.3.0 より DataFrame API が利用可能
構造化されたデータの処理が簡潔に記述できる
http://cdn.oreillystatic.com/en/assets/1/event/126/Apache%20Spark_%20What_s%20new_%20what_s%20coming%20Presentation.pdf
DataFrame APIで同様の処理を記述
参考: DataFrame API による開発
Spark SQLのオプティマイザの恩恵が受けられる
オプティマイザによってJVMで動作する物理プランが生成されるため、開発言語の違いによる著しい性能劣化は起こらない
http://www.slideshare.net/databricks/introducing-dataframes-in-spark-for-large-scale-data-science
Hadoop / Spark Conference Japan 2016
Hadoop / Spark Conference Japan 2016のアンケート
本番環境で利用中 489人 35.6%
試しに動かしている 374人 27.2%
利用実績なし(利用予定あり) 218人 15.9%
利用実績なし(利用予定なし) 293人 21.3%
3か月未満 145人 16.0%
3か月以上6か月未満 69人 7.6%
6か月以上1年未満 85人 9.4%
1年以上3年未満 298人 33.0%
3年以上 307人 34.0%
本番環境で利用中 160人 11.7%
試しに動かしている 437人 31.8%
利用実績なし(利用予定あり) 348人 25.3%
利用実績なし(利用予定なし) 429人 31.2%
3か月未満 214人 34.4%
3か月以上6か月未満 93人 14.9%
6か月以上1年未満 127人 20.4%
1年以上3年未満 171人 27.4%
3年以上 18人 2.9%
Hadoopの利用状況を教えてください Sparkの利用状況を教えてください
Hadoop利用歴を教えてください Spark利用歴を教えてください
本番環境で利用中 試しに動かしている 実績なし(予定あり) 実績なし(予定なし)
誰がHadoopの開発を支えているか
Hadoopの開発において 国内企業に所属する方 からの貢献も多数見られる
2015年の変更コード行数の所属企業ランキングにも NTT + NTT DATA Yahoo! Japan などが上位に確認される
The Activities of Apache Hadoop Community より引用2015https://ajisakaa.blogspot.jp/2016/01/the-activities-of-apache-hadoop.html
Spark 2.0 Release Noteから
日本人の名前と思われる方も大勢!
Hiroshi Inoue Kazuaki Ishizaki
Kousuke Saruta Koyo Yoshida
Masayoshi TSUZUKI Sasaki Toru
Takahashi Hiroshi Takeshi YAMAMURO
Takuya Kuwahara Takuya UESHIN
Yu ISHIKAWA
Spark 2.0.0 Release Note の Credits から抜粋 もし抜けていたらごめんなさい
まとめ
Hadoopは 大量データを並列分散で格納・処理できる
Sparkは DAG型の並列分散処理を実現する SQL、ストリーミング処理、機械学習、グラフ処理も 同一エンジンで動作する
日本でも Hadoop / Spark は着実に使われるとともに 開発を支えているメンバもいます
ご静聴ありがとうございました
日本Hadoopユーザー会の 活動への応援、
引き続きよろしくお願いします