在Hadoop中从HDFS读取时的I / O时间

时间:2016-05-17 06:09:11

标签: java hadoop hdfs yarn

我想测量在Hadoop中执行I / O(从HDFS读取)时映射和减少的时间。我正在使用Yarn。 Hadoop 2.6.0。 有什么选择?

2 个答案:

答案 0 :(得分:1)

一个粗略的估计可能是创建自定义计数器。对于mapper和reducer,您可以在mapper(或reducer)开始处理和结束时收集时间戳。从开始和结束时间戳开始,计算并将其添加到自定义计数器,即mappers添加到MAPPER_RUNNING_TIME,reducers添加到REDUCER_RUNNING_TIME(或者您希望给它的任何名称)。执行完成后,分别从MILLIS_MAPSMILLIS_REDUCES减去计数器的汇总值。您可能需要查看Hadoop源代码,以确认暂存时间是否包含在MILLIS_MAPSMILLIS_REDUCES中。通过这种估计,您需要考虑到任务正在同时执行,因此时间将相当完全(或聚合所有映射器和缩减器)。

我个人没有这样做,但我认为除非你找到更好的解决方案,否则这个解决方案可行。

答案 1 :(得分:1)

如果您需要精确测量 - 您可以使用btrace,通过mapreduce.{map,reduce}.java.opts将其作为javaagent添加到您的任务中 - 然后编写测量您喜欢的任何内容的脚本。 btrace脚本的示例为here

还有HTrace - 这可能也会有所帮助。