38
他の講演を聴く前に確認しておきたい HadoopSpark 入門 日本におけるHadoopの状況 日本Hadoopユーザー会 濱野 賢一朗/Kenichiro Hamano NTTデータ) 20161026Hadoop Summit 2016 Tokyo 講演資料

Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

Embed Size (px)

Citation preview

Page 1: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

他の講演を聴く前に確認しておきたい

Hadoop/Spark 入門

日本におけるHadoopの状況

日本Hadoopユーザー会

濱野 賢一朗/Kenichiro Hamano (NTTデータ)

2016年10月26日 Hadoop Summit 2016 Tokyo 講演資料

Page 2: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

自己紹介

濱野 賢一朗 (はまの けんいちろう)

– 日本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

Page 3: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

いまさらですが・・・

そもそも

Hadoopって

何だっけ?

Page 4: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

Hadoopを一言でいうと・・・

並列分散処理を実現するミドルウェア

複数のIAサーバを束ねて、 ひとつの大きな処理システムとして利用

特に大量データの格納・処理に最適化 HDDは今でも実質は 80MB/sec 程度が限界

5TBのデータを読み込むのに 約 5*1000*1000 /80 = 62500秒 = 17.4時間

この問題を解決するために、並列分散処理を活用

Page 5: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

大量データの処理を実現するには

データを複数のサーバに分割して格納

利用時には、複数のサーバから、 それぞれのデータを同時に読み込む

HDDの台数分だけのスループットを確保 1台だと 80MB/sec 程度でも

1000台だと 80GB/sec のスループット 5TBのデータを読み込みも 62.5 秒で実現

Page 6: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

Hadoopの構成 (従来)

大きく 2つのコンポーネントで構成

分散ファイルシステム HDFS Hadoop Distributed File System

並列分散処理フレームワーク MapReduce Framework アルゴリズム MapReduce を実現する

どちらも Google が

発表した論文の アイデアを 元に開発 されている

Page 7: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

Hadoopの構成 (従来)

集中管理型の分散システム

データ管理や 分散処理ジョブ の管理は マスタサーバが 実施

スレーブサーバは、 分散処理の 実行や データの実体を 保存

Hadoopマスタサーバ

Hadoopクライアント

L2/L3スイッチ

NameNode JobTracker

L2スイッチ

Hadoopスレーブサーバ群

DataNode TaskTracker

DataNode TaskTracker

DataNode TaskTracker

DataNode TaskTracker

DataNode TaskTracker

ディスク ディスク ディスク ディスク ディスク

Page 8: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

分散ファイルシステム HDFS

NameNode (Master)

DataNode (Slave) クライアント

② ③

ファイル

Heartbeat

メタ情報

管理

ブロック

管理

DataNode

状態監視

ブロックの

保存

1つのブロックを複数のDataNodeで保存 → 任意のDataNodeが故障してもデータを失わない

ブロック ①

Page 9: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

MapReduce (アルゴリズム)

大量の件数のデータがあった時に、 複数ワーカーで 並列に処理できる仕組み

例として、選挙の開票作業を想定

– 複数人で作業を分担して実施

– 最初に、投票用紙を分けて、 みんなで並行して投票者別に用紙を仕分ける

– 次に、投票者別の用紙を1カ所にまとめて、それぞれの枚数を数える

Page 10: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

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氏

Page 11: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

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処理 分類・仕分けされた データごとに処理

Page 12: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

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倍のスピード (相互に影響を受けずに作業できる)

Page 13: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

MapReduce Framework

JobTracker (MASTER)

TaskTracker (SLAVE)

クライアント

② ③ ①

タスク実行中

タスク実行待ち

タスク実行(競争)中

MapReduce

ジョブ管理 タスク

管理 Heartbeat

TaskTracker

状態監視

MapReduce

ジョブ

M

R

同じ処理の投機的実行

データのローカリティを意識した タスクの実行

Map Map Reduce

M R M

R M

Map,Reduce

タスクの実行

Page 14: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

Hadoopの特徴

HDFS

大量のデータを高スループットに読み込める

サーバが故障しても、データの安全性は担保

MapReduce

Map処理、Reduce処理のみを指定すれば (原則はJavaで処理を記述) あとはフレームワークが並列分散処理を実現

ノード数を増やせば、基本スケール

サーバが故障しても、ジョブは実行される

Page 15: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

HDFS

大量のデータを高スループットに読み込める

サーバが故障しても、データの安全性は担保

MapReduce

Map処理、Reduce処理のみを指定すれば (原則はJavaで処理を記述) あとはフレームワークが並列分散処理

ノード数を増やせば、基本スケール

サーバが故障しても、ジョブは実行される

Hadoopの特徴

並列分散処理の 面倒な部分を解決してくれる

ミドルウェア

Page 16: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

Hadoopは何に利用できるのか?

データ読み込みのスループットの最大化 → 全件データ (Big Data) 処理の実現 ユーザーごとの個別のフィードバックの実現

(ソーシャルなサービス、レコメンドなど)

並列分散処理によるバッチ処理の高速化

→ データ件数の増大に対応

Page 17: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

Hadoopの活用例

過去のアクセス履歴を格納・処理して、ユーザーごとの嗜好 (特徴量)を抽出、コンテンツ最適化やレコメンド

オンラインゲームなどのサービスにおいて、ユーザー行動を分析して、 解約低減やその効果の評価

金融商品の現在価値計算 (中間データが肥大化するシミュレーション)、利用者ごとのリスク計算

N:Nのデータの突き合わせが必要な名寄せ系処理

