我试图了解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版本)所以我想了解
CONCATENATE的工作原理如何?它会查看现有文件的数量以及大小吗?串联后如何确定输出的ORC文件的编号:
使用Concatenate是否存在任何已知问题?我们计划每天在维护窗口
使用CTAS是否可以替代串联,哪个更好?请注意,我的要求是减少ORC文件(通过Nifi摄取)的数量,而又不影响Read的性能
我们将不胜感激,在此先感谢
答案 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中设置批量大小。