我有一个Cloudera集群,我正在做一些运行Terasort的基准测试,但是我在105-150分钟内得到了非常不稳定的结果。有些时候,我看到它比平常复制得更多,或者做了很多垃圾收集,但也有一些时候,它们几乎是一样的。
我不知道结果不稳定的原因,任何提示或建议都是非常欢迎的:)
我运行基准如下:
我选择了地图的数量,并按照本指南http://wiki.apache.org/hadoop/HowManyMapsAndReduces减少了任务
投机地图和减少执行停止。
10,000,000,000行100字节~= 953674 M
块大小= 128 MB
映射任务数= 3725 (行数*行大小)/(块大小*2)我执行2次,因为映射任务时间太短,比如7秒。
sudo -u hdfs hadoop jar /usr/lib/hadoop-0.20-mapreduce/hadoop-examples.jar teragen -Ddfs.replication=3 -Dmapred.map.tasks=3725 10000000000 /terasort-innum-of工-节点=4
每个节点的核数=8
减少任务= 56 ( 1.75 *num-of工-节点*num-of-cores每节点)
sudo -u hdfs hadoop jar /usr/lib/hadoop-0.20-mapreduce/hadoop-examples.jar terasort -Ddfs.replication=1 -Dmapred.reduce.tasks=56 /terasort-in /terasort-out节点之间的服务和角色分布如下:
6个节点-8核、16 GB内存和2 HD -只运行HDFS和MapReduce:
- Namenode.
- Cloudera management services.
- JobTracker.
- SecondaryNamenode.
- TaskTracker.
- Datanode.
我使用第二个节点作为客户端,因为它是负载最少的节点。
如果您需要任何配置、属性值或细节,请告诉我。
更新:在Chris White的回答之后,我试图减少工作跟踪器和任务跟踪器之间的轮询数,方法是只有1名工作人员,很少有地图,并且减少了,现在基准测试非常稳定:)
发布于 2013-11-07 11:30:54
在查看性能时,需要考虑许多因素:
这可能是一个轮询问题,再加上可用的少量处理槽。
任务跟踪器定期对正在运行的任务进行轮询,以确定它们是否已经完成,而作业跟踪器也会轮询任务跟踪器。如果你的3700个地图任务(如果我正确地阅读了你的问题),如果在投票时间上有1秒的差异,那么这就可以解释你在计时上看到的~小时。
如果您有一个更大的集群具有更多的处理槽,我想这个数目会变得更稳定,但是没有哪个MR job都有固定的运行时间,有太多的轮询和其他外部时间(例如JVM启动时间)可以调整整个运行时。
对于这两个工作,数据局部性计数器是怎么说的?如果一个作业比另一个作业有更多的数据锁定任务,那么我希望它也能运行得很快。
https://stackoverflow.com/questions/19834310
复制相似问题