我想测量在hadoop中执行i/o(从hdfs读取)时map和reduce所花费的时间。我用的是Yarn。hadoop 2.6.0版。有什么选择?
zlwx9yxi1#
一个粗略的估计可能是创建自定义计数器。对于mapper和reducer,可以在mapper(或reducer)开始处理和结束时收集时间戳。从起始时间戳和结束时间戳开始,计算并将其添加到自定义计数器,即Map器添加到 MAPPER_RUNNING_TIME 异径管 REDUCER_RUNNING_TIME (或者你想给它起什么名字)。执行完成后,从中减去计数器的聚合值 MILLIS_MAPS 以及 MILLIS_REDUCES 分别。不过,您可能需要查看hadoop源代码,以确认转移时间是否包含在hadoop中 MILLIS_MAPS 以及 MILLIS_REDUCES . 根据这个估计,您需要考虑到任务是并发执行的,因此时间相当总(或者为所有Map器和还原器聚合)。我个人没有这么做,但我认为这个解决方案可以工作,除非你找到更好的。
MAPPER_RUNNING_TIME
REDUCER_RUNNING_TIME
MILLIS_MAPS
MILLIS_REDUCES
gwbalxhn2#
如果您需要精确的度量,可以使用btrace,通过将它作为javaagent添加到您的任务中 mapreduce.{map,reduce}.java.opts -然后写一个剧本来衡量你喜欢的东西。这里有btrace脚本的示例。还有htrace——这可能也会有所帮助。
mapreduce.{map,reduce}.java.opts
2条答案
按热度按时间zlwx9yxi1#
一个粗略的估计可能是创建自定义计数器。对于mapper和reducer,可以在mapper(或reducer)开始处理和结束时收集时间戳。从起始时间戳和结束时间戳开始,计算并将其添加到自定义计数器,即Map器添加到
MAPPER_RUNNING_TIME
异径管REDUCER_RUNNING_TIME
(或者你想给它起什么名字)。执行完成后,从中减去计数器的聚合值MILLIS_MAPS
以及MILLIS_REDUCES
分别。不过,您可能需要查看hadoop源代码,以确认转移时间是否包含在hadoop中MILLIS_MAPS
以及MILLIS_REDUCES
. 根据这个估计,您需要考虑到任务是并发执行的,因此时间相当总(或者为所有Map器和还原器聚合)。我个人没有这么做,但我认为这个解决方案可以工作,除非你找到更好的。
gwbalxhn2#
如果您需要精确的度量,可以使用btrace,通过将它作为javaagent添加到您的任务中
mapreduce.{map,reduce}.java.opts
-然后写一个剧本来衡量你喜欢的东西。这里有btrace脚本的示例。还有htrace——这可能也会有所帮助。