我一直在单个JAR文件中在hadoop集群上运行多个map reduce作业。 JAR的Main接受XML文件作为命令行参数。 XML文件包含每个作业的输入和输出路径(名称 - 值属性对),我使用它们来配置每个mapreduce作业。我能够将路径加载到配置中,如此
Configuration config = new Configuration(false);
config.addResource(new FileInputStream(args[0]));
我现在正试图使用亚马逊的Elastic MapReduce来运行JAR。我尝试将XML文件上传到S3,但当然使用FileInputStream从S3加载路径数据不起作用(FileNotFound异常)。
如何在使用EMR时将XML文件传递给JAR?
(我查看了bootstrap操作,但据我所知,这是指定hadoop特定的配置)。
任何见解都将受到赞赏。感谢。
答案 0 :(得分: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脚本是目前唯一允许的引导操作类型。