Hadoop benchmark测试及调参
2017-06-11 20:41
134 查看
Benchmark Job(hadoop测试)
在对本集群测试的过程中,我们用到了hadoop自带的测试函数,其中主要包括Teragen和Terasort两个方法。
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)
MapReduce
提示:
如果一个Map或Reduce任务大于7G的时候,可以在提交任务的时候使用如下指令:
–D mapreduce.map(reduce).memory.mb=10240(即map或reduce所需内存的大小即可)
在对本集群测试的过程中,我们用到了hadoop自带的测试函数,其中主要包括Teragen和Terasort两个方法。
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计算,所以分配的内存可以多一些,其他的需要分配给HDFS、Hbase等其他部分 |
Container Memory | 每个节点中的每个container的内存大小 | 集群中设置为最小格为3.5G,最大为100.25G(也就是Node Memory的大小),当一个Map 所需的内存大于3.5G的时候,集群会分配多个最小的格,直到满足要求,eg:一个map需要10G,那么集群就会分配3个3.5G的内存格,只要不超过最大值即可 |
Node CPU | 分给每一个node节点的Cpu个数(物理内核的个数) | 集群中设置的总内存的大小为85%,和内存的大小对应,这是因为该节点主要做MR计算,所以CPU核数可以多一些,其他的需要分配给HDFS、Hbase等其他部分 |
Node Vcore | 每一个node节点上的虚拟内核的个数 | 集群中设置的Vcore的个数为14,这是因为每一个map/reduce任务对应1个Vcore,一个node节点内存最大为100.25G,一般情况下一个map/reduce任务占用7G,所以一个node节点最多可以启动起来14个map/reduce任务,所以这里Vcore设置为14个 |
Container CPU | 每个节点中的每个container的Vcore | 集群中设置最小为1个Vcore,最多为14个,也就是说一个container中最少分配一个Vcore,也就是1个map/reduce任务,最多分配14个Vcore,也就是14个map/reduce任务。 |
参数 | 含义 | 配置及说明 |
Map memory | 每一个Map任务所需要的内存个数 | 集群中设置为5G(这是一般情况,在这种情况下并行度最高),但是由于5 > 3.5,所以在运行的时候集群会给每一个Map任务分配两个最小内存格满足要求,即7G |
Reduce memory | 每一个Reduce任务所需要的内存个数 | 配置和解释同上 |
提示:
如果一个Map或Reduce任务大于7G的时候,可以在提交任务的时候使用如下指令:
–D mapreduce.map(reduce).memory.mb=10240(即map或reduce所需内存的大小即可)
相关文章推荐
- Hadoop的benchmark测试IO性能测试TestDFSIO测试时java.io.FileNotFoundException: TestDFSIO_results.log (Permission
- 转载:Hadoop自带benchmark运行与测试
- HDFS列式存储Parquet与行式存储(Avro)性能测试-Benchmark(hadoop, Spark, Scala)
- hadoop 2.4 的测试工具之name node benchmark 异常处理=> exceptions: 1000
- TeraSort实验--测试Map和Reduce Task数量对Hadoop性能的影响
- Spark学习之Hadoop安装与测试
- Hadoop单机模式测试
- Win10不需要Cygwin搭建大数据测试环境(1)-Hadoop
- Hadoop2.2.0版本多节点集群安装及测试
- hadoop伪分布式环境搭建、测试与配置详解
- hbase-server-0.98.6-hadoop2.jar下方法测试失败
- 使用Apache Benchmark给自己的网站进行测试
- hadoop 测试出现Server IPC version 9 cannot communicate with client version 4
- hadoop伪分布式安装及测试(2.7.1)
- Hadoop基准测试工具
- 测试眼里的Hadoop系列 之Terasort
- hadoop学习之hadoop集群功能简单测试验证
- <转>hadoop学习之hadoop集群功能简单测试验证
- Kafka设计解析(五)- Kafka性能测试方法及Benchmark报告
- Hadoop4.2HDFS测试报告之三