我想添加一个特定的记录子集与每个映射器的每个记录块合并,我如何在Hadoop中一般做到这一点?在Python流媒体包mrJob?
DistributedCache是Map-Reduce框架提供的缓存应用程序所需的文件(文本,存档,jar等)的工具。
应用程序通过url (hdfs://或http://))指定要通过JobConf缓存的文件。DistributedCache假定通过hdfs://url指定的文件已经存在于由url指定的文件系统路径上。
在从属节点上执行作业的任何任务之前,框架会将必要的文件复制到从属节点上。它的效率源于这样一个事实,即每个作业只复制一次文件,并且能够缓存在从属服务器上未归档的归档文件。
DistributedCache可以用来分发简单的,只读的数据/文本文件和/或更复杂的类型,如档案,jar等。归档文件(zip、tar和tgz/tar.gz文件)在从属节点上不归档。可以选择性地将jar添加到任务的类路径中,这是一种基本的软件分发机制。文件具有执行权限。用户还可以选择将分布式缓存文件符号链接到任务的工作目录。
DistributedCache跟踪缓存文件的修改时间戳。显然,在作业执行期间,应用程序或外部不应该修改缓存文件。
For Python mrJob:-
我认为你必须使用
mrjob.compat.supports_new_distributed_cache_options(版本)
然后使用-files和-archives而不是-cacheFile和-cacheArchive
也许你会在这里得到更多
不确定您到底想要做什么,但也许您可以使用分布式缓存功能来实现这一点。
分布式缓存用例示例:
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流是如何完成的,但应该不难找出