如何检查映射器的输入大小(以字节为单位)?

时间:2012-06-20 16:52:16

标签: hadoop mapreduce

我注意到500个映射器中的完成时间差不多是3倍。

当我检查日志时(通过JobTracker网络界面),我发现差异主要在第一次溢出时间(“完成溢出0”)。

这似乎意味着每个映射器的输入文件大小差异并不是真正的因素。可能是不同节点之间的性能差异?任何见解/评论都会受到欢迎!

1 个答案:

答案 0 :(得分:1)

这实际上取决于你的地图制作者正在做些什么来调查差异。您必须根据地图作业功能以及涉及的I / O和处理进行调查。

有三个问题会导致映射器出现不同的性能差异。

  1. 文件I / O,它是本地化的但与节点有关。不同的节点类型可以显示不同的性能特征。
  2. 网络I / O:如果您的映射器正在从其他地方获取数据(例如:从数据库获取数据的Sqoop作业),那么这是一个更重要的问题,并且通常会随着映射器在具有不同网络特征的不同时间执行而变化。
  3. 计算密集型作业(Mapper性能):通常应该同样影响所有映射器,但仍然依赖于节点。
  4. 此外,如果从命令行执行作业,您应该看到与此类似的输出(对于网络I / O)

    mapred.JobClient:     SLOTS_MILLIS_MAPS=2958530
    mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0
    mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0
    mapred.JobClient:     Launched map tasks=1
    mapred.JobClient:     SLOTS_MILLIS_REDUCES=0
    mapred.JobClient:   FileSystemCounters
    mapred.JobClient:     HDFS_BYTES_READ=87
    mapred.JobClient:     FILE_BYTES_WRITTEN=58294
    mapred.JobClient:     HDFS_BYTES_WRITTEN=248301
    mapred.JobClient:   Map-Reduce Framework
    mapred.JobClient:     Map input records=1679
    mapred.JobClient:     Physical memory (bytes) snapshot=267583488
    mapred.JobClient:     Spilled Records=0
    mapred.JobClient:     CPU time spent (ms)=2580
    mapred.JobClient:     Total committed heap usage (bytes)=158334976
    mapred.JobClient:     Virtual memory (bytes) snapshot=927236096
    mapred.JobClient:     Map output records=1679
    mapred.JobClient:     SPLIT_RAW_BYTES=87
    mapreduce.ImportJobBase: Transferred 242.4814 KB in 2,964.2976 seconds (83.7639 bytes/sec)
    mapreduce.ImportJobBase: Retrieved 1679 records.
    

    您可以从处理和写入文件的数据以及传输时间中看到。

    [编辑:]

    有可用的基准测试可以帮助您查看Hadoop集群特征:

    1. TestDFSIO
    2. MRBench