读取 HDFS 文件拆分
Read HDFS file splits
使用 HDFS 的 Java API,可以直接读取一个文件,一次按顺序读取每个块。这是 simple example.
我希望能够使用类似于 HDFS 的 FileSplits 的方式一次读取一个 块 的文件。最终目标是用多台机器并行读取一个文件,每台机器读取一个块区域。给定一个 HDFS 路径,我怎样才能得到 FileSplits 或块?
不涉及Map-Reduce和其他处理器。这是严格的文件系统级操作。
这是用于计算文件校验和的内部 HDFS 代码,它完全满足您的需要。
这就是您在 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);
}
}
使用 HDFS 的 Java API,可以直接读取一个文件,一次按顺序读取每个块。这是 simple example.
我希望能够使用类似于 HDFS 的 FileSplits 的方式一次读取一个 块 的文件。最终目标是用多台机器并行读取一个文件,每台机器读取一个块区域。给定一个 HDFS 路径,我怎样才能得到 FileSplits 或块?
不涉及Map-Reduce和其他处理器。这是严格的文件系统级操作。
这是用于计算文件校验和的内部 HDFS 代码,它完全满足您的需要。
这就是您在 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);
}
}