【问题标题】:Adding results of Hadoop job to Hive Table将 Hadoop 作业的结果添加到 Hive 表
【发布时间】:2017-02-08 15:58:01
【问题描述】:

我有一个只处理大型文本文件的地图作业。对每一行进行分析和分类。 MultipleOutputs 用于将每个类别输出到单独的文件中。最终,所有数据都被添加到专用于每个类别的 Hive 表中。我目前的工作流程可以完成这项工作,但有点麻烦。我将添加几个类别,并认为我可以简化流程。我有几个想法,正在寻找一些意见。

当前工作流程:

  1. 仅映射作业将大文件划分为类别。输出如下所示:
    类别 1-m-00000
    类别 1-m-00001
    类别 1-m-00002
    类别 2-m-00000
    类别 2-m-00001
    类别 2-m-00002
    类别 3-m-00000
    类别 3-m-00001
    类别 3-m-00002
  1. 外部(非 Hadoop)进程将输出文件复制到每个类别的单独目录中。
    类别 1/00000
    类别 1/00001
    类别 1/00002
    类别 2/00000
    类别 2/00001
    类别 2/00002
    类别 3/00000
    类别 3/00001
    类别 3/00002
  1. 为每个类别创建一个外部表,然后将数据插入到该类别的永久 Hive 表中。

可能的新工作流程

  • 使用 Spark 循环输出文件,并根据文件名将数据插入到相应的永久 Hive 表中。
  • 使用 HCatalog 将数据直接从 Mapper 插入到永久 Hive 表中,或者可能是一个 Reducer 或一组专用于每个类别的 Reducer。

【问题讨论】:

    标签: hadoop apache-spark hive hcatalog qubole


    【解决方案1】:

    对于 MultipleOutputs,将输出路径设置为配置单元外部表所在的基本文件夹。 然后将数据写入"<table_name>/<filename_prefix>"。 您的数据将位于您的目标表中。

    【讨论】:

    • 这就像一个魅力!我不敢相信我错过了那个版本的 write。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多