hive“添加分区”并发

ars1skjm  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(498)

我们有一个用于处理原始日志文件数据的外部配置单元表。文件是每小时一次的,并按日期和源主机名进行分区。
目前,我们正在使用每小时触发几次的简单python脚本导入文件。该脚本根据需要在hdfs上创建子文件夹,从临时本地存储中复制新文件,并将任何新分区添加到配置单元中。
今天,新的分区是使用“altertable。。。添加分区。但是,如果另一个配置单元查询正在表上运行,它将被锁定,这意味着add partition命令将失败(如果查询运行足够长的时间),因为它需要独占锁定。
另一种方法是使用“msck repair table”,由于某些原因,它似乎无法获得表上的任何锁。然而,我得到的印象是,使用维修表是不推荐的生产设置。
在并发环境中以编程方式添加配置单元分区的最佳实践是什么?
使用msck修复表有哪些风险或缺点?
两个分区添加命令的锁定行为看起来不一致,有什么解释吗?i、 它们对运行查询有不同的影响吗?

k75qkfdt

k75qkfdt1#

不是一个好的答案,但我们有同样的问题,以下是我们的发现:
在Hive里,医生,https://cwiki.apache.org/confluence/display/hive/locking ,锁看起来相当合理:“add partition”将请求对所创建分区的独占锁,以及对整个表的共享锁。select查询将请求表上的共享锁。所以应该没事
然而,至少在cdh5.3中,它不是这样工作的。根据这个线索,https://groups.google.com/a/cloudera.org/forum/#!topic/cdh user/u7am9w3pegm这是一个已知的行为,可能是新的(我不确定,但作为本文的作者,我也认为cdh4.7上没有这个问题)
因此,基本上,我们仍在考虑分区策略,但我们可能会尝试提前创建所有可能的分区(在获取数据之前),因为我们确切地知道所有未来分区的值(可能不适合您)。

相关问题