MapReduceの投機的実行の発動条件

CDH3とCDH4.1.2で投機的実行がいつ発生するかを調査した。メソッド名が変更となっているので注意が必要。

CDH3
org/apache/hadoop/mapred/TaskInProgress.java

/**
* Return whether the TIP has a speculative task to run. We
* only launch a speculative task if the current TIP is really
* far behind, and has been behind for a non-trivial amount of
* time.
*/
boolean hasSpeculativeTask(long currentTime, double averageProgress) {
//
// REMIND – mjc – these constants should be examined
// in more depth eventually…
//

if (!skipping && activeTasks.size() <= MAX_TASK_EXECS && //投機的実行が有効 かつ アクティブなタスクの数が1以下
(averageProgress – progress >= SPECULATIVE_GAP) && //平均の進行状況から進行状況を引いた値が0.2(20%)以上(つまり他の平均から20%以上遅れている)
(currentTime – startTime >= SPECULATIVE_LAG)    //開始してから60秒以上経過している
&& completes == 0 && !isOnlyCommitPending()) {   // 完了していない
return true;
}
return false;
}

CDH4.1.2
org/apache/hadoop/mapred/TaskInProgress.java
/**
* Can this task be speculated? This requires that it isn’t done or almost
* done and that it isn’t already being speculatively executed.
*
* Added for use by queue scheduling algorithms.
* @param currentTime
*/
boolean canBeSpeculated(long currentTime) {
DataStatistics taskStats = job.getRunningTaskStatistics(isMapTask());
if (LOG.isDebugEnabled()) {
LOG.debug(“activeTasks.size(): ” + activeTasks.size() + ” ”
+ activeTasks.firstKey() + ” task’s progressrate: ” +
getCurrentProgressRate(currentTime) +
” taskStats : ” + taskStats);
}
return (!skipping && isRunnable() && isRunning() &&  //基本的にCDH3と同じ
activeTasks.size() <= MAX_TASK_EXECS &&    //CDH3と同じ
currentTime – lastDispatchTime >= SPECULATIVE_LAG &&  //CDH3と同じ
completes == 0 && !isOnlyCommitPending() &&   //CDH3と同じ
(taskStats.mean() – getCurrentProgressRate(currentTime) >
taskStats.std() * job.getSlowTaskThreshold()));  ////追加された
}

taskStats.mean()は統計情報(sum/count)を行っているが、今ひとつわからない。調査中。ソースコードが複雑。
最後のSlowTaskThresholdはmapred-site.xmlで設定できるプロパティ。
http://archive.cloudera.com/cdh4/cdh/4/hadoop/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml
(mapreduce.job.speculative.slowtaskthreshold:デフォルトは1.0(つまり100%)。が、パラメータの説明がない。。。)

調査したところ、この論文に細かい説明が記述されている。
Improving MapReduce Performance in Heterogeneous Environments (pdf)

SlowTaskThreshold is the percentile of progress rate below which a task must lie to be considered for speculation (e.g. slowest 5%)

Posted in Uncategorized

続)Cloudera Impala 情報 (13)

Impala情報 2013/1/21版

ニュース

Impalaのセッションに登壇します!インフルエンザにかかってしまい、同僚の小林大輔氏に変わっていただきます。スライドは追って公開される予定。-> 公開されました 2013/1/22

Impala 0.4リリース

Impala 0.4の仮想マシンイメージも公開されています。先週まではver0.1のイメージでした。変更されていることが強調されていないのですが、ひっそりと更新されています。バグも枯れてきていますので、是非こちらで試して下さい。

Posted in Uncategorized

続)Cloudera Impala 情報 (11)

Impala情報 2013/1/9版

ニュース

雑記

Hadoop Conference Japan 2013 Winter が2013/1/21に開催されます。
登録ページ

このイベントでImpalaの概要について話をさせていただくことになりました。ImapalaやHadoopを知らない方を対象としていますので、細かい技術に興味がある方は上記のWebinarなどをご覧下さい 🙂