Hadoop小集群(5结点)测试

1、Map/Reduce任务
输入:
文件格式
id value
其中id是1~100之间的随机整数,value为1~100之间的随机浮点数。
输出:
每个id的最大value

生成这类文件,可以用python搞定,见本文末尾的附录。

2、Map/Reduce程序
这里就直接使用新(0.20.2)的API了,即org.apache.hadoop.mapreduce.*下的接口。
特别注意:
job.setNumReduceTasks(5)
指定了本Job的Reduce个数,默认为1的。

3、集群配置

除了在Hadoop集群配置之外,还要额外注意一下几点:

结点部署
5个,hadoop1~hadoop5,内网映射/etc/hosts,如下:
需要特别注意的是:hosts映射一定要和hostname一致!!
比如这里我就把外网的hostname 50*注视掉了。

配置程序
(1) core-site.xml

(2) mapred-site.xml
这里mapred.tasktracker.map.tasks.maximum和mapred.tasktracker.reduce.tasks.maximum
控制了每个node上能运行最多的map和reduce任务。
map一般是I/O密集型任务,可以设置为CPU核数。
reduce一般是CPU密集型任务,设置为1~2比较合理。

转载请注明:Hadoop小集群(5结点)测试

(3) hdfs-site.xml
注意:我这里的replication是3份,因为5个结点都有datanode。

4、运行结果
50个测试文件,一个60MB左右。

(1) max map = 4, max reduce = 2, job.setNumReduceTasks(1)
map能跑到同时20个(5 * 4)
reduce只有1个
时间:7mins, 4sec

(2) max map = 4, max reduce = 2, job.setNumReduceTasks(10)
map能跑到同时20个(5 * 4)
reduce并行10个
时间:3mins, 58sec

(3) max map = 4, max reduce = 1, job.setNumReduceTasks(5)
map能跑到同时20个(5 * 4)
reduce并行5个
时间:4mins, 4sec

(4) max map = 4, max reduce = 1, job.setNumReduceTasks(5),加上Combination特性
map能跑到同时20个(5 * 4)
reduce并行5个, 且拷贝非常快
1mins, 49sec
当然了,不是所有Map/Reduce任务都能满足Combination特性。

(5) 单机用Python脚本跑 (见附录2)
时间:11mins, 5ses

小结:
5个机器的Hadoop集群运行效率大概是单机Python的2.8倍,加上Combine后能到6倍左右。
Hadoop性能不够理想是因为我没有对性能调优,比如内存、压缩存储、传输等。

附录1:生成输入测试数据用的Python程序

附录2:单机跑的程序

Leave a Reply

Your email address will not be published.