在每个Map器之间共享特定的数据

ivqmmu1c  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(301)

我想在每个Map器中添加一个特定的记录子集与每个记录块合并,在hadoop中通常如何做到这一点?在python流媒体包mrjob中呢?

xggvc2p6

xggvc2p61#

distributedcache是MapReduce框架提供的一种工具,用于缓存应用程序所需的文件(文本、存档、jar等)。
应用程序通过url(hdfs://或http://)指定要通过jobconf缓存的文件。distributedcache假定通过hdfs://url指定的文件已经存在于文件系统中url指定的路径上。
在从节点上执行作业的任何任务之前,框架会将必要的文件复制到该节点上。它的效率源于这样一个事实,即每个作业只复制一次文件,并且能够缓存从机上未存档的存档。
distributedcache可用于分发简单的只读数据/文本文件和/或更复杂的类型,如存档、jar等。存档(zip、tar和tgz/tar.gz文件)在从属节点取消存档。jar可以选择性地添加到任务的类路径中,这是一种基本的软件分发机制。文件具有执行权限。用户还可以选择将分布式缓存文件符号链接到任务的工作目录中。
distributedcache跟踪缓存文件的修改时间戳。显然,在执行作业时,应用程序或外部不应修改缓存文件。
对于python mrjob:-
我想你得用
mrjob.compat.支持新的分布式缓存选项(版本)
然后使用-files和-archives而不是-cachefile和-cachearchive
也许你会在这里得到更多

h79rfbju

h79rfbju2#

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

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流媒体到底是如何实现的,但应该不难理解

相关问题