繁体   English   中英

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

[英]Share specific data between each mapper

我想添加一个特定的记录子集,以便与每个映射器中的每个记录块合并。通常如何在Hadoop中做到这一点? 在Python流包mrJob中?

不知道您到底想做什么,但是也许您可以使用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流传输,但是应该不难发现

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

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

在作业的任何任务在该节点上执行之前,该框架会将必要的文件复制到该从节点上。 其效率源于以下事实:每个作业仅复制一次文件,以及缓存未在从属服务器上存档的存档的能力。

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

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

对于Python mrJob:-

我想你必须使用

mrjob.compat.supports_new_distributed_cache_options(版本)

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

也许你会在这里得到更多

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM