读取 HDFS 文件拆分

Read HDFS file splits

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

我希望能够使用类似于 HDFS 的 FileSplits 的方式一次读取一个 的文件。最终目标是用多台机器并行读取一个文件,每台机器读取一个块区域。给定一个 HDFS 路径,我怎样才能得到 FileSplits 或块?

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

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

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

这就是您在 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);
    }
  }