在Java MapReduce Job中写​​入Hive

时间:2016-11-02 18:09:13

标签: java hadoop mapreduce hive hcatalog

我目前正在开发一个Java MapReduce作业,它应该将数据输出到一个分块的Hive表。

我想到两种方法:

首先通过HCatalog直接写入Hive。问题是,这种方法不支持写入一个分区的Hive表。因此,当使用一个分段的Hive表时,我需要首先写入一个非bucketed表,然后将其复制到一个bucketed表。

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

这里的最佳做法是什么?

对于大量数据(关于内存和时间),哪种方法更具性能?

如果我还可以使用非分区的Hive表,哪种方法会更好?

非常感谢!

1 个答案:

答案 0 :(得分:1)

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

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

此外,来自HIVE documentation

  

CLUSTERED BY和SORTED BY创建命令不会影响数据如何插入表中 - 只会影响它的读取方式。这意味着用户必须小心地通过指定减少器的数量等于桶的数量,并在其查询中使用CLUSTER BY和SORT BY命令来正确插入数据。

因此,您需要调整MapReduce输出以适应这些约束。