SlideShare una empresa de Scribd logo
1 de 18
Hadoopソースコード読み会
Shuffleを読んでみる
山下 真一
2
背景
● 某案件より:「Reduce処理に時間が掛かりすぎる!」
→ リソースネックではなかった
→ 処理ログを見るとShuffleで延々と時間が掛かる!
→ これが有名なShuffleのワナね!
いきなり大きな壁にぶつかった2年前の秋・・・
月日は流れ・・・
● 2010年8月 0.21.0リリース!
→ ある人曰く:「Shuffleは少々手を入れたぜ!」
→ おぉ!これは確認せずにはいられなゐ!
といういことで、Shuffleがどうなったか読んでみた。
3
前提
● Hadoop 0.21.0
● 対象は、Shuffle時にMap処理結果を取得する部分
● 大まかな流れのみで詳細や異常系までは読んでいません!
● JobTrackerはlocalモードではないです!
● 読み違いは、ご容赦を!
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
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
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
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
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
EventFetcher – その1
● EventFetcher.run() : 無限ループでMap処理実行状況を把握
● getMapCompletionEvents()を呼び出し (L:66)
● ループ内でThread.sleep(SLEEP_TIME)を実行 (L:72)
– SLEEP_TIME : 1000ミリ秒でハードコーディング
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
Fetcher - その1
● Fetcher.run() : 無限ループでMap処理結果を取得
● scheduler.getHost()にて、取得するMap処理実行ホスト情報を取得
(L:145)
● copyFromHost()で、Map処理実行ホストより結果取得 (L:149)
● scheduler.freeHost()にて、Map処理実行ホスト情報を戻す (L:152)
– 一つのホストから集中して取得することを防ぐため
12
Fetcher - その2
● ShuffleScheduler.getHost()
● pendingHosts内に複数あるMap処理ホスト情報をランダムに取得
– random.nextInt
– seedは、Ramdom(System.currentTimeMillis())
● pendingHostsはHashSetであるので、順序性を持たないためfor文によ
り対象のMap処理ホスト情報をpickup
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
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
ポイント
● 新規Map処理結果は、EventFetcher.getMapCompetionEvents()の呼び出
しで確認できる
● 1回の取得ごとに1秒sleepする (L:72)
– SLEEP_TIMEはハードコーディングされている
● Shuffle.run()内のscheduler.waitUntilDone()で状況を判断する
● 1回の確認で2秒waitする (L:364)
– wait時間はハードコーディングされている
● 0.20系までと比べるとShuffleによる待ち時間は改善されている
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
パラメータ的な話題 - その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
終わり
ご静聴ありがとうございました

Más contenido relacionado

La actualidad más candente

Hadoop輪読会第6章
Hadoop輪読会第6章Hadoop輪読会第6章
Hadoop輪読会第6章Akihiro Kuwano
 
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜHUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜbasicinc_dev
 
20220111 SoftwareDesign #32 kitazaki
20220111 SoftwareDesign #32 kitazaki20220111 SoftwareDesign #32 kitazaki
20220111 SoftwareDesign #32 kitazakiAyachika Kitazaki
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on dockerHiroshi Miura
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on dockerHiroshi Miura
 
CouchDB JP & BigCouch
CouchDB JP & BigCouchCouchDB JP & BigCouch
CouchDB JP & BigCouchYohei Sasaki
 
時を超えた JavaScript の道
時を超えた JavaScript の道時を超えた JavaScript の道
時を超えた JavaScript の道Teppei Sato
 
Hadoop splittable-lzo-compression
Hadoop splittable-lzo-compressionHadoop splittable-lzo-compression
Hadoop splittable-lzo-compressionDaiki Sato
 
Ctb57 with god7
Ctb57 with god7Ctb57 with god7
Ctb57 with god7kingtomo
 
そろそろRStudioの話
そろそろRStudioの話そろそろRStudioの話
そろそろRStudioの話Kazuya Wada
 
グローバル化はなぜ日時処理問題を引き起こすのか
グローバル化はなぜ日時処理問題を引き起こすのかグローバル化はなぜ日時処理問題を引き起こすのか
グローバル化はなぜ日時処理問題を引き起こすのかAtsushi Kambara
 
Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能についてshigeki_ohtsu
 
RelaxCafe@CouchDB break.4
RelaxCafe@CouchDB break.4RelaxCafe@CouchDB break.4
RelaxCafe@CouchDB break.4Yohei Sasaki
 
RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~Kazuya Wada
 

La actualidad más candente (20)

Hadoop輪読会第6章
Hadoop輪読会第6章Hadoop輪読会第6章
Hadoop輪読会第6章
 
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜHUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
 
