hadoop性能建模

rqqzpn5f  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(372)

我正在研究hadoop性能建模。hadoop有200多个参数,所以手动设置它们是不可能的。因此,我们经常使用默认参数值运行hadoop作业(比如使用默认值io.sort.mb、io.sort.record.percent、mapred.output.compress等)。但使用默认参数值会给我们带来次优的性能。希罗多德在这方面做了一些工作(http://www.cs.duke.edu/starfish/files/vldb11-job-optimization.pdf)提高绩效。但我对他们的工作有以下怀疑--
在mapreduce作业的所有阶段(读取、Map、收集等),它们在作业开始时(根据数据的比例假设)固定参数值。通过改变特定节点的hadoop配置日志文件,可以在运行时根据运行时环境(如集群配置、底层文件系统等)为每个阶段设置不同的参数值,从而从一个节点获得最佳性能吗?
他们使用的是hadoop核心的白盒模型,他们是否仍然适用于当前的hadoop(http://arxiv.org/pdf/1106.0940.pdf) ?

ws51t4hk

ws51t4hk1#

不,无法动态更改每个节点每个作业的mapreduce参数。

配置节点集

相反,您可以在配置文件中静态地更改每个节点的配置参数(通常位于 /etc/hadoop/conf ),这样您就可以使用不同的h/w配置最大限度地利用集群。
示例:假设您有20个具有不同硬件配置的工作节点,例如:
10个,配置128gb ram,24核
10个64gb ram,12核
在这种情况下,您可能希望配置每个相同的服务器以充分利用硬件,例如,您可能希望在具有更多ram和内核的工作节点上运行更多子任务(Map器和还原器),例如:
具有128gb ram、24核=>36个工作任务(Map器+还原器)的节点,每个工作任务的jvm堆大约为3gb。
具有64gb ram、12核=>18个工作任务(Map器+还原器)的节点,每个工作任务的jvm堆大约为3gb。
因此,您需要使用适当的参数分别配置节点集。

使用toolrunner将配置参数动态传递给作业:

此外,您可以动态更改每个作业的mapreduce作业参数,但这些参数将应用于整个集群,而不仅仅应用于一组节点。提供mapreduce作业驱动程序扩展toolrunner。
toolrunner允许您解析通用hadoop命令行参数。您可以使用 -D property.name=property.value .
几乎可以将所有hadoop参数动态地传递给作业。但最常见的动态传递给作业的mapreduce配置参数是:
mapreduce.task.io.sort.mb mapreduce.map.speculative mapreduce.job.reduces mapreduce.task.io.sort.factor mapreduce.map.output.compress mapreduce.map.outout.compress.codec mapreduce.reduce.memory.mb mapreduce.map.memory.mb 下面是一个例子 terasort 每个作业动态传递大量参数的作业:

hadoop jar hadoop-mapreduce-examples.jar tearsort \
    
  -Ddfs.replication=1 -Dmapreduce.task.io.sort.mb=500 \
    
  -Dmapreduce.map.sort.splill.percent=0.9 \
    
  -Dmapreduce.reduce.shuffle.parallelcopies=10 \
    
  -Dmapreduce.reduce.shuffle.memory.limit.percent=0.1 \
    
  -Dmapreduce.reduce.shuffle.input.buffer.percent=0.95 \
    
  -Dmapreduce.reduce.input.buffer.percent=0.95 \
    
  -Dmapreduce.reduce.shuffle.merge.percent=0.95 \
    
  -Dmapreduce.reduce.merge.inmem.threshold=0 \
    
  -Dmapreduce.job.speculative.speculativecap=0.05 \
    
  -Dmapreduce.map.speculative=false \
    
  -Dmapreduce.map.reduce.speculative=false \

  -Dmapreduce.job.jvm.numtasks=-1 \
  -Dmapreduce.job.reduces=84 \

  -Dmapreduce.task.io.sort.factor=100 \
    
  -Dmapreduce.map.output.compress=true \

  -Dmapreduce.map.outout.compress.codec=\
        
    org.apache.hadoop.io.compress.SnappyCodec \
    
  -Dmapreduce.job.reduce.slowstart.completedmaps=0.4 \
    
  -Dmapreduce.reduce.merge.memtomem.enabled=fasle \
    
  -Dmapreduce.reduce.memory.totalbytes=12348030976 \
    
  -Dmapreduce.reduce.memory.mb=12288 \

  -Dmapreduce.reduce.java.opts=“-Xms11776m -Xmx11776m \
      
    -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode \
      
    -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=4” \

  -Dmapreduce.map.memory.mb=4096 \

  -Dmapreduce.map.java.opts=“-Xmx1356m” \
    
  /terasort-input /terasort-output

相关问题