使用HDFS的Java API,可以直接读取每次按顺序读取每个块的文件。这是simple example。
我希望能够使用HDFS' FileSplits之类的内容一次读取一个块文件。最终目标是与多台机器并行读取文件,每台机器读取一个块区域。给定HDFS路径,我如何获取FileSplits或阻止?
不涉及Map-Reduce和其他处理器。这严格来说是文件系统级操作。
答案 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代码,它完全符合您的需要。