Hadoop Gridmix

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/gridmix下,输入“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数量的同一类型作业,比如:

javaSort.smallJobs.numOfJobs
8,2

javaSort.smallJobs.numOfReduces
15,70

上面的例子设置了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

你可能感兴趣的:(hadoop,改写计划与实现)