3

我一直在从单个 JAR 文件在 hadoop 集群上运行几个 map reduce 作业。JAR 的 Main 接受 XML 文件作为命令行参数。XML 文件包含每个作业的输入和输出路径(名称-值属性对),我使用它们来配置每个 mapreduce 作业。我可以像这样将路径加载到配置中

    Configuration config = new Configuration(false);
    config.addResource(new FileInputStream(args[0]));

我现在正在尝试使用 Amazon 的 Elastic MapReduce 运行 JAR。我尝试将 XML 文件上传到 S3,但当然使用 FileInputStream 从 S3 加载路径数据不起作用(FileNotFound 异常)。

使用 EMR 时如何将 XML 文件传递​​到 JAR?

(我查看了引导操作,但据我所知,这是指定 hadoop 特定的配置)。

任何见解将不胜感激。谢谢。

4

1 回答 1

4

如果您添加一个简单的引导操作

hadoop fs -copyToLocal s3n://bucket/key.xml /target/path/on/local/filesystem.xml

然后,您将能够按照您的预期在 /target/path/on/local/filesystem.xml 上打开 FileInputStream。引导操作在集群中的所有主/从机器上同时执行,因此它们都将具有本地副本。

要添加该引导操作,您需要创建一个包含上述命令的 shell 脚本文件,将其上传S3,并将其指定为脚本引导操作路径。不幸的是,s3 中的 shell 脚本是目前唯一允许的引导操作类型。

于 2012-05-09T03:34:34.983 回答