Submit Search
SourceReading 20101020
0 likes
452 views
S
Shinichi YAMASHITA
Hadoop 0.21.0 でShuffleの実装が気になったので、流しで読んでみた。
Technology
Read more
1 of 18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
More Related Content
PPTX
遺伝研スパコンを使った解析の並列化.pptx
Osamu Ogasawara
PDF
Kansai mrb gr_sakura
Kosuga Masakatsu
PDF
Road to ggplot2再入門
nocchi_airport
PDF
Fluentd casual
oranie Narut
PDF
菩薩でもわかる!Rで動かすExcelアドインの作り方
Nagi Teramo
PDF
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Kazuya Wada
PDF
WDD2012_SC-004
Kuninobu SaSaki
PDF
RでGPU使ってみた
Kazuya Wada
遺伝研スパコンを使った解析の並列化.pptx
Osamu Ogasawara
Kansai mrb gr_sakura
Kosuga Masakatsu
Road to ggplot2再入門
nocchi_airport
Fluentd casual
oranie Narut
菩薩でもわかる!Rで動かすExcelアドインの作り方
Nagi Teramo
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Kazuya Wada
WDD2012_SC-004
Kuninobu SaSaki
RでGPU使ってみた
Kazuya Wada
What's hot
(20)
PPT
Hadoop輪読会第6章
Akihiro Kuwano
PPTX
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
basicinc_dev
PDF
20220111 SoftwareDesign #32 kitazaki
Ayachika Kitazaki
ODP
Building production server on docker
Hiroshi Miura
PDF
Building production server on docker
Hiroshi Miura
PDF
CouchDB JP & BigCouch
Yohei Sasaki
PPTX
Stream2の基本
shigeki_ohtsu
PDF
Slub data structure
Masami Ichikawa
PDF
Slub alloc and free
Masami Ichikawa
PDF
時を超えた JavaScript の道
Teppei Sato
KEY
Hadoop splittable-lzo-compression
Daiki Sato
PDF
20131109 ruby conf2013
Hiroshi SHIBATA
PPTX
Ctb57 with god7
kingtomo
PDF
そろそろRStudioの話
Kazuya Wada
PDF
グローバル化はなぜ日時処理問題を引き起こすのか
Atsushi Kambara
PDF
Fabric
Joe_noh
PDF
Node-v0.12の新機能について
shigeki_ohtsu
PDF
Ssaw08 0701
Atsushi Tadokoro
PPTX
RelaxCafe@CouchDB break.4
Yohei Sasaki
PDF
RでつくるWebアプリ~rApache編~
Kazuya Wada
Hadoop輪読会第6章
Akihiro Kuwano
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
basicinc_dev
20220111 SoftwareDesign #32 kitazaki
Ayachika Kitazaki
Building production server on docker
Hiroshi Miura
Building production server on docker
Hiroshi Miura
CouchDB JP & BigCouch
Yohei Sasaki
Stream2の基本
shigeki_ohtsu
Slub data structure
Masami Ichikawa
Slub alloc and free
Masami Ichikawa
時を超えた JavaScript の道
Teppei Sato
Hadoop splittable-lzo-compression
Daiki Sato
20131109 ruby conf2013
Hiroshi SHIBATA
Ctb57 with god7
kingtomo
そろそろRStudioの話
Kazuya Wada
グローバル化はなぜ日時処理問題を引き起こすのか
Atsushi Kambara
Fabric
Joe_noh
Node-v0.12の新機能について
shigeki_ohtsu
Ssaw08 0701
Atsushi Tadokoro
RelaxCafe@CouchDB break.4
Yohei Sasaki
RでつくるWebアプリ~rApache編~
Kazuya Wada
Ad
Viewers also liked
(8)
PPT
Paseo bosetti
grupo 12
DOC
Sustentación proyecto 4
000Mariana000
PPTX
Ingenier%c3%ada de software
Marilupe
PPTX
Herramietas pedagogicas en internet
Uni
PDF
Ind tam-015-doc
Riverside School
PPTX
Si no usas internet, estas en nada
ECON
PPT
Resumen estudio informativo nueva linea castelldefels cornellà-zona universit...
Transports Metropolitans de Barcelona (TMB)
PPT
Trasnpallets
yetea1417
Paseo bosetti
grupo 12
Sustentación proyecto 4
000Mariana000
Ingenier%c3%ada de software
Marilupe
Herramietas pedagogicas en internet
Uni
Ind tam-015-doc
Riverside School
Si no usas internet, estas en nada
ECON
Resumen estudio informativo nueva linea castelldefels cornellà-zona universit...
Transports Metropolitans de Barcelona (TMB)
Trasnpallets
yetea1417
Ad
Similar to SourceReading 20101020
(17)
PDF
Hadoop事始め
You&I
PDF
Data-Intensive Text Processing with MapReduce(Ch1,Ch2)
Sho Shimauchi
PDF
ただいまHadoop勉強中
Satoshi Noto
PPTX
A 2-3ゾウ使いへの第一歩 hadoop on azure 編
GoAzure
PPTX
ゾウ使いへの第一歩
Fumito Ito
PDF
第1回Hadoop関西勉強会参加レポート
You&I
PPTX
〜Apache Geode 入門 gfsh によるクラスター構築・管理
Akihiro Kitada
PDF
MapReduce解説
Shunsuke Aihara
PDF
Hadoop - OSC2010 Tokyo/Spring
Shinichi YAMASHITA
PDF
MapReduce/YARNの仕組みを知る
日本ヒューレット・パッカード株式会社
PDF
Kuduを調べてみた #dogenzakalt
Toshihiro Suzuki
PPT
Googleの基盤クローン Hadoopについて
Kazuki Ohta
PDF
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話
id774
PDF
Hive on Spark を活用した高速データ分析 - Hadoop / Spark Conference Japan 2016
Nagato Kasaki
PDF
Hadoop, NoSQL, GlusterFSの概要
日本ヒューレット・パッカード株式会社
PPTX
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
AdvancedTechNight
PDF
Spark shark
Tsuyoshi OZAWA
Hadoop事始め
You&I
Data-Intensive Text Processing with MapReduce(Ch1,Ch2)
Sho Shimauchi
ただいまHadoop勉強中
Satoshi Noto
A 2-3ゾウ使いへの第一歩 hadoop on azure 編
GoAzure
ゾウ使いへの第一歩
Fumito Ito
第1回Hadoop関西勉強会参加レポート
You&I
〜Apache Geode 入門 gfsh によるクラスター構築・管理
Akihiro Kitada
MapReduce解説
Shunsuke Aihara
Hadoop - OSC2010 Tokyo/Spring
Shinichi YAMASHITA
MapReduce/YARNの仕組みを知る
日本ヒューレット・パッカード株式会社
Kuduを調べてみた #dogenzakalt
Toshihiro Suzuki
Googleの基盤クローン Hadoopについて
Kazuki Ohta
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話
id774
Hive on Spark を活用した高速データ分析 - Hadoop / Spark Conference Japan 2016
Nagato Kasaki
Hadoop, NoSQL, GlusterFSの概要
日本ヒューレット・パッカード株式会社
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
AdvancedTechNight
Spark shark
Tsuyoshi OZAWA
SourceReading 20101020
1.
Hadoopソースコード読み会 Shuffleを読んでみる 山下 真一
2.
2 背景 ● 某案件より:「Reduce処理に時間が掛かりすぎる!」 → リソースネックではなかった →
処理ログを見るとShuffleで延々と時間が掛かる! → これが有名なShuffleのワナね! いきなり大きな壁にぶつかった2年前の秋・・・ 月日は流れ・・・ ● 2010年8月 0.21.0リリース! → ある人曰く:「Shuffleは少々手を入れたぜ!」 → おぉ!これは確認せずにはいられなゐ! といういことで、Shuffleがどうなったか読んでみた。
3.
3 前提 ● Hadoop 0.21.0 ●
対象は、Shuffle時にMap処理結果を取得する部分 ● 大まかな流れのみで詳細や異常系までは読んでいません! ● JobTrackerはlocalモードではないです! ● 読み違いは、ご容赦を!
4.
4 Shuffleへの道のり ● Hadoopの実装では、Map処理やReduce処理はTaskTrackerそのものでは なく、TaskTrackerより生成されるChildが実行 ● Child
: org.apache.hadoop.mapred.Child Childは、Map処理やReduce処理を実行する (L:217) ● taskFinal.run()よりReduceTask.run()が実行 ● Hadoopでは、ReduceTask内でShuffleが処理されるの で、ReduceTask.run()を追いかける
5.
5 ReduceTask ● ReduceTask :
org.apache.hadoop.mapred.ReduceTask ● ReduceTask内でShuffleインスタンス生成 (L:353) ● Shuffle : org.apache.hadoop.mapreduce.task.reduce – 0.21.0より導入されたクラス – Shuffleコンストラクタ内でShuffleScheduler, MergeManagerイン スタンスを生成 (L:88, L:92) ● Shuffleインスタンスのrun()を実行 (L:362) Combine処理は、 Spillする場合に処理される
6.
6 ShuffleScheduler ● mapLocations :
Map<String, MapHost> / HashMap ● pendingHosts : Set<MapHost> / HashSet ● finishedMaps : final boolean[] ● totalMaps : final int ● remainingMaps : int ● copySucceed() : Map処理結果の取得が成功したときに実行 ● addKnownMapOutput() : Map処理結果情報(ホスト名, MapID)を追加 ● getHost() : Map処理ホスト情報取得 ● getMapForHost() : Map処理ホストで実行したMap処理情報取得 ● waitUntilDone() : Map処理結果取得の完了までwait
7.
7 MergeManager ● IntermediateMemoryToMemoryMergerスレッド ● mapreduce.reduce.merge.memtomem.enabled
= trueの場合 ● InMemoryMergerスレッド ● 特定の閾値を超えた場合、MemoryMerge → Spill 実行 ● OnDiskMergerスレッド ● DiskでのMerge ● reserve() : Map処理結果取得のためのメモリ確保 ● ディスク or メモリ or null (メモリ上で扱えるがメモリを大量に使用し ている場合) ● canShufflleToMemory() : Memory or Disk ● finalMerge() : Map処理結果を全て取得した後の最後に実行
8.
8 Shuffle ● Shuffle.run()では、2種類のスレッドを生成と起動 ● EventFetcher
(L:106) : Map処理の状況を確認する ● Fetcher (L:112) : Map処理結果を取得する,複数のスレッドを生成 – mapreduce.reduce.shuffle.parallel.copiesプロパティで指定 ● デフォルト5 ● 全てのMap処理が完了するまで無限ループ待ち (L:119) ● PROGRESS_FREQUENCY : 2000ミリ秒でハードコーディング
9.
9 EventFetcher – その1 ●
EventFetcher.run() : 無限ループでMap処理実行状況を把握 ● getMapCompletionEvents()を呼び出し (L:66) ● ループ内でThread.sleep(SLEEP_TIME)を実行 (L:72) – SLEEP_TIME : 1000ミリ秒でハードコーディング
10.
10 EventFetcher - その2 ●
EventFetcher.getMapCompletionEvents() ● Map処理結果情報を取得ののちSUCCEEDEDのものを対象にURIや MapID、ホスト名などの情報を確認 – scheduler.addKnownMapOutput()で情報保存 (L:133) – addKnownMapOutput()内では、以下の情報を保存 ● mapLocations ← Map処理を実行したホスト情報やホスト名 ● MapHost.addKnownMap() ← Map処理のTaskAttemptID ● pendingHosts ← Map処理結果を取得するためのホスト情報 – FetcherスレッドでMap処理結果を取得
11.
11 Fetcher - その1 ●
Fetcher.run() : 無限ループでMap処理結果を取得 ● scheduler.getHost()にて、取得するMap処理実行ホスト情報を取得 (L:145) ● copyFromHost()で、Map処理実行ホストより結果取得 (L:149) ● scheduler.freeHost()にて、Map処理実行ホスト情報を戻す (L:152) – 一つのホストから集中して取得することを防ぐため
12.
12 Fetcher - その2 ●
ShuffleScheduler.getHost() ● pendingHosts内に複数あるMap処理ホスト情報をランダムに取得 – random.nextInt – seedは、Ramdom(System.currentTimeMillis()) ● pendingHostsはHashSetであるので、順序性を持たないためfor文によ り対象のMap処理ホスト情報をpickup
13.
13 Fetcher - その3 ●
copyFromHost() ● scheduler.getMapsForHost()で取得するMap処理結果を決定 (L:172) – host.getAndClearKnownMaps() で該当ホストのTaskAttemptID を全て取得、host情報が持つTaskAttemptIDは一旦clear – TaskAttemptIDリストより、結果を取得していないSUCCEEDであ るTaskAttemptIDを20個取得 (20個はハードコーディング) – 21番目以降のTaskAttemptIDは、host.addKnownMap()で戻す ● Map処理を実行したTaskTrackerにHTTPにて接続確立 – URLに20個のMapIDを渡す ● copyMapOutput()で、TaskAttemptIDに沿ったMap処理結果をメモリ 上で保存するかディスクで保存する (L:251)
14.
14 Fetcher - その4 ●
copyMapOutput() : 取得したTaskAttemptIDによる結果ごとに実行 ● header情報取得 (L:282 – L:287) ● merger.reserve()でMap処理結果でメモリで保持するかディスクで保 持するか決定 (L:305) – メモリ or ディスク の判断は”パラメータ的な話題”で説明 ● reserve結果、メモリの場合shuffleToMemory()にてMap処理結果をメ モリで保持 (L:319), ディスクの場合shuffleToDisk()にてMap処理結果 をローカルディスクに書き出す (L:322) ● scheduler.copySucceeded()で、取得完了に関して処理 (L:322) – output.commit()で、メモリ/ディスクで保持するMap処理結果数が 閾値を超えた場合、Spill/Mergeを実行 – 閾値については”パラメータ的な話題”で説明
15.
15 ポイント ● 新規Map処理結果は、EventFetcher.getMapCompetionEvents()の呼び出 しで確認できる ● 1回の取得ごとに1秒sleepする
(L:72) – SLEEP_TIMEはハードコーディングされている ● Shuffle.run()内のscheduler.waitUntilDone()で状況を判断する ● 1回の確認で2秒waitする (L:364) – wait時間はハードコーディングされている ● 0.20系までと比べるとShuffleによる待ち時間は改善されている
16.
16 パラメータ的な話題 - その1 ●
Fetcherにて、Map処理結果をメモリ or ディスクに書き出す基準 ● MergeManager.canShuffleToMemory() – “Reduce用ヒープサイズ * Copy用領域 * 0.25” よりMap処理結果 (1つ) が小さければメモリ – Copy用領域 : mapreduce.reduce.shuffle.input.buffer.percent ● デフォルト 0.9 ● Map処理結果をcommitするときのメモリ上からSpillする基準 ● MergeManager.CloseInMemoryFile() – “Reduce用ヒープメモリ * Copy用領域 * X” を超えた場合Spill処理 開始 – X : mapreduce.reduce.shuffle.merge.percent ● デフォルト 0.9
17.
17 パラメータ的な話題 - その2 ●
disk上のMap処理結果(segment)をmergeする基準 ● MergeManager.CloseOnDiskFile() – segment数 > (2 * X – 1) となった場合に開始 – X : mapreduce.task.io.sort.factor ● デフォルト 100 ● Fetcher用スレッド(Map処理結果同時取得)数 ● mapreduce.reduce.shuffle.parallel.copies – デフォルト 5
18.
18 終わり ご静聴ありがとうございました