java - 读取 HDFS 文件拆分

标签 java hadoop hdfs distributed-computing

使用 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/

相关文章:

hadoop - [hdfs]如何为每个datanode配置不同的dfs.datanode.data.dir?

java - 使用 OpenJPA 和 postgresql 简单创建数据库

java - 如何设置XQ消息中部分的内容类型

java - Android 中的堆转储和内存使用差异?

java - 为什么我的 ANTLR 构建 Ant 任务失败并返回 "Unable to determine generated class"?

hadoop - Hadoop Reducer 是如何工作的?

hadoop - hive 找不到文件

hadoop - Spark SQL 抛出错误 "java.lang.UnsupportedOperationException: Unknown field type: void"

Hadoop distcp 从本地复制到 gcp 奇怪的行为

java - 访问webhdfs时出现UnsupportedOperationException