hadoop基准测试

来源:互联网 发布:淘宝 宝贝 下架时 编辑:程序博客网 时间:2024/04/29 02:59

Hadoop 集群基准测试

一、测试条件

集群完全安装配置后,应立即开始基准测试。基准测试时集群里不应该运行其他一切任务。

二、测试目标

1. 硬盘故障:新系统最常见的故障。可以通过运行高强度的IO基准测试程序集中测试。例如TestDFSIO

2. MapReduce的性能 

三、测试方法

1TestDFSIO基准测试HDFS 

测试顺序应该是先写测试后读测试

写测试:

使用10map任务写10个文件,每个500m

hadoop jar $HADOOP_HOME/hadoop-test-*.jar TestDFSIO -write -nrFiles 10  -fileSize 1000

在运行的最后,结果被写入控制台并记录到当前路径TestDFSIO_results.log 。

数据默认写入 /benchmarks/TestDFSIO目录下 

读测试:

hadoop jar $HADOOP_HOME/hadoop-test-*.jar TestDFSIO -read-nrFiles 10  -fileSize 1000

清除测试数据:

hadoop jar $HADOOP_HOME/hadoop-test-*.jar TestDFSIO -clean

2、用sort排序测试MapReduce 

Hadoop自带一个部分排序的程序。这对测试整个MapReduce系统很有用,因为整个输入数据集都会通过洗牌传输至reducer。一共三个步骤:生成一些随机的数据,执行排序,然后验证结果。
       首先我们通过使用RandomWriter生成一些随机的数据。它以每个节点10map的方式运行一个MapReduce作业,并且每一个map生成近似10GB的随机二进制数据,带有不同长度的键和值。

hadoop jar hadoop-examples-0.20.2-cdh3u1.jar randomwriter random-data

3、TeraSort 基准测试实验 

1TB排序通常用于衡量分布式数据处理框架的数据处理能力。TerasortHadoop中的的一个排序作业,在2008年,Hadoop1TB排序基准评估中赢得第一名,耗时209秒。 

首先执行 teragen 生成数据 

写入1000000 行,每行100字节。格式:

(10 bytes key) (10 bytes rowid) (78 bytes filler) \r \n

.t^#\|v$2\         0AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEEEEEEEEEFFFFFFFFFFGGGGGGGGGGHHHHHHHH

hadoop jar hadoop-examples-0.20.2-cdh3u1.jar teragen 1000000 terasort/1000000-input 

查看数据

hadoop fs -ls  /usr/hadoop/terasort/1000000-input 

hadoop jar hadoop-*-examples.jar terasort in-dir out-dir

排序

hadoop jar hadoop-examples-0.20.2-cdh3u1.jar terasort terasort/1000000-input  terasort/1000000-output 

查看排序

hadoop fs -ls terasort/1000000-output 

4、 Gridmix 基准测试

Hadoop Gridmix是针对hadoop系统的基准测试程序。它具备评测大规模数据处理系统所需的各个功能模块,包括:产生数据,生成并提交作业,统计作业完成时间等。本文主要介绍了Hadoop 0.20.2中自带的Gridmix2基准测试程序(位于\src\benchmarks目录下)的设计原理及使用方法。

作业种类

Gridmix通过模拟hadoop cluster中的实际负载来评测hadoop性能。它首先根据用户设定的参数生成大量数据和一批作业,然后同时提交这些作业(批处理),最后统计出这批作业的运行时间。为了尽可能地模拟现实中的各种作业,Gridmix自带了各种具有代表性的作业,分别为streamSortjavaSortwebdataScancombiner(这个作业只是对结果进行了压缩),monsterQuerywebdataSort,可以将这些作业分为以下几类:

1)       三阶段map/reduce作业

输入:500G压缩(等价于2T未压缩的)SequenceFile

key,value=5 words100 words

计算1map保留10%的数据,reduce保留40%数据,

计算2map保留10%的数据,reduce保留40%数据,数据来自[计算1]的输出

