使用 HDFS 的 Java API,可以直接读取一个文件,一次按顺序读取每个 block 。这是一个 simple example .
我希望能够使用类似 HDFS 的 FileSplits 的方式一次 block 读取文件.最终目标是用多台机器并行读取一个文件,每台机器读取一个 block 区域。给定 HDFS 路径,我如何获得 FileSplits 或 block ?
Map-Reduce 和其他处理器不涉及。这是严格的文件系统级操作。
最佳答案
这就是你如何在 HDFS 中获取文件的 block 位置
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);
}
}
关于java - 读取 HDFS 文件拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31081707/