hadoop的自带的测试工具有哪些

小小  2016-07-08

这些工具的简单简绍,使用步骤。
190°|1883 人围观|2 条回复 |举报

邓智群  2016-07-16

,这个问题看样比较高深,接触这个的应该比较少


小小  2017-01-03

(一)Hadoop生态圈 Hadoop生态圈的基石有两个,一个是HDFS文件系统,一个是MR编程框架。 Hadoop 最底部是HDFS文件系统,它存储Hadoop集群中所有存储节点上的文件。HDFS的上一层是MapReduce引擎,该引擎由JobTrackers和TaskTrackers组成。HDFS默认的最基本的存储单位是64M的数据块。 在最上层有 4 个独立的实体,即客户端、JobTracker、TaskTracker 和分布式文件系统。客户端提交 MapReduce 作业;JobTracker 协调作业的运行;JobTracker 是一个 Java 应用程序,它的主类是 JobTracker;TaskTracker 运行作业划分后的任务,TaskTracker 也是一个 Java 应用程序,它的主类是 TaskTracker。Hadoop 运行 MapReduce 作业的步骤主要包括提交作业、初始化作业、分配任务、执行任务、更新进度和状态、完成作业等 6 个步骤。 1.对于一个整体的分布式系统来说,HDFS包含两个重要角色,一个是中心节点Namenode,一个是数据节点Datanode。其中Namenode用来记录文件目录结构树,即元数据fsimag,和各种修改操作信息,即editlog。而Datanode则是数据真正存放的地方,Namenode获得RPC请求后会将这些请求根据特定算法分发到一些Datanode上。 2. 由于存在单点结构,因此Namenode机器的性能必须远超Datanode机器,因为其负载了所有RPC访问请求,每个RPC请求引起的查询、IO、audit等动作都会消耗系统资源,Namenode的性能将会极大影响HDFS文件系统的整体性能。而相对来说Datanode的性能就不是那么重要了,当然这也区分具体的应用,例如对于HBase来说,由于Regionserver和Datanode同处于一台机器,彼此之间存在数据的交换,因此与Datanode的IO性能是有关联的,性能好坏成正比关系。 (二)HDFS性能测试常用工具 例如Terasort,Slive,DFSIO从文件系统角度出发的性能测试工具,大多不离吞吐率这个指标。转化到HDFS这边,则是rpc次数、opt次数、sync时长这样的指标信息,然而Terasort是个异类。这个工具不仅考验文件系统的性能,更是对MR自动排序能力的一种检测。 hadoop的常用性能工具的简单介绍 DFSCIOTest 测试libhdfs中的分布式I/O的基准。Libhdfs是一个为C/C++应用程序提供HDFS文件服务的共享库。 DistributedFSCheck 文件系统一致性的分布式检查。 TestDFSIO 分布式的I/O基准。这个测试。输入参数:hadoop jar hadoop-0.20.2-test.jar TestDFSIO -write -nrFiles 10 -fileSize 1000,结果在同级目录下会有一个TestDFSIO_results.log,查看就可以了。完事记得执行hadoop jar hadoop-0.20.2-test.jar TestDFSIO -clean clustertestdfs 对分布式文件系统的伪分布式测试。 dfsthroughput 测量HDFS的吞吐量。 filebench SequenceFileInputFormat和SequenceFileOutputFormat的基准,这包含BLOCK压缩,RECORD压缩和非压缩的情况。TextInputFormat和TextOutputFormat的基准,包括压缩和非压缩的情况。 loadgen 通用的MapReduce加载产生器。 mapredtest MapReduce作业的测试和检测。 mrbench 创建大量小作业的MapReduce基准。 nnbench NameNode的性能基准。 testarrayfile 对有键值对的文本文件的测试。 testbigmapoutput 这是一个MapReduce作业,www.linuxidc.com它用来处理不可分割的大文件来产生一个标志MapReduce作业。 testfilesystem 文件系统读写测试。 testipc Hadoop核心的进程间交互测试。 testmapredsort 用于校验MapReduce框架的排序的程序。 testrpc 对远程过程调用的测试。 testsequencefile 对包含二进制键值对的文本文件的测试。 testsequencefileinputformat 对序列文件输入格式的测试。 testsetfile 对包含二进制键值对文本文件的测试。 testtextinputformat 对文本输入格式的测试。 threadedmapbench 对比输出一个排序块的Map作业和输出多个排序块的Map作业的性能。 1.Tasort位于hadoop的example包中, 是SortBenchmark()排序比赛使用的标准工具,它使用了Hadoop默认的IdentityMapper和IdentityReducer,利用MR自有的sort机制来保证每个partition内数据是有序的。 我们使用Terasort,判断HDFS文件系统(其实还包含了MR)性能好坏的依据与SortBenchmark是一致的,即计算数据量和运行时长的比值,根据单位时间的排序数据量来判断不同HDFS版本之间的性能差异。 Terasort包含三个工具,分别是teragen:用来生成供排序的随机数据;terasort:用来将随机数据排序;teravalidate:校验terasort的排序结果是否正确。 2.Sivetest位于hadoop的test包中, 代码结构清晰,其主要功能是通过大量map制造多种rpc请求,检测Namenode的性能。我们可以设定map数量,每个map发起的rpc请求次数,每一种rpc操作占总操作的百分比,以及读写数据量、block size等配置。下面列出slive可以调用的rpc操作种类: ls 列出路径下所有文件和目录 append 追加写文件操作 create 创建文件操作 delete 删除文件操作 mkdir 创建目录操作 rename 重命名文件操作 read 读取文件内容操作 默认情况下,每个map有1000次操作,7种操作均匀的随机出现。slivetest运行时相关参数如下表所示: maps 一共运行多少个mapper,默认值为10 ops 每个map跑多少个操作,默认值为1000 duration 每个map task的持续时间,默认值为MAX_INT,也就是无限制 exitOnError 遇到第一个Error是否要立即退出,默认不退出 files 最大生成文件数,默认为10 dirSize 每个文件夹最多允许生成多少个文件,默认为32 baseDir SliveTest运行后默认存放的文件根目录,默认为“/test/slive” resFile 结果文件名,默认为“part-0000” replication 备份数,可设置最小,最大备份数,默认为3 blockSize 设置文件block大小,默认为64M(64*1048576) readSize 读入大小可设置为最小值,最大值形式,例如“-readSize 100,1000”,默认无限制(min=max=MAX_LONG=read entire file) writeSize 写入大小,最小,最大形式,默认等于blockSize(min=max=blocksize) sleep 在不同次操作之间随机的插入sleep,这个参数用于定义sleep的时间范围,设置同样是最小,最大,单位是毫秒,默认为0) appendSize 追加写大小,最小,最大形式,默认等于blockSize(min=max=blocksize) seed 随机数种子 cleanup 执行完所有操作并报告之后,清理目录 queue 指定队列名,默认为“default” packetSize 指定写入的包大小 ls 指定ls操作占总操作数的百分比 append 指定append操作占总操作数的百分比 create 指定create操作占总操作数的百分比 delete 指定delete操作占总操作数的百分比 mkdir 指定mkdir操作占总操作数的百分比 rename 指定rename操作占总操作数的百分比 read 指定read操作占总操作数的百分比 SliveTest可以给Namenode带来很大的压力,用来做极限情况下的压力测试非常合适。吴威大师在SliveTest基础上更上一层,设计了多线程的SliveMapper,在多map多线程下压测Namenode,使用了MapReduce进行多机联合负载的思想,基本上可以将Namenode的极限性能完全压榨干净。大师制作的这个工具运行起来之后,Namenode就会处于一种假死状态,对其他rpc请求基本上失去响应,模拟出来的并发压力远远超过云梯当前线上的实际最大压力。作为每次云梯新版本上线前的必测工具,检测出的Hadoop性能瓶颈或发现的相关bug无数。 3.DFSIO位于hadoop的test包中, TestDFSIO是一个标准的HDFS的Benchmark工具, 功能简单明了,测试的是读和写的性能指标。使用参数如下: read 读测试,报告保存在“io_read/part-00000”中。执行该测试之前,需要先做write测试,以便先行在io_data目录下生成供读取的文件。 write 写测试,报告保存在“io_write/part-00000”中。 nfFiles 文件个数,默认为1 fileSize 文件大小,默认为1MB resFile 结果文件名,默认为” TestDFSIO_results.log” bufferSize 设置缓存大小,默认为1000000 clean 清理数据 seq 数据是否有序,默认无序 该工具作为一个辅助性质的性能测试工具,基本上可测可不测,因为优点已经被前述几个工具占光了. 1.共性与注意点 大致介绍了那么几种性能测试工具,共性也可以抽象出来,HDFS的性能测试追求的是检测Namenode在正常环境、高负载环境下的性能表现。吞吐率是HDFS性能的一个重要指标,但是与传统单机文件系统的测试结果获取方法不同之处在于,我们通过HDFS代码中集成的ganglia相关模块来收集HDFS的性能指标,监控诸如total_iops、RpcProcessingTime_avg、Syncs_num_ops等指标。此外,进行HDFS性能测试的时候,有一些外界环境条件也是需要注意的。首要之一是绝对不能启动SecondaryNamenode,这是因为SecondaryNamenode会同步editlog,或者做checkpoint,这都将占用Namenode的带宽和cpu资源,将干扰到性能测试获取到的结果数据。其次,为了降低环境因素的干扰,诸如RaidNode、Balancer等都不应该在性能测试中启动。HDFS文件系统中存在大量数据和没有数据测出来的性能测试结果也是有差异的,不能用来做性能对比,这是因为在文件目录结构树中的查找也会消耗一定的系统资源。 理想的情况是准备一套干净的只有Namenode和Datanode两种角色的HDFS文件系统,然后将上述测试工具放在这个环境中运行获取测试结果,用这个结果来与以前的版本做对比来获得对新版本性能优劣的评价。 2.压力测试 前述工具更关注性能方面的测试,实际上,性能和压力总是像一对亲兄弟,经常出现在同样的测试环境中。对于压力测试,我们通过制造大量的block、文件以及数据量来达到目的。测试团队通常会自己设计制作线上压力仿真工具,同样采用上一篇提到的技术,可以在短短的一天内将block数、文件数造到和线上一致。使得Namenode节点庞大的内存资源被占用去80%以上。然后再在这样的环境下使用性能测试工具检测HDFS的性能。云梯测试环境对于线上压力的仿真能力非常有限,经过测算仿真的上限基本上是1:10的关系,即100台机器集群可以仿真1000台的实际环境。这里瓶颈不在Namenode,而是在Datanode上,由于机器少,block分散在Datanode上就会占用更多的内存、cpu资源,datanode的吞吐率也会下降,这样一来性能测试受datanode性能的影响就无法发挥最大作用,测试结果失去参考价值。 (三)学习Hadoop自带的性能测试工具的意义 通过hadoop自带的性能测试工具,测试人员可以从本机I/O测试、分布式I/O基准测试、吞吐量测试三方面验证系统的正确性、分析系统的性能。换言之,学习hadoop的几种主要的测试手段,可以帮助我们对hadoop系统有更全面的了解,找到hadoop的瓶颈所在,能对系统性能做更好的改进。 (四)hadoop基准测试简介 hadoop自带了几个基准测试工具,通常被打包放在几个jar包里,例如hadoop-test.jar与hadoop-examples.jar,两个jar包可以很方便在Hadoop环境中运行测试。 本文测试使用的Hadoop版本是cloudera的hadoop-0.20.2-cdh3u3。 1.在测试前,先设置好环境变量: $ export $HADOOP_HOME=/home/hadoop/hadoop $ export $PATH=$PATH:$HADOOP_HOME/bin 2.使用以下命令就可以调用jar包中的类: $ hadoop jar $HADOOP_HOME/xxx.jar (1). Hadoop Test jar包 当不带参数调用hadoop-test-0.20.2-cdh3u3.jar时,会列出所有的测试程序: $ hadoop jar $HADOOP_HOME/hadoop-test-0.20.2-cdh3u3.jar An example program must be given as the first argument. Valid program names are: DFSCIOTest: Distributed i/o benchmark of libhdfs. DistributedFSCheck: Distributed checkup of the file system consistency. MRReliabilityTest: A program that tests the reliability of the MR framework by injecting faults/failures TestDFSIO: Distributed i/o benchmark. dfsthroughput: measure hdfs throughput filebench: Benchmark SequenceFile(Input|Output)Format (block,record compressed and uncompressed), Text(Input|Output)Format (compressed and uncompressed) loadgen: Generic map/reduce load generator mapredtest: A map/reduce test check. minicluster: Single process HDFS and MR cluster. mrbench: A map/reduce benchmark that can create many small jobs nnbench: A benchmark that stresses the namenode. testarrayfile: A test for flat files of binary key/value pairs. testbigmapoutput: A map/reduce program that works on a very big non-splittable file and does identity map/reduce testfilesystem: A test for FileSystem read/write. testipc: A test for ipc. testmapredsort: A map/reduce program that validates the map-reduce framework's sort. testrpc: A test for rpc. testsequencefile: A test for flat files of binary key value pairs. testsequencefileinputformat: A test for sequence file input format. testsetfile: A test for flat files of binary key/value pairs. testtextinputformat: A test for text input format. threadedmapbench: A map/reduce benchmark that compares the performance of maps with multiple spills over maps with 1 spill 这些程序从多个角度对Hadoop进行测试,TestDFSIO、mrbench和nnbench是三个广泛被使用的测试。 Testdfsio工具的使用 TestDFSIO用于测试HDFS的IO性能,使用一个MapReduce作业来并发地执行读写操作,每个map任务用于读或写每个文件,map的输出用于收集与处理文件相关的统计信息,reduce用于累积统计信息,并产生summary。TestDFSIO的用法如下: 1 TestDFSIO.0.0.6 Usage: TestDFSIO [genericOptions] -read | -write | -append | -clean [-nrFiles N] [-fileSize Size[B|KB|MB|GB|TB]] [-resFile resultFileName] [-bufferSize Bytes] [-rootDir] 以下的例子将往HDFS中写入10个1000MB的文件: $ hadoop jar $HADOOP_HOME/hadoop-test-0.20.2-cdh3u3.jar TestDFSIO \ -write -nrFiles 10 -fileSize 1000 结果将会写到一个本地文件TestDFSIO_results.log: 1 ----- TestDFSIO ----- : write Date & time: Mon Dec 10 11:11:15 CST 2012 Number of files: 10 Total MBytes processed: 10000.0 Throughput mb/sec: 3.5158047729862436 Average IO rate mb/sec: 3.5290374755859375 IO rate std deviation: 0.22884063705950305 Test exec time sec: 316.615 以下的例子将从HDFS中读取10个1000MB的文件: 1 $ hadoop jar $HADOOP_HOME/hadoop-test-0.20.2-cdh3u3.jar TestDFSIO \ -read -nrFiles 10 -fileSize 1000 结果将会写到一个本地文件TestDFSIO_results.log: 1 ----- TestDFSIO ----- : read Date & time: Mon Dec 10 11:21:17 CST 2012 Number of files: 10 Total MBytes processed: 10000.0 Throughput mb/sec: 255.8002711482874 Average IO rate mb/sec: 257.1685791015625 IO rate std deviation: 19.514058659935184 Test exec time sec: 18.459 使用以下命令删除测试数据: $ hadoop jar $HADOOP_HOME/hadoop-test-0.20.2-cdh3u3.jar TestDFSIO -clean nnbench工具的使用 nnbench用于测试NameNode的负载,它会生成很多与HDFS相关的请求,给NameNode施加较大的压力。这个测试能在HDFS上模拟创建、读取、重命名和删除文件等操作。nnbench的用法如下: 1 NameNode Benchmark 0.4 Usage: nnbench Options: -operation * NOTE: The open_read, rename and delete operations assume that the files they operate on, are already available. The create_write operation must be run before running the other operations. -maps -reduces -startTime . default is launch time + 2 mins. This is not mandatory -blockSize -bytesToWrite -bytesPerChecksum -numberOfFiles -replicationFactorPerFile -baseDir -readFileAfterOpen -help: Display the help statement 以下例子使用12个mapper和6个reducer来创建1000个文件: 1 $ hadoop jar $HADOOP_HOME/hadoop-test-0.20.2-cdh3u3.jar nnbench \ -operation create_write -maps 12 -reduces 6 -blockSize 1 \ -bytesToWrite 0 -numberOfFiles 1000 -replicationFactorPerFile 3 \ -readFileAfterOpen true -baseDir /benchmarks/NNBench-`hostname -s` mrbench工具的使用 mrbench会多次重复执行一个小作业,用于检查在机群上小作业的运行是否可重复以及运行是否高效。mrbench的用法如下: 1 MRBenchmark.0.0.2 Usage: mrbench [-baseDir ] [-jar ] [-numRuns ] [-maps ] [-reduces ] [-inputLines ] [-inputType ] [-verbose] 以下例子会运行一个小作业50次: $ hadoop jar $HADOOP_HOME/hadoop-test-0.20.2-cdh3u3.jar mrbench -numRuns 50 运行结果如下所示: 1 DataLines Maps Reduces AvgTime (milliseconds) 1 2 1 14237 以上结果表示平均作业完成时间是14秒。 (2). Hadoop Examples jar包 除了上文提到的测试工具,Hadoop还自带了一些工具,比如WordCount和TeraSort,这些工具在hadoop-examples-0.20.2-cdh3u3.jar中。执行以下命令会列出所有的示例程序: 1 $ hadoop jar $HADOOP_HOME/hadoop-examples-0.20.2-cdh3u3.jar An example program must be given as the first argument. Valid program names are: aggregatewordcount: An Aggregate based map/reduce program that counts the words in the input files. aggregatewordhist: An Aggregate based map/reduce program that computes the histogram of the words in the input files. dbcount: An example job that count the pageview counts from a database. grep: A map/reduce program that counts the matches of a regex in the input. join: A job that effects a join over sorted, equally partitioned datasets multifilewc: A job that counts words from several files. pentomino: A map/reduce tile laying program to find solutions to pentomino problems. pi: A map/reduce program that estimates Pi using monte-carlo method. randomtextwriter: A map/reduce program that writes 10GB of random textual data per node. randomwriter: A map/reduce program that writes 10GB of random data per node. secondarysort: An example defining a secondary sort to the reduce. sleep: A job that sleeps at each map and reduce task. sort: A map/reduce program that sorts the data written by the random writer. sudoku: A sudoku solver. teragen: Generate data for the terasort terasort: Run the terasort teravalidate: Checking results of terasort wordcount: A map/reduce program that counts the words in the input files. TeraSort工具的使用 通过控制teragen的map数和block size,我们得以检验多种测试场景下HDFS的性能状况。例如执行: hadoop jar hadoop-current/hadoop-0.19.1-dc-examples.jar teragen -Dmapred.map.tasks=100 -Ddfs.block.size=134217728 10000000000 /terasort/output 这个命令会在/terasort/output下生成100个10G大小的文件,文件的blocksize是128MB。这就类似于我们在测试单机磁盘IO的时候,分别要获取零碎文件吞吐率和整块大文件吞吐率数据一样。控制teragen生成的文件个数,文件大小,虽然总数据量一致,但是terasort的排序时间是有差异的。与普通磁盘不一样的地方在于,在集群资源不成为瓶颈的时候,文件越零碎,由于可以启动更多的map并行排序,相当于并发度提高了,terasort的总耗时就会变得更少。 TeraSort 一个完整的TeraSort测试需要按以下三步执行: 1. 用TeraGen生成随机数据 2. 对输入数据运行TeraSort 3. 用TeraValidate验证排好序的输出数据 并不需要在每次测试时都生成输入数据,生成一次数据之后,每次测试可以跳过第一步。 TeraGen的用法如下: $ hadoop jar hadoop-*examples*.jar teragen 以下命令运行TeraGen生成1GB的输入数据,并输出到目录/examples/terasort-input: $ hadoop jar $HADOOP_HOME/hadoop-examples-0.20.2-cdh3u3.jar teragen \ 10000000 /examples/terasort-input TeraGen产生的数据每行的格式如下: <10 bytes key><10 bytes rowid><78 bytes filler>\r\n 其中: 1. key是一些随机字符,每个字符的ASCII码取值范围为[32, 126] 2. rowid是一个整数,右对齐 3. filler由7组字符组成,每组有10个字符(最后一组8个),字符从’A’到’Z’依次取值 以下命令运行TeraSort对数据进行排序,并将结果输出到目录/examples/terasort-output: $ hadoop jar $HADOOP_HOME/hadoop-examples-0.20.2-cdh3u3.jar terasort \ /examples/terasort-input /examples/terasort-output 以下命令运行TeraValidate来验证TeraSort输出的数据是否有序,如果检测到问题,将乱序的key输出到目录/examples/terasort-validate $ hadoop jar $HADOOP_HOME/hadoop-examples-0.20.2-cdh3u3.jar teravalidate \ /examples/terasort-output /examples/terasort-validate Gridmix2工具的使用 Hadoop Gridmix2 Gridmix是Hadoop自带的基准测试程序,是对其它几个基准测试程序的进一步封装,包括产生数据、提交作业、统计完成时间等功能模块。Gridmix自带了各种类型的作业,分别为streamSort、javaSort、combiner、monsterQuery、webdataScan和webdataSort。 编译 1 $ cd $HADOOP_HOME/src/benchmarks/gridmix2 $ ant $ cp build/gridmix.jar . 修改环境变量 修改gridmix-env-2文件: 1 export HADOOP_INSTALL_HOME=/home/jeoygin export HADOOP_VERSION=hadoop-0.20.2-cdh3u3 export HADOOP_HOME=${HADOOP_INSTALL_HOME}/${HADOOP_VERSION} export HADOOP_CONF_DIR=${HADOOP_HOME}/conf export USE_REAL_DATASET= export APP_JAR=${HADOOP_HOME}/hadoop-test-0.20.2-cdh3u3.jar export EXAMPLE_JAR=${HADOOP_HOME}/hadoop-examples-0.20.2-cdh3u3.jar export STREAMING_JAR=${HADOOP_HOME}/contrib/streaming/hadoop-streaming-0.20.2-cdh3u3.jar 如果USE_REAL_DATASET的值为TRUE的话,将使用500GB压缩数据(等价于2TB非压缩数据),如果留空将使用500MB压缩数据(等价于2GB非压缩数据)。 修改配置信息 配置信息在gridmix_config.xml文件中。gridmix中,每种作业有大中小三种类型:小作业只有3个输入文件(即3个map);中作业的输入文件是与正则表达式{part-0000,part-0001,part-000*2}匹配的文件;大作业会处理处有数据。 产生数据 1 $ chmod +x generateGridmix2data.sh $ ./generateGridmix2data.sh generateGridmix2data.sh脚本会运行一个作业,在HDFS的目录/gridmix/data中产生输入数据。 运行 1 $ chmod +x rungridmix_2 $ ./rungridmix_2 运行后,会创建_start.out文件来记录开始时间,结束后,创建_end.out文件来记录完成时间。 查看任务统计信息 Hadoop提供非常方便的方式来获取一个任务的统计信息,使用以下命令即可作到: $ hadoop job -history all 这个命令会分析任务的两个历史文件(这两个文件存储在/_logs/history目录中)并计算任务的统计信息。  Hadoop系列 之Terasort <一> TeraSort 介绍 1TB排序通常用于衡量分布式数据处理框架的数据处理能力。Terasort是Hadoop中的的一个排序作业,在2008年,Hadoop在1TB排序基准评估中赢得第一名,耗时209秒。 <二> 相关资料 Hadoop MapReduce扩展性的测试: http://cloud.csdn.net/a/20100901/278934.html 用MPI实现Hadoop: Map/Reduce的TeraSort http://emonkey.blog.sohu.com/166546157.html Hadoop中TeraSort算法分析: http://dongxicheng.org/mapreduce/hadoop-terasort-analyse/ hadoop的1TB排序\ Sort Benchmark: http://sortbenchmark.org/ Trir树:http://www.cnblogs.com/cherish_yimi/archive/2009/10/12/1581666.html <三> 实验 (0) 源码位置 /local/zkl/hadoop/hadoop-0.20.1/hadoop-0.20.1/src/examples/org/apache/hadoop/examples/terasort (1) 首先执行 teragen 生成数据 [root@gd86 hadoop-0.20.1]# /local/zkl/hadoop/hadoop-0.20.1/hadoop-0.20.1/bin/hadoop jar hadoop-0.20.1-examples.jar teragen 1000000 terasort/1000000-input 查看生成的数据 [root@gd86 hadoop-0.20.1]# /local/zkl/hadoop/hadoop-0.20.1/hadoop-0.20.1/bin/hadoop fs -ls /user/root/terasort/1000000-input Found 3 items drwxr-xr-x - root supergroup 0 2011-03-31 16:21 /user/root/terasort/1000000-input/_logs -rw-r--r-- 3 root supergroup 50000000 2011-03-31 16:21 /user/root/terasort/1000000-input/part-00000 -rw-r--r-- 3 root supergroup 50000000 2011-03-31 16:21 /user/root/terasort/1000000-input/part-00001 生成两个数据,每个的大小是 50000000 B = 50 M [root@gd86 hadoop-0.20.1]# bin/hadoop jar hadoop-0.20.1-examples.jar teragen 10 terasort/1000000-input 将生成两个 500 B 的数据,加起来是 1000 B = 1 kb 产生的数据一行是100B,参数10表示产生10行,共1000B;1,000,000 行就有 100,000,000 B = 100 M; teragen是用两个 map 来完成数据的生成,每个 map 生成一个文件,两个文件大小共 100 M,每个就是 50 M . [root@gd86 hadoop-0.20.1]# bin/hadoop jar hadoop-0.20.1-examples.jar teragen 10000000 terasort/1G-input 这将产生 1 G 的数据,由于数据块是 64 M 一块,这会被分成16个数据块,当运行terasort时会有64个map task。 [root@gd86 hadoop-0.20.1]# bin/hadoop jar hadoop-0.20.1-examples.jar teragen 10000000 terasort/1G-input Generating 10000000 using 2 maps with step of 5000000 11/04/01 17:02:46 INFO mapred.JobClient: Running job: job_201103311423_0005 11/04/01 17:02:47 INFO mapred.JobClient: map 0% reduce 0% 11/04/01 17:03:00 INFO mapred.JobClient: map 19% reduce 0% 11/04/01 17:03:01 INFO mapred.JobClient: map 41% reduce 0% 11/04/01 17:03:03 INFO mapred.JobClient: map 52% reduce 0% 11/04/01 17:03:04 INFO mapred.JobClient: map 63% reduce 0% 11/04/01 17:03:06 INFO mapred.JobClient: map 74% reduce 0% 11/04/01 17:03:10 INFO mapred.JobClient: map 91% reduce 0% 11/04/01 17:03:12 INFO mapred.JobClient: map 100% reduce 0% 11/04/01 17:03:14 INFO mapred.JobClient: Job complete: job_201103311423_0005 11/04/01 17:03:14 INFO mapred.JobClient: Counters: 6 11/04/01 17:03:14 INFO mapred.JobClient: Job Counters 11/04/01 17:03:14 INFO mapred.JobClient: Launched map tasks=2 11/04/01 17:03:14 INFO mapred.JobClient: FileSystemCounters 11/04/01 17:03:14 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=1000000000 11/04/01 17:03:14 INFO mapred.JobClient: Map-Reduce Framework 11/04/01 17:03:14 INFO mapred.JobClient: Map input records=10000000 11/04/01 17:03:14 INFO mapred.JobClient: Spilled Records=0 11/04/01 17:03:14 INFO mapred.JobClient: Map input bytes=10000000 11/04/01 17:03:14 INFO mapred.JobClient: Map output records=10000000 (2) 执行 terasort 排序 执行 terasort 程序,将会执行 16 个 MapTask root@gd38 hadoop-0.20.1# bin/hadoop jar hadoop-0.20.1-examples.jar terasort terasort/1G-input terasort/1G-output 11/03/31 17:12:49 INFO terasort.TeraSort: starting 11/03/31 17:12:49 INFO mapred.FileInputFormat: Total input paths to process : 2 11/03/31 17:13:05 INFO util.NativeCodeLoader: Loaded the native-hadoop library 11/03/31 17:13:05 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library 11/03/31 17:13:05 INFO compress.CodecPool: Got brand-new compressor Making 1 from 100000 records Step size is 100000.0 11/03/31 17:13:06 INFO mapred.JobClient: Running job: job_201103311423_0006 11/03/31 17:13:07 INFO mapred.JobClient: map 0% reduce 0% 11/03/31 17:13:20 INFO mapred.JobClient: map 12% reduce 0% 11/03/31 17:13:21 INFO mapred.JobClient: map 37% reduce 0% 11/03/31 17:13:29 INFO mapred.JobClient: map 50% reduce 2% 11/03/31 17:13:30 INFO mapred.JobClient: map 75% reduce 2% 11/03/31 17:13:32 INFO mapred.JobClient: map 75% reduce 12% 11/03/31 17:13:36 INFO mapred.JobClient: map 87% reduce 12% 11/03/31 17:13:38 INFO mapred.JobClient: map 100% reduce 12% 11/03/31 17:13:41 INFO mapred.JobClient: map 100% reduce 25% 11/03/31 17:13:44 INFO mapred.JobClient: map 100% reduce 31% 11/03/31 17:13:53 INFO mapred.JobClient: map 100% reduce 33% 11/03/31 17:14:02 INFO mapred.JobClient: map 100% reduce 68% 11/03/31 17:14:05 INFO mapred.JobClient: map 100% reduce 71% 11/03/31 17:14:08 INFO mapred.JobClient: map 100% reduce 75% 11/03/31 17:14:11 INFO mapred.JobClient: map 100% reduce 79% 11/03/31 17:14:14 INFO mapred.JobClient: map 100% reduce 82% 11/03/31 17:14:17 INFO mapred.JobClient: map 100% reduce 86% 11/03/31 17:14:20 INFO mapred.JobClient: map 100% reduce 90% 11/03/31 17:14:23 INFO mapred.JobClient: map 100% reduce 93% 11/03/31 17:14:26 INFO mapred.JobClient: map 100% reduce 97% 11/03/31 17:14:32 INFO mapred.JobClient: map 100% reduce 100% 11/03/31 17:14:34 INFO mapred.JobClient: Job complete: job_201103311423_0006 11/03/31 17:14:34 INFO mapred.JobClient: Counters: 18 11/03/31 17:14:34 INFO mapred.JobClient: Job Counters 11/03/31 17:14:34 INFO mapred.JobClient: Launched reduce tasks=1 11/03/31 17:14:34 INFO mapred.JobClient: Launched map tasks=16 11/03/31 17:14:34 INFO mapred.JobClient: Data-local map tasks=16 11/03/31 17:14:34 INFO mapred.JobClient: FileSystemCounters 11/03/31 17:14:34 INFO mapred.JobClient: FILE_BYTES_READ=2382257412 11/03/31 17:14:34 INFO mapred.JobClient: HDFS_BYTES_READ=1000057358 11/03/31 17:14:34 INFO mapred.JobClient: FILE_BYTES_WRITTEN=3402255956 11/03/31 17:14:34 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=1000000000 11/03/31 17:14:34 INFO mapred.JobClient: Map-Reduce Framework 11/03/31 17:14:34 INFO mapred.JobClient: Reduce input groups=10000000 11/03/31 17:14:34 INFO mapred.JobClient: Combine output records=0 11/03/31 17:14:34 INFO mapred.JobClient: Map input records=10000000 11/03/31 17:14:34 INFO mapred.JobClient: Reduce shuffle bytes=951549012 11/03/31 17:14:34 INFO mapred.JobClient: Reduce output records=10000000 11/03/31 17:14:34 INFO mapred.JobClient: Spilled Records=33355441 11/03/31 17:14:34 INFO mapred.JobClient: Map output bytes=1000000000 11/03/31 17:14:34 INFO mapred.JobClient: Map input bytes=1000000000 11/03/31 17:14:34 INFO mapred.JobClient: Combine input records=0 11/03/31 17:14:34 INFO mapred.JobClient: Map output records=10000000 11/03/31 17:14:34 INFO mapred.JobClient: Reduce input records=10000000 11/03/31 17:14:34 INFO terasort.TeraSort: done 执行完成,排序,生成的数据仍是 1G , root@gd38 hadoop-0.20.1# bin/hadoop fs -ls terasort/1G-output Found 2 items drwxr-xr-x - root supergroup 0 2011-03-31 17:13 /user/root/terasort/1G-output/_logs -rw-r--r-- 1 root supergroup 1000000000 2011-03-31 17:13 /user/root/terasort/1G-output/part-00000 非hadoop自带工具HiBench工具的使用 HiBench HiBench是Intel开放的一个Hadoop Benchmark Suit,包含9个典型的Hadoop负载(Micro benchmarks、HDFS benchmarks、web search benchmarks、machine learning benchmarks和data analytics benchmarks),主页是: https://github.com/intel-hadoop/hibench 。 HiBench为大多数负载提供是否启用压缩的选项,默认的compression codec是zlib。 Micro Benchmarks: • Sort (sort):使用Hadoop RandomTextWriter生成数据,并对数据进行排序 • WordCount (wordcount):统计输入数据中每个单词的出现次数,输入数据使用Hadoop RandomTextWriter生成 • TeraSort (terasort):这是由微软的数据库大牛Jim Gray(2007年失踪)创建的标准benchmark,输入数据由Hadoop TeraGen产生 HDFS Benchmarks: • 增强的DFSIO (dfsioe):通过产生大量同时执行读写请求的任务来测试Hadoop机群的HDFS吞吐量 Web Search Benchmarks: • Nutch indexing (nutchindexing):大规模搜索引擎索引是MapReduce的一个重要应用,这个负载测试Nutch(Apache的一个开源搜索引擎)的索引子系统,使用自动生成的Web数据,Web数据中的链接和单词符合Zipfian分布 • PageRank (pagerank):这个负载包含一种在Hadoop上的PageRank算法实现,使用自动生成的Web数据,Web数据中的链接符合Zipfian分布 Machine Learning Benchmarks: • Mahout Bayesian classification (bayes):大规模机器学习也是MapReduce的一个重要应用,这个负载测试Mahout 0.7(Apache的一个开源机器学习库)中的Naive Bayesian训练器,输入数据是自动生成的文档,文档中的单词符合Zipfian分布 • Mahout K-means clustering (kmeans):这个负载测试Mahout 0.7中的K-means聚类算法,输入数据集由基于均匀分布和高斯分布的GenKMeansDataset产生 Data Analytics Benchmarks: • Hive Query Benchmarks (hivebench):这个负载的开发基于SIGMOD 09的一篇论文“A Comparison of Approaches to Large-Scale Data Analysis”和HIVE-396,包含执行典型OLAP查询的Hive查询(Aggregation and Join),使用自动生成的Web数据,Web数据中的链接符合Zipfian分布 下文将${HIBENCH_HOME}定义为HiBench的解压缩目录。 (1). 安装与配置 建立环境: • HiBench-2.2:从https://github.com/intel-hadoop/HiBench/zipball/HiBench-2.2下载 • Hadoop:在运行任何负载之前,请确保Hadoop环境能正常运行,所有负载在Cloudera Distribution of Hadoop 3 update 4 (cdh3u4)和Hadoop 1.0.3上测试通过 • Hive:如果要测试hivebench,请确保已正确建立了Hive环境 配置所有负载: 需要在${HIBENCH_HOME}/bin/hibench-config.sh文件中设置一些全局的环境变量。 1 $ unzip HiBench-2.2.zip $ cd HiBench-2.2 $ vim bin/hibench-config.sh HADOOP_HOME HADOOP_CONF_DIR COMPRESS_GLOBAL COMPRESS_CODEC_GLOBAL 配置单个负载: 在每个负载目录下,可以修改conf/configure.sh这个文件,设置负载运行的参数。 同步每个节点的时间 (2). 运行 同时运行几个负载: 1. 修改${HIBENCH_HOME}/conf/benchmarks.lst文件,该文件定义了将要运行的负载,每行指定一个负载,在任意一行前可以使用#跳过该行 2. 运行${HIBENCH_HOME}/bin/run-all.sh脚本 单独运行每个负载: 可以单独运行每个负载,通常,在每个负载目录下有三个不同的文件: 1 conf/configure.sh 包含所有参数的配置文件,可以设置数据大小及测试选项等 bin/prepare*.sh 生成或拷贝作业输入数据到HDFS bin/run*.sh 运行benchmark 1. 配置benchmark:如果需要,可以修改configure.sh文件来设置自己想要的参数 2. 准备数据:运行bin/prepare.sh脚本为benchmark准备输入数据 3. 运行benchmark:运行bin/run*.sh脚本来运行对应的benchmark (3). 小结 HiBench覆盖了一些广被使用的Hadoop Benchmark,如果看过该项目的源码,会发现该项目很精悍,代码不多,通过一些脚本使每个benchmark的配置、准备和运行变得规范化,用起来十分方便。 3. 参考资料 1. Benchmarking and Stress Testing an Hadoop Cluster with TeraSort, TestDFSIO & Co. 2. Hadoop Gridmix基准测试 3. HiBench

登录 后发表评论
访客 517
0
1
0/0
0
博客
讨论
问答
找茬
小小 的其他话题