1

我想添加一个特定的记录子集以与每个映射器的每个记录块合并,我通常如何在 Hadoop 中执行此操作?在 Python 流包 mrJob 中?

4

2 回答 2

1

不确定您到底要做什么,但也许您可以使用分布式缓存功能来实现这一点。

分布式缓存的示例用例:

Input to mapper: customer reviews
You want to process only those reviews which contain certain keywords, which are stored in a "words.txt" file. 
You can put words.txt into the Distributed Cache, which makes it available to the mapper & reducer. 

不确定它是如何为 Python 流式传输完成的,但应该不难弄清楚

于 2013-06-06T18:40:32.000 回答
1

DistributedCache 是 Map-Reduce 框架提供的一种工具,用于缓存应用程序所需的文件(文本、档案、jar 等)。

应用程序通过 url(hdfs:// 或 http://)指定要通过 JobConf 缓存的文件。DistributedCache 假设通过 hdfs:// urls 指定的文件已经存在于文件系统中由 url 指定的路径。

在该节点上执行作业的任何任务之前,框架将把必要的文件复制到从节点上。它的效率源于这样一个事实,即每个作业只复制一次文件,并且能够缓存未归档在从属设备上的档案。

DistributedCache 可用于分发简单的只读数据/文本文件和/或更复杂的类型,例如存档、jar 等。存档(zip、tar 和 tgz/tar.gz 文件)在从节点上未存档。可以选择将 Jars 添加到任务的类路径中,这是一种基本的软件分发机制。文件具有执行权限。可选地,用户还可以指示它将分布式缓存文件符号链接到任务的工作目录中。

DistributedCache 跟踪缓存文件的修改时间戳。显然,缓存文件不应在作业执行时由应用程序或外部修改。

对于 Python mrJob:-

我认为你必须使用

mrjob.compat.supports_new_distributed_cache_options(版本)

然后使用 -files 和 -archives 而不是 -cacheFile 和 -cacheArchive

也许你会在这里得到更多

于 2013-06-07T07:50:23.367 回答