2

我在 Amazons EMR Hadoop 实施之上运行 python MapReduce 脚本。作为主要脚本的结果,我得到了项目项目的相似之处。在后续步骤中,我想将此输出拆分为每个项目的单独 S3 存储桶,因此每个项目存储桶都包含与其类似的项目列表。为了实现这一点,我想在 aftercare 步骤的 reduce 函数中使用 Amazons boto python 库。

  • 如何将外部(python)库导入hadoop,以便可以在用python编写的reduce步骤中使用它们?
  • 是否可以在 Hadoop 环境中以这种方式访问​​ S3?

在此先感谢,托马斯

4

1 回答 1

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());
        }
    }
}

这几乎是直接从我们的多个映射器中的工作代码复制和粘贴的。

我不知道你问题的第二部分。希望第一部分的答案能让你开始。:)

除了包括额外的罐子外-files-libjars我有一些关于这里的信息 -如果我有一个需要文件路径的构造函数,如果它被打包到一个 jar 中,我怎么能“伪造”它?

于 2011-02-15T21:35:46.477 回答