20220111 SoftwareDesign #32 kitazaki
20220111 SoftwareDesign #32 kitazaki20220111 SoftwareDesign #32 kitazaki
20220111 SoftwareDesign #32 kitazaki
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 
CouchDB JP & BigCouch
CouchDB JP & BigCouchCouchDB JP & BigCouch
CouchDB JP & BigCouch
 
Stream2の基本
Stream2の基本Stream2の基本
Stream2の基本
 
Slub data structure
Slub data structureSlub data structure
Slub data structure
 
Slub alloc and free
Slub alloc and freeSlub alloc and free
Slub alloc and free
 
時を超えた JavaScript の道
時を超えた JavaScript の道時を超えた JavaScript の道
時を超えた JavaScript の道
 
Hadoop splittable-lzo-compression
Hadoop splittable-lzo-compressionHadoop splittable-lzo-compression
Hadoop splittable-lzo-compression
 
20131109 ruby conf2013
20131109 ruby conf201320131109 ruby conf2013
20131109 ruby conf2013
 
Ctb57 with god7
Ctb57 with god7Ctb57 with god7
Ctb57 with god7
 
そろそろRStudioの話
そろそろRStudioの話そろそろRStudioの話
そろそろRStudioの話
 
グローバル化はなぜ日時処理問題を引き起こすのか
グローバル化はなぜ日時処理問題を引き起こすのかグローバル化はなぜ日時処理問題を引き起こすのか
グローバル化はなぜ日時処理問題を引き起こすのか
 
Fabric
FabricFabric
Fabric
 
Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能について
 
Ssaw08 0701
Ssaw08 0701Ssaw08 0701
Ssaw08 0701
 
RelaxCafe@CouchDB break.4
RelaxCafe@CouchDB break.4RelaxCafe@CouchDB break.4
RelaxCafe@CouchDB break.4
 
RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~
 

Destacado

Paseo bosetti
Paseo bosettiPaseo bosetti
Paseo bosettigrupo 12
 
Sustentación proyecto 4
Sustentación proyecto 4Sustentación proyecto 4
Sustentación proyecto 4000Mariana000
 
Ingenier%c3%ada de software
Ingenier%c3%ada de softwareIngenier%c3%ada de software
Ingenier%c3%ada de softwareMarilupe
 
Herramietas pedagogicas en internet
Herramietas pedagogicas en internetHerramietas pedagogicas en internet
Herramietas pedagogicas en internetUni
 
Si no usas internet, estas en nada
Si no usas internet, estas en nadaSi no usas internet, estas en nada
Si no usas internet, estas en nadaECON
 
Resumen estudio informativo nueva linea castelldefels cornellà-zona universit...
Resumen estudio informativo nueva linea castelldefels cornellà-zona universit...Resumen estudio informativo nueva linea castelldefels cornellà-zona universit...
Resumen estudio informativo nueva linea castelldefels cornellà-zona universit...Transports Metropolitans de Barcelona (TMB)
 
Trasnpallets
TrasnpalletsTrasnpallets
Trasnpalletsyetea1417
 

Destacado (8)

Paseo bosetti
Paseo bosettiPaseo bosetti
Paseo bosetti
 
Sustentación proyecto 4
Sustentación proyecto 4Sustentación proyecto 4
Sustentación proyecto 4
 
Ingenier%c3%ada de software
Ingenier%c3%ada de softwareIngenier%c3%ada de software
Ingenier%c3%ada de software
 
Herramietas pedagogicas en internet
Herramietas pedagogicas en internetHerramietas pedagogicas en internet
Herramietas pedagogicas en internet
 
Ind tam-015-doc
Ind tam-015-docInd tam-015-doc
Ind tam-015-doc
 
Si no usas internet, estas en nada
Si no usas internet, estas en nadaSi no usas internet, estas en nada
Si no usas internet, estas en nada
 
Resumen estudio informativo nueva linea castelldefels cornellà-zona universit...
Resumen estudio informativo nueva linea castelldefels cornellà-zona universit...Resumen estudio informativo nueva linea castelldefels cornellà-zona universit...
Resumen estudio informativo nueva linea castelldefels cornellà-zona universit...
 
Trasnpallets
TrasnpalletsTrasnpallets
Trasnpallets
 

Similar a SourceReading 20101020

Data-Intensive Text Processing with MapReduce(Ch1,Ch2)
Data-Intensive Text Processing with MapReduce(Ch1,Ch2)Data-Intensive Text Processing with MapReduce(Ch1,Ch2)
Data-Intensive Text Processing with MapReduce(Ch1,Ch2)Sho Shimauchi
 
ただいまHadoop勉強中
ただいまHadoop勉強中ただいまHadoop勉強中
ただいまHadoop勉強中Satoshi Noto
 
A 2-3ゾウ使いへの第一歩 hadoop on azure 編
A 2-3ゾウ使いへの第一歩 hadoop on azure 編A 2-3ゾウ使いへの第一歩 hadoop on azure 編
A 2-3ゾウ使いへの第一歩 hadoop on azure 編GoAzure
 
