我一直在使用 HADOOP 1.2.1 服务器,并在那里执行了许多猪作业。最近,我考虑将我的 Hadoop 服务器更改为 HADOOP 2.2.0。所以我在 HADOOP 2.2.0 中尝试了一些猪作业,就像我在 HADOOP 1.2.1 版本中所做的那样。
但是我在 YARN MR2 中几乎不明白的一件事是,每个 mr 作业中只有一个减少作业。
第一次,我认为 ok,reduce 比 mr1 快,因为资源管理器通过仅在一台服务器中处理它来有效地调度 reduce 作业。
但是在每一个 big size 的 mr 作业中,YARN MR2 每次都只分配一个 Reduce 作业。
下面是Extream案例。
我的旧 HADOOP(1.2.1 版)服务器由 1 个 jobtracker 和 2 个 tasktracker 组成。(每个4核,32G)
种类 Total Tasks(successful+failed+killed) 成功任务 失败任务 杀死任务 开始时间 完成时间 设置 1 1 0 0 2014 年 1 月 27 日 18:01:45 2014 年 1 月 27 日 18:01:46(0 秒) 地图 2425 2423 0 2 2014 年 1 月 27 日 18:01:26 2014 年 1 月 27 日 19:08:58(1 小时 7 分钟 31 秒) 减少 166 163 0 3 2014 年 1 月 27 日 18:04:35 2014 年 1 月 27 日 20:40:15(2 小时 35 分钟 40 秒) 清理 1 1 0 0 2014 年 1 月 27 日 20:40:16 2014 年 1 月 27 日 20:40:17(1 秒)
耗时 2 小时 38 分钟。
我的新 HADOOP(2.2.0 版)服务器由 1 个资源管理器和 8 个节点管理器组成。(每个 4 核,32G)(新系统要好得多)
职位名称:PigLatin:DefaultJobName 用户名:hduser 队列:默认 状态:成功 优步化:假 开始时间:2014年1月28日星期二16:09:41 KST 完成时间:2014 年 1 月 28 日星期二 21:47:45 KST 已用时间:5 小时 38 分钟 4 秒 诊断: 平均地图时间 41 秒 平均减少时间 3 小时 48 分钟 23 秒 平均随机播放时间 1 小时 36 分钟 35 秒 平均合并时间 1 小时 27 分钟 38 秒 应用大师 尝试次数开始时间节点日志 1 月 28 日星期二 16:09:39 KST 2014 awdatanode2:8042 日志 任务类型总计完成 地图 1172 1172 减少 1 1 尝试类型失败杀死成功 地图 0 1 1172 减少 0 0 1
耗时 5 小时 38 分钟。
虽然 My Old Hadoop server 的资源很差,但它比 New Hadoop 快得多。因为减少分配的工作。另一方面,HADOOP 2.2.0 server 资源丰富,map 比旧系统快很多,但是reduce 耗时很长。
Hadoop 2.2 内存配置为 Map(4G,堆空间 3G)和 Reduce(8G,堆空间 6G)。我尝试了各种配置集。但结果总是一项减少工作。
所以我检查了猪源代码。
My Pig 作业总是使 One reduce 作业的原因是 InputSizeReducerEstimator 类无法访问 hdfs 文件系统。
// InputSizeReducerEstimator.java 列表第 79 行 poLoads = PlanHelper.getPhysicalOperators(mapReduceOper.mapPlan, POLoad.class);
结果 poLoads 始终为 0 大小。
所以我的减少工作总是估计为一个。