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