【发布时间】:2020-02-06 08:24:55
【问题描述】:
我们有一个基于 Hadoop 的解决方案 (CDH 5.15),我们在 HDFS 中的某些目录中获取新文件。在这些目录的顶部,我们有 4-5 个 Impala (2.1) 表。在 HDFS 中写入这些文件的过程是 Spark Structured Streaming (2.3.1)
现在,我们在将文件写入 HDFS 后立即运行一些 DDL 查询:
ALTER TABLE table1 RECOVER PARTITONS检测添加到表中的新分区(及其 HDFS 目录和文件)。REFRESH table1 PARTITIONS (partition1=X, partition2=Y),使用每个分区的所有键。
目前,此 DDL 花费的时间有点过长,并且它们正在我们的系统中排队,从而损害了系统的数据可用性。
所以,我的问题是:有没有办法更有效地进行数据整合?
我们考虑过:
使用
ALTER TABLE .. RECOVER PARTITONS,但按照the documentation,它只刷新新分区。尝试一次将
REFRESH .. PARTITON ...与多个分区一起使用,但语句语法不允许这样做。尝试批处理查询,但 Hive JDBC 驱动器不支持批处理查询。
鉴于系统已经很忙,我们是否应该尝试并行执行这些更新?
- 您还知道其他方式吗?
谢谢!
维克多
注意:我们知道哪些分区需要刷新的方法是使用 HDFS 事件,就像使用 Spark Structured Streaming 一样,我们不知道文件写入的确切时间。
注意 #2:另外,用 HDFS 编写的文件有时很小,所以如果可以同时合并这些文件,那就太好了。
【问题讨论】:
-
对您的问题没有答案,抱歉,只是想提一下,新的 Impala 版本添加了“不干涉”元数据管理功能。见impala.apache.org/docs/build/html/topics/impala_metadata.html。
-
谢谢@mazaneicha!这似乎很有希望!我们正计划升级我们的堆栈,所以也许这是另一个原因。
-
请检查来自 hive 的 msck repair 命令是否有用。
标签: hadoop impala spark-structured-streaming cloudera-cdh