我有一组在开始使用Hive之前编写的Hadoop流程。当我们添加Hive时,我们将数据文件配置为外部表。现在我们正在考虑使用HCatalog重写流以输出结果。我们做出改变的主要动机是利用动态分区。
我遇到的障碍之一是我们的一些Reducer会生成多个数据集。今天这是通过副作用文件来完成的,所以我们在一个reduce步骤中将每个记录类型写出到它自己的文件中,我想知道我的选项是用HCatalog做的。
显然,一个选项是让每个作业只生成一个记录类型,为每种类型重新处理一次数据。我想避免这种情况。
某些作业的另一个选项是更改我们的架构,以便所有记录都存储在单个架构中。显然,如果数据因为穷人的分区而被拆分,这个选项很有效,因为HCatalog将负责根据字段对数据进行分区。但是,对于其他作业,记录类型不一致。
似乎我可以使用Reader / Writer接口传递一组编写器上下文,每个模式一个,但我还没有真正考虑过(而且我只是在查看HCatalog一天,所以我可能误解了Reader / Writer界面。
是否有人在单个reduce步骤中编写多个模式的经验?任何指针都会非常感激。
感谢。
安德鲁
答案 0 :(得分:0)
我可以说,正确的方法是使用MultiOutputFormat类。对我来说最大的帮助是在Hive中进行TestHCatMultiOutputFormat测试。
安德鲁