在 Java MapReduce 作业中写入 Hive

Write to Hive in Java MapReduce Job

我目前正在处理 Java MapReduce 作业,该作业应将数据输出到分桶 Hive table。

我想到了两种方法:

先直接通过HCatalog写入Hive。问题是,这种方法不支持写入分桶 Hive table。因此,当使用分桶 Hive table 时,我需要先写入非分桶 table,然后将其复制到分桶。

第二个选项是将输出写入文本文件,然后将此数据加载到 Hive 中。

这里的最佳做法是什么?

哪种方法在处理大量数据时性能更好(考虑到内存和所用时间)?

如果我还可以使用非分桶 Hive tables,哪种方法更好?

非常感谢!

对于非分桶 table,您可以将 MapReduce 输出存储在 table 存储位置。然后你只需要 运行 MSCK REPAIR TABLE 用新分区更新元数据。

Hive 的加载命令实际上只是将数据复制到table 存储位置。

此外,来自 HIVE documentation

The CLUSTERED BY and SORTED BY creation commands do not affect how data is inserted into a table – only how it is read. This means that users must be careful to insert data correctly by specifying the number of reducers to be equal to the number of buckets, and using CLUSTER BY and SORT BY commands in their query.

因此您需要调整 MapReduce 输出以适应这些限制。