Hadoop MapReduce验证分析

1、输入文件

输入文件为一个1.2GB的文本文件,通过wc命令可以验证文本文件的行数,和总的单词个数。

运行命令:

hadoop jar /root/hadoop-2.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /input

/output

行数为26048904

单词个数为:228661956

文件大小为:1258337768 bytes

2、运行耗时

从初始化开始到整个任务运行结束,总共耗时1分51秒

3、运行统计信息

文件系统信息:

任务配置信息:

开启的map任务个数:12个

开启的reduce任务个数:1个

由于是单datanode,故所有的map任务均执行在本地。

Map-Reduce的一个整体描述

Map的输入记录数为26048904,注意这个数字,就是输入的文本文件的行数,所以可以验证,在Hadoop中,map函数的输入即为文本文件中的行数。

Map的输出记录数为228661956,即为整个文本文件中单词的个数,所以,可以验证,map的输出是以<word,1>的形式输出,并没有做局部的单词归并操作。

 

但是后续的combine调用将map输出到本地的中间数据做了一次归并和排序,可以看到,在reduce之前的combine操作,combine的输入即为map的本地文件,记录数为228663606。

 

Combine的output为1870,combine的操作相当于做了一个简单的reduce操作。

 

Reduce的输入为22组,即在partitioner阶段,将combine输出的1870组数据按照哈希的方式分成了22个组发送给Reduce函数,reduce仅做一个归并操作。输出为22个单词的词频个数。

 

Shuffle过程由hadoop框架中的Partitioner部分来完成的,将每个map的combiner输出分成若干组,交给相应的reducer进行处理。

4、在多机环境下的测试

这次搭建的环境为1台namenode(master)及3台datanode(slaves),在mapreduce过程中存在网络通信。在任务开启的到结束整个map-reduce耗时为:57s,对比单datanode耗时相对少的多。

Map个数和reduce个数和单节点环境一样,说明,在hadoop中,分配map个数和文件的大小相关,reduce任务的个数是可配置的,并且,真正在执行的只有两台机器。

5、多单词(8w单词)文件下的测试

文件大小为5.7G,整个测试耗时3分14秒

Map个数由文件大小而定,即为分片的个数,reduce个数配置文件中为1个,具体任务执行的测试结果如下:

46个map任务,1个reduce任务

在reduce输出的记录数为89268个,即为89268个不同的单词。

后面,将reduce配置的个数改为3个,配置文件为mapred-sit.xml,其中的配置项为 mapred.reduce.tasks

如此配置后,从新运行整个mapreduce程序,运行时间为2分37秒比单个reduce的情况要少37秒的时间,可以看出3个reduce的情况下运行整个mapreduce程序比1个reduce情况下运行效率要高。

 

欢迎大家一起交流讨论,我的微信

发布了41 篇原创文章 · 获赞 136 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/songguangfan/article/details/87470776