我在Amazons EMR Hadoop实现之上运行python MapReduce脚本。作为主脚本的结果,我得到了项目项目的相似性。在后续护理步骤中,我想将此输出拆分为每个项目的单独S3存储桶,因此每个项目存储桶包含与其类似的项目列表。为了达到这个目的,我希望在aftercare步骤的reduce函数中使用Amazons boto python库。
提前致谢, 托马斯
答案 0 :(得分:4)
启动hadoop进程时,您可以指定应该可用的外部文件。这是通过使用-files
参数完成的。
$HADOOP_HOME/bin/hadoop jar /usr/lib/COMPANY/analytics/libjars/MyJar.jar -files hdfs://PDHadoop1.corp.COMPANY.com:54310/data/geoip/GeoIPCity.dat
我不知道文件是否必须在HDFS上,但如果它是一个经常运行的作业,那么将它们放在那里并不是一个坏主意。
从代码中你可以做类似的事情
if (DistributedCache.getLocalCacheFiles(context.getConfiguration()) != null) {
List<Path> localFiles = Utility.arrayToList(DistributedCache.getLocalCacheFiles(context.getConfiguration()));
for (Path localFile : localFiles) {
if ((localFile.getName() != null) && (localFile.getName().equalsIgnoreCase("GeoIPCity.dat"))) {
Path path = new File(localFile.toUri().getPath());
}
}
}
除了我们的多个Mappers中的工作代码之外,这只是复制和粘贴。
我不知道你问题的第二部分。希望第一部分的答案能让你开始。 :)
除了-files
之外,还有-libjars
包含额外的广告;我在这里有一些信息 - If I have a constructor that requires a path to a file, how can I "fake" that if it is packaged into a jar?