1

私はmongo-hadoopアダプターを使用してmap/reduceジョブを実行しています。起動時間とジョブにかかる時間を除いて、すべて問題ありません。データセットが非常に小さい場合でも、マップ時間は13秒、削減時間は12秒です。実際、mapred-site.xmlとcore-site.xmlの設定を変更しました。しかし、map/reduceにかかる時間は一定のようです。私がそれを減らすことができる方法はありますか?また、 hanborqから最適化されたHadoopディストリビューションについても調べました。ワーカープールを使用して、ジョブの起動/セットアップを高速化します。hanborqディストリビューションはあまりアクティブではないため、他の場所で利用可能な同等のものはありますか。4か月前に更新され、古いバージョンのHadoopに基づいて構築されています。

私の設定のいくつかは次のとおりです:mapred-site.xml:

<property>
    <name>mapred.child.java.opts</name>
    <value>-Xms1g</value>
</property>
<property>
    <name>mapred.sort.avoidance</name>
    <value>true</value>
</property>
 <property>
      <name>mapred.job.reuse.jvm.num.tasks</name>
          <value>-1</value>
 </property>
<property>
     <name>mapreduce.tasktracker.outofband.heartbeat</name>
     <value>true</value>
</property>
   <property>
       <name>mapred.compress.map.output</name>
       <value>false</value>
   </property>

core-site.xml:

<property>
          <name>io.sort.mb</name>
          <value>300</value>
    </property>
<property>
    <name>io.sort.factor</name>
    <value>100</value>
</property>

どんな助けでも大歓迎です。前もって感謝します。

4

1 に答える 1

1

ハートビートが遅延の一部を引き起こすため。タスク トラッカーはジョブ トラッカーにハートビートを送り、自分が生きていることを知らせますが、そのハートビートの一部として、開いているマップ スロットと削減スロットの数も通知します。それに応じて、JT は TT が実行する作業を割り当てます。つまり、ジョブを送信すると、TT はハートビートと同じ速さ (ギブまたはテイク) でのみタスクを取得します。さらに、JT (デフォルト) は、各ハートビート中に 1つのタスクのみを割り当てます。つまり、TT が 1 つしかない場合、TT に追加の容量があっても、2 ~ 4 秒ごとに 1 つのタスクしか割り当てることができません。

だからあなたはできる:

  1. 2 つの心拍間の時間を短縮します。

  2. TaskTracker からの各ハートビートに対するタスク スケジューラの動作方法を変更します。mapred.fairscheduler.assignmultiple

于 2013-04-18T07:01:49.787 に答える