ゾウ使いへの第一歩
ゾウ使いへの第一歩ゾウ使いへの第一歩
ゾウ使いへの第一歩Fumito Ito
 
第1回Hadoop関西勉強会参加レポート
第1回Hadoop関西勉強会参加レポート第1回Hadoop関西勉強会参加レポート
第1回Hadoop関西勉強会参加レポートYou&I
 
〜Apache Geode 入門 gfsh によるクラスター構築・管理
〜Apache Geode 入門 gfsh によるクラスター構築・管理〜Apache Geode 入門 gfsh によるクラスター構築・管理
〜Apache Geode 入門 gfsh によるクラスター構築・管理Akihiro Kitada
 
Kuduを調べてみた #dogenzakalt
Kuduを調べてみた #dogenzakaltKuduを調べてみた #dogenzakalt
Kuduを調べてみた #dogenzakaltToshihiro Suzuki
 
Googleの基盤クローン Hadoopについて
Googleの基盤クローン HadoopについてGoogleの基盤クローン Hadoopについて
Googleの基盤クローン HadoopについてKazuki Ohta
 
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話id774
 
Hive on Spark を活用した高速データ分析 - Hadoop / Spark Conference Japan 2016
Hive on Spark を活用した高速データ分析 - Hadoop / Spark Conference Japan 2016Hive on Spark を活用した高速データ分析 - Hadoop / Spark Conference Japan 2016
Hive on Spark を活用した高速データ分析 - Hadoop / Spark Conference Japan 2016Nagato Kasaki
 
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たちATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たちAdvancedTechNight
 

Similar a SourceReading 20101020 (17)

Hadoop事始め
Hadoop事始めHadoop事始め
Hadoop事始め
 
Data-Intensive Text Processing with MapReduce(Ch1,Ch2)
Data-Intensive Text Processing with MapReduce(Ch1,Ch2)Data-Intensive Text Processing with MapReduce(Ch1,Ch2)
Data-Intensive Text Processing with MapReduce(Ch1,Ch2)
 
ただいまHadoop勉強中
ただいまHadoop勉強中ただいまHadoop勉強中
ただいまHadoop勉強中
 
A 2-3ゾウ使いへの第一歩 hadoop on azure 編
A 2-3ゾウ使いへの第一歩 hadoop on azure 編A 2-3ゾウ使いへの第一歩 hadoop on azure 編
A 2-3ゾウ使いへの第一歩 hadoop on azure 編
 
ゾウ使いへの第一歩
ゾウ使いへの第一歩ゾウ使いへの第一歩
ゾウ使いへの第一歩
 
第1回Hadoop関西勉強会参加レポート
第1回Hadoop関西勉強会参加レポート第1回Hadoop関西勉強会参加レポート
第1回Hadoop関西勉強会参加レポート
 
〜Apache Geode 入門 gfsh によるクラスター構築・管理
〜Apache Geode 入門 gfsh によるクラスター構築・管理〜Apache Geode 入門 gfsh によるクラスター構築・管理
〜Apache Geode 入門 gfsh によるクラスター構築・管理
 
MapReduce解説
MapReduce解説MapReduce解説
MapReduce解説
 
Hadoop - OSC2010 Tokyo/Spring
Hadoop - OSC2010 Tokyo/SpringHadoop - OSC2010 Tokyo/Spring
Hadoop - OSC2010 Tokyo/Spring
 
MapReduce/YARNの仕組みを知る
MapReduce/YARNの仕組みを知るMapReduce/YARNの仕組みを知る
MapReduce/YARNの仕組みを知る
 
Kuduを調べてみた #dogenzakalt
Kuduを調べてみた #dogenzakaltKuduを調べてみた #dogenzakalt
Kuduを調べてみた #dogenzakalt
 
Googleの基盤クローン Hadoopについて
Googleの基盤クローン HadoopについてGoogleの基盤クローン Hadoopについて
Googleの基盤クローン Hadoopについて
 
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話
 
Hive on Spark を活用した高速データ分析 - Hadoop / Spark Conference Japan 2016
Hive on Spark を活用した高速データ分析 - Hadoop / Spark Conference Japan 2016Hive on Spark を活用した高速データ分析 - Hadoop / Spark Conference Japan 2016
Hive on Spark を活用した高速データ分析 - Hadoop / Spark Conference Japan 2016
 
Hadoop, NoSQL, GlusterFSの概要
Hadoop, NoSQL, GlusterFSの概要Hadoop, NoSQL, GlusterFSの概要
Hadoop, NoSQL, GlusterFSの概要
 
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たちATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
 
Spark shark
Spark sharkSpark shark
Spark shark
 

Último

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Último (11)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

SourceReading 20101020

  • 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