我有一个只处理大型文本文件的地图作业。对每一行进行分析和分类。MultipleOutputs 用于将每个类别输出到单独的文件中。最终,所有数据都被添加到专用于每个类别的 Hive 表中。我目前的工作流程可以完成这项工作,但有点麻烦。我将添加几个类别,并认为我可以简化流程。我有几个想法,正在寻找一些意见。
当前工作流程:
- 仅映射作业将大文件划分为类别。输出如下所示:
-
类别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
- 外部(非 Hadoop)进程将输出文件复制到每个类别的单独目录中。
-
类别1/00000
类别1/00001
类别1/00002
类别2/00000
类别2/00001
类别2/00002 类别
3/00000 类别
3/00001 类别
3/00002
- 为每个类别创建一个外部表,然后将数据插入到该类别的永久 Hive 表中。
可能的新工作流程
- 使用 Spark 循环输出文件,并根据文件名,将数据插入到相应的永久 Hive 表中。
- 使用 HCatalog 将数据直接从 Mapper 插入到永久 Hive 表中,或者可能是一个 Reducer 或一组专用于每个类别的 Reducer。