【问题标题】:Python packaging for hive/hadoop streaming用于 hive/hadoop 流的 Python 打包
【发布时间】:2015-03-17 19:28:37
【问题描述】:

我有一个使用 python 编写的自定义映射器和减速器的配置单元查询。 mapper 和 reducer 模块依赖于一些未安装在我的集群上的第 3 方模块/包(不能将它们安装在集群上)。我只有在运行 hive 查询时才意识到这个问题,但它却说找不到 xyz 模块。

如何打包整个内容,以便在流式传输作业中拥有所有可用的依赖项(包括传递依赖项)?如何在我的 mapper 和 reducer 中使用这样的打包和导入模块?

这个问题相当幼稚,但即使经过一个小时的谷歌搜索,我也找不到答案。此外,当 mapper/reducer 是用 python 编写时,它不仅适用于 hive,而且通常适用于 hadoop 流作业。

【问题讨论】:

    标签: python hadoop mapreduce hadoop-streaming


    【解决方案1】:

    这可以通过将依赖项和 reducer 脚本打包到一个 zip 中来完成,并将这个 zip 作为资源添加到 Hive 中。

    假设 Python reducer 脚本依赖于包 D1,而包 D1 又依赖于 D2(从而解决了 OP 对传递依赖的查询),并且 D1 和 D2 都没有安装在集群中的任何机器上。

    • 将 D1、D2 和 Python reducer 脚本(我们称之为 reducer.py)打包到 dep.zip 中
    • 在以下示例查询中使用此 zip:

      添加存档 dep.zip;

      FROM (some_table) t1
      插入覆盖表 t2
      REDUCE t1.col1, t1.col2 使用 'python dep.zip/dep/reducer.py' 作为输出;

    注意第一行和最后一行。 Hive 解压缩存档并创建这些目录。 dep 目录将保存脚本和依赖项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-15
      • 1970-01-01
      • 2011-09-19
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多