计算3map保留10%的数据,reduce保留40%数据,数据来自[计算2]的输出

动机:很多作业负载是流水式 map/reduce 作业,包括pig

对应作业:monsterQuery

2)       大规模数据排序,其中keyvalue长度都是变化的

输入:500G压缩(等价于2T未压缩的)SequenceFile

key,value=5-10 words100-10000 words

计算:map保留100%的数据,reduce保留100%数据

动机:处理大规模的压缩数据是非常常见的

对应作业:webdataSort

3)       过滤

输入:500G压缩(等价于2T未压缩的)SequenceFile

key,value=5-10 words100-10000 words

计算:map保留0.2%的数据,reduce保留5%数据

动机:对大数据集进行过滤是很常见的

对应作业:webdataScan

4)       API 文本排序(直接调用一些API进行排序)

输入:500G未压缩文本

key,value=1-10 words0-200 words

计算:map保留100%的数据,reduce保留100%数据

动机:map/reduce直接调用库函数进行排序

对应作业:streamSortjavaSort,其中streamSort使用了shell命令cat作为mapperreducer(这并不是排序,只是简单的进行逐行扫描),javaSort调用了java中的API进行排序。

Gridmix生成的一个基准负载包含不同数量的各种类型的作业,且每种作业处理的数据量也不同。用户可以在一个xml文件中配置作业数量和数据量,Gridmix会根据这个配置文件构造相应的作业,提交到集群中并监控它们的执行情况直到所有作业完成。

使用方法

1)       编译

/home/hadoop/hadoop_install/src/benchmarks/gridmix2下,输入“ant”,会在build目录下生成gridmix.jar文件,把它copygridmix目录下。

2)       配置环境变量

修改脚本gridmix-env-2中的以下几个变量值:

HADOOP_HOMEhadoop安装路径

HADOOP_VERSIONhadoop版本,如hadoop-0.20.2

HADOOP_CONF_DIRconf路径,如${HADOOP_HOME}/conf

USE_REAL_DATA:是否使用大的数据集(2TB),如果设为false,缺省数据量是2G。用户可以在generateGridmix2Data.sh根据需要配置。

3)       配置作业信息

Gridmix提供了一个缺省的gridmix_conf.xml,用户可以根据自己的需要作修改。修改的内容可以是:作业的类型和数量,作业处理的数据量,reduce task数目,是否对数据结果进行压缩等。需要注意的是,用户可以配置多个不同reduce数量的同一类型作业,比如:

<property>

<name>javaSort.smallJobs.numOfJobs</name>

<value>8,2</value>

<description></description>

</property>

<property>

<name>javaSort.smallJobs.numOfReduces</name>

<value>15,70</value>

<description></description>

</property>

上面的例子设置了10java sort小作业,其中8个每个带有15reduce task,另外2个每个带70reduce task

Gridmix中,每种作业有大中小三种类型,小作业只有3map task(只处理{part-00000,part-00001,part-00002}三块数据);中作业的task 数目与数据总量有关,它处理与正则表达式{part-000*0,part-000*1,part-000*2}匹配的数据块,比如有10个数据块,分别是part-00000part-00001part-00002…part-0009,则中作业只会处理前三块;大作业会处理所有数据。

4)       产生数据

使用generateGridmix2Data.sh脚本产生数据,用户可以根据需要配置数据量。在Gridmix中,数据压缩率是4x

5)       运行

首先确保hadoop集群已经启动,然后运行./rungridmix_2,该脚本会创建start.out记录作业运行开始时间,作业结束时,创建end.out记录完成时间。

总结

Hadoop Gridmix由两个版本,本文讨论的是第二个版本,即Gridmix2.Gridmix2具有很好的扩展性,用户可以很容易地添加其它作业,同时它能很好的模拟批处理情况。但缺点是它不能模拟随机提交作业(比如按泊松分布进行提交)的应用场景。

原创粉丝点击