繁体   English   中英

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

[英]How does the CONCATENATE in ALTER TABLE command in HIVE works

我试图了解 HIVE 工程中的 ALTER TABLE CONCATENATE 究竟是如何工作的。

我看到了这个链接Hive 'alter table <table name> concatenate' 如何工作? 但我从这个链接中得到的是,对于 ORC 文件,合并发生在条带级别。

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

  1. 连接到底是如何工作的? 它是否查看现有的文件数量以及大小? 连接后如何确定输出 ORC 文件的编号?

  2. 使用 Concatenate 是否存在任何已知问题? 我们计划在维护窗口中每天运行一次连接

  3. 使用 CTAS 是连接的替代方法,哪个更好? 请注意,我的要求是在不影响读取性能的情况下减少 ORC 文件的数量(通过 Nifi 摄取)

任何帮助表示赞赏并提前致谢

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

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

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

正如@leftjoin 所评论的那样,确实可以为相同的基础数据获得不同的输出文件。

这在链接的 HCC 线程中有更多讨论,但关键点是:

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

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

如果您想简化您的流程,那么根据您的数据有多大,您可能还需要在写入 HDFS 之前对其进行批处理。 例如,通过在 NiFi 中设置批量大小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM