在每个映射器之间共享特定数据

时间:2013-06-06 14:49:04

标签: python hadoop mapreduce hadoop-streaming mrjob

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

2 个答案:

答案 0 :(得分:1)

不确定您到底要做什么,但也许您可以使用Distributed Cache功能来实现这一目标。

分布式缓存的示例用例:

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流程做到这一点,但要弄清楚

并不难

答案 1 :(得分:1)

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

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

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

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

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

对于Python mrJob: -

我认为你必须使用

<强> mrjob.compat.supports_new_distributed_cache_options(版本)

然后使用-files和-archives代替-cacheFile和-cacheArchive

可能会得到更多here