将 Hadoop 作业的结果添加到 Hive Table
Adding results of Hadoop job to Hive Table
我有一个处理大型文本文件的仅限地图的作业。每行都经过分析和分类。 MultipleOutputs 用于将每个类别输出到单独的文件中。最终,所有数据都被添加到专用于每个类别的 Hive table 中。我当前的工作流程可以完成这项工作,但有点麻烦。我将添加几个类别,并认为我可以简化流程。我有几个想法,正在寻找一些意见。
当前工作流程:
- Map-only 作业将大文件分成几类。输出如下所示:
类别 1-m-00000
类别 1-m-00001
类别 1-m-00002
类别 2-m-00000
类别 2-m-00001
类别 2-m-00002
类别 3-m-00000
categ3-m-00001
categ3-m-00002
- 外部(非 Hadoop)进程将输出文件复制到每个类别的单独目录中。
categ1/00000
categ1/00001
categ1/00002
categ2/00000
categ2/00001
categ2/00002
categ3/00000
categ3/00001
categ3/00002
- 为每个类别创建一个外部 table,然后将数据插入该类别的永久 Hive table。
可能的新工作流程
- 使用Spark循环输出文件,根据文件名,将数据插入到合适的永久Hive中table.
- 使用 HCatalog 将数据直接从 Mapper 或一个 Reducer 或一组专用于每个类别的 Reducer 插入永久 Hive table。
对于 MultipleOutputs,将输出路径设置为配置单元外部表所在的基本文件夹。
然后将数据写入"<table_name>/<filename_prefix>"
。
您的数据将位于您的目标表中。
我有一个处理大型文本文件的仅限地图的作业。每行都经过分析和分类。 MultipleOutputs 用于将每个类别输出到单独的文件中。最终,所有数据都被添加到专用于每个类别的 Hive table 中。我当前的工作流程可以完成这项工作,但有点麻烦。我将添加几个类别,并认为我可以简化流程。我有几个想法,正在寻找一些意见。
当前工作流程:
- Map-only 作业将大文件分成几类。输出如下所示:
-
类别 1-m-00000
类别 1-m-00001
类别 1-m-00002
类别 2-m-00000
类别 2-m-00001
类别 2-m-00002
类别 3-m-00000
categ3-m-00001
categ3-m-00002
- 外部(非 Hadoop)进程将输出文件复制到每个类别的单独目录中。
-
categ1/00000
categ1/00001
categ1/00002
categ2/00000
categ2/00001
categ2/00002
categ3/00000
categ3/00001
categ3/00002
- 为每个类别创建一个外部 table,然后将数据插入该类别的永久 Hive table。
可能的新工作流程
- 使用Spark循环输出文件,根据文件名,将数据插入到合适的永久Hive中table.
- 使用 HCatalog 将数据直接从 Mapper 或一个 Reducer 或一组专用于每个类别的 Reducer 插入永久 Hive table。
对于 MultipleOutputs,将输出路径设置为配置单元外部表所在的基本文件夹。
然后将数据写入"<table_name>/<filename_prefix>"
。
您的数据将位于您的目标表中。