我为用Java语言编写的MapReduce作业创建了一个简单的I/O监视系统。因此,在作业的Map阶段,我希望记录有关已处理数据的位置的信息。
映射阶段的MapReduce作业处理输入拆分,该拆分由HDFS中的几个文件块组成。该块有几个(通常是3个)副本。
在Mapper中读取时,是否有可能知道这些块的哪些副本已被使用?换句话说,我可以获得Mapper读取的本地文件系统中特定文件的完整路径吗?
发布于 2015-09-14 21:57:55
在HDFS中,数据块被复制,namenode没有任何关于哪个是副本的信息。它使用一个块来根据网络延迟和该特定机器中的负载执行操作。
HDFS中的文件被分成多个块。hdfs中文件的完整路径存储为namenode元数据。每个块由块id标识。
hdfs-site.xml中的属性dfs.namenode.name.dir的值提供了存储所有块的位置。
根据您的需求,如果您想要获取本地文件系统中存储块的路径,读取此属性的值,通过读取namenode元数据来识别块id,那么您将能够以编程方式在本地文件系统中找到引用hdfs文件的确切块。
https://stackoverflow.com/questions/32563072
复制相似问题