PL/SQL等で多件数の小容量データを繰り返し取得・処理していた 処理の高速化 (並列処理に)

タービン、橋梁、自動車、航空機に付けたセンサーからのデータを 格納・処理して故障検知、利用の効率化

Page 18: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

現状のHadoopでは YARN が導入

分散ファイルシステム

HDFS

バッチ処理 MapReduce

従来のHadoop

分散ファイルシステム

HDFS

バッチ処理 MapReduce2

現在のHadoop

リソース制御 YARN

リソース制御のレイヤを切り出された → YARN

Page 19: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

YARNを使いこなすと・・・

分散ファイルシステム HDFS

バッチ処理

MapReduce2

リソース制御 YARN

ストリーム処理

Storm

・・・・・・ Spark

単一クラスタ内に複数の分散処理アーキテクチャが同居可能 → 蓄積済みの大量データを移動することなく、 同一計算リソースで多様な処理を実現

Page 20: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

Hadoopエコシステム と ディストリビューション

Hadoopエコシステム – Hadoopと連携できる周辺ソフトウェアの総称

– 多数のエコシステムが開発されている

– Hive, Pig, Asakusa Framework , Zookeeper, Tez, ・・・

Hadoopディストリビューション – Hadoopエコシステムをパッケージングしたもの

– HDP (Hortonworks社提供)、CDH (Cloudera社提供) など

Page 21: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

Sparkとは

Page 22: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

Apache Sparkをざっくり言うと

MapReduceに限らず、DAG(有向非循環グラフ)型で 柔軟に並列分散処理を実行できるエンジン – DAG型エンジンは複数登場している

join

filter

groupby

map

map

SparkではRDD(Resilient Distributed Dataset)というデータ集合を単位に扱う 実際には複数マシンのメモリ上に分散配置され、耐障害性の機構も備わる

ひとつのジョブ

Page 23: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

参考: RDDによる開発

RDDベースの処理の記述 – MapReduceに比べると簡便に記述できる

– 配列やリストなどのコレクションのように扱える

Page 24: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

Sparkの処理は高速!

HadoopではMapReduceの単位が1つのジョブ 反復処理や複雑な処理では、I/O量が多くなりすぎる

M R

Map処理 Reduce処理

M R M R ・・・

ジョブ

HDFS IO IO IO IO

ジョブ間のデータの受け渡しのたびに、HDFSへのI/Oが伴う

Page 25: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

Sparkの処理は高速!

Sparkでは複雑な処理でも1つのジョブで定義でき、 中間データを都度出力する必要がないため、I/Oはジョブの 入出力だけに抑えられる

RDD RDD RDD RDD

RDD RDD

Sparkジョブ

HDFS

複雑な処理においてジョブが多段になることが少ないため、ジョブ間のデータの受け渡しに伴うI/Oは最小限に抑えられる

IO

IO

IO

RDDの変換

Page 26: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

補足: キャッシュの活用

何度も利用するRDDは、複数のサーバのメモリに分割して キャッシュできる

キャッシュを活用することで、同じデータを利用する場合でも、都度データを読み込む必要がない

RDD RDD

ジョブA

RDD

HDFS

RDD

キャッシュ済みのRDD

RDD RDD RDD

ジョブB

ジョブBはジョブAがキャッシュしたデータを利用できる

キャッシュを利用できるので、HDFSからのデータの読み込みは発生しない

Page 27: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

補足: キャッシュの活用

キャッシュは反復処理でも有効に機能する

RDD RDD RDD

前段の反復処理の結果を入力とするジョブ キャッシュ済みのRDD

2回目の反復以降は、キャッシュしたRDDを処理すれば良い。

HDFS

最初の反復のみ、HDFSからデータを読み出す

Page 28: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

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

ストリーミング処理、機械学習ライブラリ、グラフ処理エンジン等が付属

分散処理エンジンを含むコア部分

Page 29: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

Sparkの主要なエコシステム

SparkSQL – JavaやScala内のアプリケーション内でSQLを組み込める

Spark Streaming – マイクロバッチ処理によるストリーミングエンジン

– 数秒~数分単位での流入するデータを(繰り返し)処理できる

MLlib / ML pipelines – Spark用の機械学習ライブラリとツール群

– 機械学習では 別プロジェクトの Mahout もSparkに対応

GraphX – Spark用のグラフ処理エンジン

Page 30: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

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

Page 31: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

参考: 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で同様の処理を記述

Page 32: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

参考: DataFrame API による開発

Spark SQLのオプティマイザの恩恵が受けられる

オプティマイザによってJVMで動作する物理プランが生成されるため、開発言語の違いによる著しい性能劣化は起こらない

http://www.slideshare.net/databricks/introducing-dataframes-in-spark-for-large-scale-data-science

Page 33: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

Hadoop / Spark Conference Japan 2016

Page 34: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

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利用歴を教えてください

本番環境で利用中 試しに動かしている 実績なし(予定あり) 実績なし(予定なし)

Page 35: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

誰が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

Page 36: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

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 から抜粋 もし抜けていたらごめんなさい

Page 37: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

まとめ

Hadoopは 大量データを並列分散で格納・処理できる

Sparkは DAG型の並列分散処理を実現する SQL、ストリーミング処理、機械学習、グラフ処理も 同一エンジンで動作する

日本でも Hadoop / Spark は着実に使われるとともに 開発を支えているメンバもいます

Page 38: Introduction to Hadoop and Spark (before joining the other talk) and An Overview of Hadoop in Japan

ご静聴ありがとうございました

日本Hadoopユーザー会の 活動への応援、

引き続きよろしくお願いします