基于计算机资源分析Hadoop的默认counter(2)

但是这些细微的counter,没有统计map和reduce排序时文件读写的情况,所以要衡量job任务的io读写情况,我觉得最合适的还是使用FileSystemCounters的counter。

io读写流量大致可以通过上述FileSystemCounters四个参数求和而得,存在不足就是:

"FileSystemCounters:HDFS_BYTES_WRITTEN",它只是一个副本的hdfs的写入大小,而hdfs的块副本是可以调整的,所以io读写流量,还需要"FileSystemCounters:HDFS_BYTES_WRITTEN" * 副本数。

map和reduce都是用户自定义的,存在可能是用户代码绕过hadoop框架,不使用org.apache.hadoop.fs.FileSystem.open文件,这部分io读写流量,是无法被统计的。

网络流量

hadoop任务产生网络流量的阶段:map输入从hdfs拉取数据,reduce shuffle时从map端拉取数据,reduce完成往hdfs写入结果(如果没有reduce,就是map完成往hdfs写入结果)。

job和hdfs交互产生的流量,可以通过io读写分析的两个counter获取:"FileSystemCounters:HDFS_BYTES_READ"和"FileSystemCounters:HDFS_BYTES_WRITTEN"

而reduce shuffle时从map端拉取数据产生的流量,对应的counter是:

"Map-Reduce Framework:Reduce shuffle bytes" 它是reduce往map拉取中间结果的累计数据大小,如果map产生的中间结果是压缩文件,它的值是压缩文件解压前的大小(附:代码位于 org.apache.hadoop.mapred.ReduceTask.reduceShuffleBytes)。

网络流量大致可以通过上述三个参数求和而得,存在不足就是:

"FileSystemCounters:HDFS_BYTES_READ"和"FileSystemCounters:HDFS_BYTES_WRITTEN",它没有考虑hadoop对hdfs的本地化优化,hdfs读写块时,如果发现客户端和目标块在同一个节点,会直接通过本地读写,有些块如果在本地,hadoop会直接通过本地文件系统读写,不通过网络读写。

"FileSystemCounters:HDFS_BYTES_WRITTEN",它只是一个副本的hdfs的写入大小,而hdfs的块副本是可以调整的,所以网络流量,还需要"FileSystemCounters:HDFS_BYTES_WRITTEN" * 副本数。

map和reduce都是用户自定义的,存在可能是用户代码绕过hadoop框架,自行产生网络通信,这部分流量是无法被统计。

--------------------------------------分割线 --------------------------------------

Ubuntu 13.04上搭建Hadoop环境

Ubuntu 12.10 +Hadoop 1.2.1版本集群配置

Ubuntu上搭建Hadoop环境(单机模式+伪分布模式)

Ubuntu下Hadoop环境的配置

单机版搭建Hadoop环境图文教程详解

--------------------------------------分割线 --------------------------------------

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5ddb71238da1f862d5ff37c46dfbd93d.html