【问题标题】:Share specific data between each mapper在每个映射器之间共享特定数据
【发布时间】:2013-06-06 14:49:04
【问题描述】:

我想添加一个特定的记录子集,以便与每个映射器的每个记录块合并,我通常如何在 Hadoop 中执行此操作?并在 Python 流包 mrJob 中?

【问题讨论】:

    标签: python hadoop mapreduce hadoop-streaming mrjob


    【解决方案1】:

    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

    【讨论】:

      【解决方案2】:

      不确定您到底想做什么,但也许您可以使用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 流式传输究竟是如何完成的,但应该不难弄清楚

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-15
        • 2018-04-03
        • 2021-10-04
        • 2020-11-26
        相关资源
        最近更新 更多