我想使用hadoop命令列出文件。 “hadoop fs -ls文件路径”。我想编写一个Java代码来实现这一目标。我是否可以编写一小段Java代码,制作一个jar并将其提供给Map reduce作业(Amazon EMR)来实现?能否请我指出实现该目标的代码和步骤?

最佳答案

您可以使用以下JAVA代码列出HDFS中的文件

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FileUtil;
import org.apache.hadoop.fs.Path;

...

Configuration configuration = new Configuration();

FileSystem hdfs = FileSystem.get(new URI("hdfs://localhost:54310"), configuration);
FileStatus[] fileStatus = hdfs.listStatus(new Path("hdfs://localhost:54310/user/path"));

Path[] paths = FileUtil.stat2Paths(fileStatus);

for (Path path : paths) {
  System.out.println(path);
}

在您的map reduce触发器代码(main或run方法)中使用此代码来获取列表,并将其传递给args为map reduce类

选项2
  • 创建shell脚本以使用hadoop fs -ls命令
  • 读取文件列表
  • 提供此脚本作为EMR引导脚本的一部分,以获取
  • 文件列表
    您可以在同一脚本中使用
  • 编写代码,以将路径保存在文本文件中的路径/ mnt /
  • 从您的 map 化简代码中读取此路径,并提供给映射器和化简器的arg列表
  • 关于hadoop - 使用Java代码运行简单的Hadoop命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25122116/

    10-14 13:56
    查看更多