2013-05-19 91 views
3

我想了解hadoop中的文件系统计数器。了解Hadoop文件系统计数器

下面是我跑过的工作的计数器。

在我执行的每个作业,我观察到的地图文件读取的字节是一样,几乎等于HDFS读取的字节。我观察到地图写入的文件字节是映射器读取的文件字节和hdfs字节的总和。请帮忙!相同的数据是由本地文件和hdfs读取的,并且都是通过映射阶段写入本地文件系统的?

   Map       

FILE_BYTES_READ 5062341139

HDFS_BYTES_READ 4405881342

FILE_BYTES_WRITTEN 9309466964

HDFS_BYTES_WRITTEN 0

谢谢!

回答

2

这是HDFS分配的总计数器,Map阶段,Reduce阶段的工作。

这些计数器,就像你观察者一样,是文件字节和hdfs字节的总和。 Hadoop使用您的逻辑文件系统HDFS在集群上共享资源。

+0

我已经justed粘贴在地图相的计数器。我知道关于文件字节的读取是相交的。我认为这是本地文件系统读取的字节数。但为什么它与我在每次运行的工作中读取的hdfs字节几乎相同? –

+1

因为Hadoop会尝试优化本地读取,所以它会将您的代码分发到数据所在的位置。这就是为什么你的HDFS读取是本地读取。 –

7

所以答案是真的,你注意到的是工作的具体情况。取决于作业,与hdfs相比,映射器/缩减器会将更多或更少的字节写入本地文件。

在你的映射器的情况下,你有一个从本地和HDFS位置读取数据的一个类似的量,有就是有没有问题。您的Mapper代码恰好需要在读取HDFS时从本地读取相同数量的数据。大多数时间Mappers被用来分析大于RAM的数据量,所以看到它可能将从HDFS获得的数据写入本地驱动器并不奇怪。从HDFS和本地读取的字节数并不总是看起来像他们总结到本地写入大小(他们甚至没有在你的情况下)。

下面是使用TeraSort示例,具有数据的100G,1个十亿键/值对。

File System Counters 
      FILE: Number of bytes read=219712810984 
      FILE: Number of bytes written=312072614456 
      FILE: Number of read operations=0 
      FILE: Number of large read operations=0 
      FILE: Number of write operations=0 
      HDFS: Number of bytes read=100000061008 
      HDFS: Number of bytes written=100000000000 
      HDFS: Number of read operations=2976 
      HDFS: Number of large read operations=0 

事情需要注意。从HDFS读取和写入的字节数接近100G。这是因为需要对100G进行排序,并且需要编写最终的排序文件。还要注意,它需要做大量的本地读/写操作来保存和排序数据,数据量是读取的数据量的2倍和3倍!

作为最后一点,除非你只想运行一项工作而不关心结果。 HDFS的量字节写入应该永远不会为0,而你的是HDFS_BYTES_WRITTEN 0

+0

感谢您的回复!这很有用! –