我是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/
它可能会影响正在运行的查询,因此,请自行承担风险。