读取HDFS文件拆分

时间:2015-06-26 20:33:47

标签: java hadoop hdfs distributed-computing

使用HDFS的Java API,可以直接读取每次按顺序读取每个块的文件。这是simple example

我希望能够使用HDFS' FileSplits之类的内容一次读取一个文件。最终目标是与多台机器并行读取文件,每台机器读取一个块区域。给定HDFS路径,我如何获取FileSplits或阻止?

不涉及Map-Reduce和其他处理器。这严格来说是文件系统级操作。

2 个答案:

答案 0 :(得分:2)

这是你如何在HDFS中获取文件的块位置

  Path dataset = new Path(fs.getHomeDirectory(), <path-to-file>);
  FileStatus datasetFile = fs.getFileStatus(dataset);

  BlockLocation myBlocks [] = fs.getFileBlockLocations(datasetFile,0,datasetFile.getLen());
  for(BlockLocation b : myBlocks){
    System.out.println("Length "+b.getLength());
    for(String host : b.getHosts()){
      System.out.println("host "+host);
    }
  }

答案 1 :(得分:1)

这是用于计算文件校验和的内部HDFS代码,它完全符合您的需要。

http://grepcode.com/file/repo1.maven.org/maven2/org.apache.hadoop/hadoop-hdfs/2.4.0/org/apache/hadoop/hdfs/DFSClient.java#1863