当一些查询在同一个表上运行时,如何将数据加载到HIVE表中以避免锁定问题



我是HIVE的新手。现在我有一个.csv文件,其中包含要附加到HIVE数据库中的表中的数据。但当我运行命令load data inpath /path/to/file into table T1并等待很长时间时,会抛出一个异常:">获取锁时出错:无法获取底层对象上的锁。在一段时间后重试";。这些SQL查询都需要很长的时间(可能需要1~2个小时(才能返回结果。

我通过show locks T1 extended检查了这个表T1中的锁,发现一些查询在同一个表上运行:

T1: SHARED
LOCK_QUERYID:hive_20211203..... (omitted)
LOCK_TIME:1638512103766
LOCK_MODE:IMPLICIT
LOCK_QUERYSTRING: ... (a SQL query involved in table T1)
... (other queries like above)

我查找了HIVE:的配置

SELECT VERSION()    ->    2.1.1-cdh6.2.1 r0a45... (omitted)
SET hive.lock.numretries    ->    100
SET hive.unlock.numretries    ->    10
SET hive.lock.sleep.between.retries     ->    60s
SET hive.txn.manager     ->    org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager
SET hive.support.concurrency     ->    true

该表是一个内部表(MANAGED_table(,而不是分区表。

我的问题是,当查询在同一个表上运行时,如何才能成功地将数据加载到表中。

如果表未处于事务模式,则可以使用hdfs dfs -put命令将文件放入表位置:

hdfs dfs -put localfilepath/* /your/table/location/

它可能会影响正在运行的查询,因此,请自行承担风险。

相关内容

  • 没有找到相关文章

最新更新