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

最佳答案

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

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

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

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

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

对于Python mrJob:-

我认为你必须使用

mrjob.compat.supports_new_distributed_cache_options(版本)

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

也许你会得到更多的here

08-05 07:25