HIVE中的ALTER TABLE命令中的CONCATENATE如何工作

时间:2018-09-04 16:20:58

标签: hadoop hive concatenation alter

我试图了解HIVE中ALTER TABLE CONCATENATE的工作原理。

我看到了此链接How does Hive 'alter table <table name> concatenate' work?,但是我从该链接中获得的仅仅是ORC文件的合并是在条带级别进行的。

我正在寻找有关CONCATENATE如何工作的详细说明。例如,我最初在HDFS中有500个小的ORC文件。我运行了Hive ALTER TABLE CONCATENATE,文件合并为27个更大的文件。随后的CONCATENATE运行将文件数量减少到16,最后我得到了两个大文件。(使用Hive 0.12版本)所以我想了解

  1. CONCATENATE的工作原理如何?它会查看现有文件的数量以及大小吗?串联后如何确定输出的ORC文件的编号:

  2. 使用Concatenate是否存在任何已知问题?我们计划每天在维护窗口

  3. 中运行一次连接
  4. 使用CTAS是否可以替代串联,哪个更好?请注意,我的要求是减少ORC文件(通过Nifi摄取)的数量,而又不影响Read的性能

我们将不胜感激,在此先感谢

2 个答案:

答案 0 :(得分:1)

可以通过以下两个值控制连接文件的大小:

set mapreduce.input.fileinputformat.split.minsize=268435456;
set hive.exec.orc.default.block.size=268435456;

应根据您的 HDFS/MapR-FS 块大小设置这些值。

答案 1 :(得分:0)

正如@leftjoin所说,确实可以为相同的基础数据获取不同的输出文件。

linked HCC thread中对此进行了更多讨论,但关键是:

  

串联取决于首先选择的文件。

请注意,在正常情况下,拥有不同大小的文件应该不是问题。

如果要简化过程,则取决于数据量,您可能还需要在写入HDFS之前对其进行一点批处理。例如,通过在NiFi中设置批量大小。