Hadoop benchmark测试及调参

Benchmark Job(hadoop测试)

    在对本集群测试的过程中,我们用到了hadoop自带的测试函数,其中主要包括TeragenTerasort两个方法。

Teragen

    该方法是用来生成随机数据的,其触发指令为:

                 $hadoop jarxxx/xxx/benchmark.jar teragen -Dmapred.map.tasks=5  100000input_path 其中:

·      teragen:为触发的方法名称

·      -Dmapred.map.tasks:用来设置map任务的个数,默认值为2,即有两个map

·      100000:代表所要生成数据的行数,其中生成的数据形式为<key, cowid,value>的形式,一行数据即为一个<key, cowid, value>大小为100字节

·      input_path:指定存放在hdfs中的位置

Terasort

    该方法是用来对数据进行排序的,它可以用来对hadoop的数据处理能力进行有效的测试,其触发指令为:

                 $hadoop jarxxx/xxx/benchmark.jar terasort -Dmapred.reduce.tasks=5  input_pathoutput_path 其中:

·      terasort:为触发的方法名称

·      -Dmapred.reduce.tasks:用来设置reduce任务的个数,默认值为1,即有一个reduce

·      input_path:指定所要排序的数据在hdfs中存放的位置

·      output_path:指定对排序后的数据在hdfs中的存放位置

    TeraSort排序是对key值进行排序,该方法主要的流程是:先进行采样操作,根据采样的结果我们估算出数据的大致分布,然后我们将 sample[i-1]<= key < sample[i] 的数据传送到reduce i并对数据进行排序,这样可以保证reduce i-1中的所有数据都小于reduce i中的数据。

     自动化执行脚本:

import os
import sys
 
#参数的声明以及赋值主要包括:jar包路径,生成数据的文件名,排序后数据的文件名,生成数据数量,map,reduce的个数
path = '/home/users/laipeng.han/workjar/'
jar_path = 'benchmark.jar'
first_class = 'teragen'
last_class = 'terasort'
input_path = ''
output_path = ''
num = '0'
map_num = '2'
reduce_num = '1'
 
#修改路径,路径指向jar包运行位置
os.chdir(path)
 
#判断输入的参数是否正确
if len(sys.argv) < 6:
 print '-----------------------------------------------'
 print 'Some of the necessary parameters:'
 print 'input_path(*):input the path to generate data'
 print 'output_path(*):output the sort result path'
 print 'num(*):the number of data to generate'
 print 'map_num(*):the map number ingenerating'
 print 'reduce_num(*):the reduce number in sorting'
 print '-----------------------------------------------'
 exit(0)
input_path = sys.argv[1]
output_path = sys.argv[2]
num = sys.argv[3]
map_num = sys.argv[4]
reduce_num = sys.argv[5]
 
#指令
print 'start generate data'
cmd_gen = 'hadoop jar' +' '+ jar_path +' '+ first_class +' '+ '-Dmapred.map.tasks=' + map_num +' '+ num +' '+ input_path
cmd_sort = 'yarn jar' +' '+ jar_path +' '+ last_class +' '+ '-Dmapred.reduce.tasks=' + reduce_num +' '+ input_path +' '+ output_path
 
  
#执行指令
os.system(cmd_gen)
print 'start sort data'
os.system(cmd_sort)

重要参数详解

Yarn

参数

 

含义

配置及说明

Node Memory

分给每个node节点中所有container的内存

集群中设置为总内存大小的80%,这是因为该节点主要做MR计算,所以分配的内存可以多一些,其他的需要分配给HDFSHbase等其他部分

Container Memory

每个节点中的每个container的内存大小

集群中设置为最小格为3.5G,最大为100.25G(也就是Node Memory的大小),当一个Map 所需的内存大于3.5G的时候,集群会分配多个最小的格,直到满足要求,eg:一个map需要10G,那么集群就会分配33.5G的内存格,只要不超过最大值即可

Node CPU

分给每一个node节点的Cpu个数(物理内核的个数)

集群中设置的总内存的大小为85%,和内存的大小对应,这是因为该节点主要做MR计算,所以CPU核数可以多一些,其他的需要分配给HDFSHbase等其他部分

Node Vcore

每一个node节点上的虚拟内核的个数

集群中设置的Vcore的个数为14,这是因为每一个map/reduce任务对应1Vcore,一个node节点内存最大为100.25G,一般情况下一个map/reduce任务占用7G,所以一个node节点最多可以启动起来14map/reduce任务,所以这里Vcore设置为14

Container CPU

每个节点中的每个containerVcore

集群中设置最小为1Vcore,最多为14个,也就是说一个container中最少分配一个Vcore,也就是1map/reduce任务,最多分配14Vcore,也就是14map/reduce任务。


MapReduce

参数

含义

配置及说明

Map memory

每一个Map任务所需要的内存个数

集群中设置为5G(这是一般情况,在这种情况下并行度最高),但是由于5 > 3.5,所以在运行的时候集群会给每一个Map任务分配两个最小内存格满足要求,即7G

Reduce memory

每一个Reduce任务所需要的内存个数

配置和解释同上

 

     提示: 如果一个MapReduce任务大于7G的时候,可以在提交任务的时候使用如下指令:

             –D mapreduce.map(reduce).memory.mb=10240(mapreduce所需内存的大小即可)


   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值