Performance Hadoop Map reduce-如何加快作业启动/设置

Performance Hadoop Map reduce-如何加快作业启动/设置,performance,hadoop,mapreduce,jobs,launch-time,Performance,Hadoop,Mapreduce,Jobs,Launch Time,我正在使用mongo hadoop适配器运行map/reduce作业。除了启动时间和工作所花费的时间外,一切都很好。即使数据集非常小,映射时间为13秒,缩减时间为12秒。事实上,我已经更改了mapred-site.xml和core-site.xml中的设置。但是map/reduce所花费的时间似乎是恒定的。有什么办法可以减少吗。 我还从中探索了优化的hadoop发行版。他们使用工作人员池来更快地启动/设置作业。由于hanborq发行版不太活跃,其他地方是否有类似的发行版。它是在4个月前更新的,是

我正在使用mongo hadoop适配器运行map/reduce作业。除了启动时间和工作所花费的时间外,一切都很好。即使数据集非常小,映射时间为13秒,缩减时间为12秒。事实上,我已经更改了mapred-site.xml和core-site.xml中的设置。但是map/reduce所花费的时间似乎是恒定的。有什么办法可以减少吗。 我还从中探索了优化的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>
<property>
          <name>io.sort.mb</name>
          <value>300</value>
    </property>
<property>
    <name>io.sort.factor</name>
    <value>100</value>
</property>

mapred.child.java.opts
-Xms1g
mapred.sort.avoidation
真的
mapred.job.reuse.jvm.num.tasks
-1
mapreduce.tasktracker.outofband.heartbeat
真的
mapred.compress.map.output
假的
core-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>
<property>
          <name>io.sort.mb</name>
          <value>300</value>
    </property>
<property>
    <name>io.sort.factor</name>
    <value>100</value>
</property>

io.sort.mb
300
排序因子
100

任何帮助都将不胜感激。提前感谢。

因为心跳会导致部分延迟。任务跟踪器向作业跟踪器发送心跳信号,让它知道它们还活着,但作为心跳信号的一部分,它们还宣布它们有多少打开的映射和减少的插槽。作为回应,JT为TT分配工作。这意味着,当您提交作业时,TTs只能以心跳的速度(每2-4秒,给定或获取一次)获取任务。此外,JT(默认情况下)在每个心跳期间仅分配一个任务。这意味着,如果你只有一个TT,你只能每2-4秒分配一个任务,即使TT有额外的容量

因此,您可以:

  • 缩短两次心跳之间的持续时间

  • 更改TaskTracker中每个心跳的任务计划程序的工作方式
    mapred.fairscheduler.assignmultiple


  • 因为心跳会导致部分延迟。任务跟踪器向作业跟踪器发送心跳信号,让它知道它们还活着,但作为心跳信号的一部分,它们还宣布它们有多少打开的映射和减少的插槽。作为回应,JT为TT分配工作。这意味着,当您提交作业时,TTs只能以心跳的速度(每2-4秒,给定或获取一次)获取任务。此外,JT(默认情况下)在每个心跳期间仅分配一个任务。这意味着,如果你只有一个TT,你只能每2-4秒分配一个任务,即使TT有额外的容量

    因此,您可以:

  • 缩短两次心跳之间的持续时间

  • 更改TaskTracker中每个心跳的任务计划程序的工作方式
    mapred.fairscheduler.assignmultiple


  • 为什么不使用mongodbs内部mapreduce?Hadoop真的不适用于这种实时的东西。我也认为最近没有办法减少Hadoop的工作。我读了很多关于MongoDB内部m/r效率低下的文章,例如:“Mongo M/R仅在您需要简单的分组和筛选时才有帮助,而不是在map和reduce之间进行大量的混洗。Hadoop的M/R能够利用所有内核,而MongoDB是“单线程”等。我的代码还需要处理非常大的数据集,这些数据集大部分将通过Hadoop M/R离线处理。但是在运行时,每当新用户登录时,我需要在几秒钟内将他的数据与数百万其他用户的数据进行匹配。(用例类似于约会网站的用例)。任何关于解决方案的想法都是非常受欢迎的。如果你在几秒钟内需要什么,我认为没有地图/减少框架是一个很好的选择。你是否考虑过在mongo中对你的模式进行非规范化,以允许以交互方式运行特定的查询(即通过查找,而不是地图/减少)?显然,这是一个与此不同的问题,但如果您没有考虑,我认为您应该考虑。感谢Asya。我正在尝试您的建议。但是,由于我是MongoDB的新手,我刚刚意识到group by或聚合函数不能用于大小超过10K的数据集。这太令人失望了。切分h将达到什么程度elp?你为什么不使用mongodbs内部mapreduce?Hadoop真的不适用于这种实时的东西。我也认为最近没有办法减少Hadoop的工作。我读了很多关于mongodbs内部m/r效率低下的文章,例如:Mongo M/R仅在您需要简单的分组和过滤时才有帮助,而不是在map和reduce之间进行大量的混洗。Hadoop的M/R能够利用所有内核,而MongoDB是单线程的“等等。我的代码还需要处理非常大的数据集,这些数据集大部分将通过hadoops M/R离线处理。然而,在运行时,每当新用户登录时,我需要在几秒钟内将他的数据与数百万其他用户的数据进行匹配。(使用案例类似于约会网站)。任何关于解决方案的想法都是非常受欢迎的。如果您在几秒钟内需要一些东西,我认为没有映射/减少框架是一个很好的选择。您是否考虑过在mongo中对您的架构进行非规范化,以允许以交互方式运行特定的查询(即通过查找,而不是映射/减少)?显然,这是一个与此不同的问题,但如果您没有考虑,我认为您应该考虑。感谢Asya。我正在尝试您的建议。但是,由于我是MongoDB的新手,我刚刚意识到group by或聚合函数不能用于大小超过10K的数据集。这太令人失望了。切分h将达到什么程度elp?