位置:首页 > Hadoop Gridmix基准测试 >

Hadoop Gridmix基准测试

作者:小牛君|发布时间:2017-03-24

小牛学堂的课程大纲最近进行了再一次升级,并且同时推出Java大数据平台开发班、Python爬虫与数据挖掘班、Spark项目班、Spark大神班、机器学习算法实战班、BI数据分析实战班, 目前这类人群凤毛麟角,导致这个行业的平均薪资极高,为此小牛学堂集合了行业的诸多大牛开设对应班级,为想学习的同学提供机会!
如果想了解详细情况,请联系 今日值班讲师 或者直接加入千人QQ群进行咨询:210992946

以下是本文正文:



1、  概述

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

2、  作业种类

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

(1)三阶段map/reduce作业

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

(key,value)=(5 words,100 words)

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

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

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

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

对应作业:monsterQuery

(2)大规模数据排序,其中key和value长度都是变化的

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

(key,value)=(5-10 words,100-10000 words)

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

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

对应作业:webdataSort

(3)过滤

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

(key,value)=(5-10 words,100-10000 words)

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

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

对应作业:webdataScan

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

输入:500G未压缩文本

(key,value)=(1-10 words,0-200 words)

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

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

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

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

3、  使用方法

(1)编译

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

(2)配置环境变量

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

HADOOP_HOME:hadoop安装路径

HADOOP_VERSION:hadoop版本,如hadoop-0.20.2

HADOOP_CONF_DIR:conf路径,如${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>

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

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

(4)产生数据

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

(5)运行

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

4、  总结

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

5、  参考资料

(1)       Hadoop Gridmix中自带的README.gridmix2文件

(2)       http://hadoop.group.iteye.com/group/topic/10401


了解更多详情请联系 今日值班讲师 或者直接加入千人QQ群进行咨询:210992946

分享到: