我想在每个映射器中添加要与每个记录块合并的特定记录子集,如何在Hadoop中执行此操作?并在Python流媒体包mrJob?
答案 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