Hive支持行級update、delete時遇到的問題


 

 

 

Hive從0.14版本開始支持事務和行級更新,但缺省是不支持的,需要一些附加的配置。要想支持行級insert、update、delete,需要配置Hive支持事務。(行級的insert好像不配置也能運行)

 

1、修改hive-site.xml,添加如下語句:

<property> 
<name>hive.support.concurrency</name> 
<value>true</value> 
</property> 
<property> 
<name>hive.exec.dynamic.partition.mode</name> 
<value>nonstrict</value> 
</property> 
<property> 
<name>hive.txn.manager</name> 
<value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value> 
</property> 
<property> 
<name>hive.compactor.initiator.on</name> 
<value>true</value> 
</property> 
<property> 
<name>hive.compactor.worker.threads</name> 
<value>1</value> 
</property> 

 

2、修改hive-site.xml 后,執行更新語句,報錯     FAILED: Error in acquiring locks: Error communicating with the metastore

網上查找,說要添加Hive元數據 

INSERT INTO NEXT_LOCK_ID VALUES(1);  
INSERT INTO NEXT_COMPACTION_QUEUE_ID VALUES(1);  
INSERT INTO NEXT_TXN_ID VALUES(1);  
COMMIT;  

但是mysql中以上三個表根本不存在。傻傻的手動在mysql建了這三個表,列名都取為id。還是報錯。看來只能從源頭查找為什么hive自己沒有建立這幾個表。

 

3、在mysql服務器上用wireshark抓包 ,發現是在執行sql語句時出的錯誤。再看出錯時對應的sql語句,是在操作HIVE_LOCKS表,顯示這個表也未創建。所以沒有建立的表不止上面三個。

 

4、hive相關的表(schema)都應該是不存在時自動創建才對,百度之。找到hive創建schema的腳本是scripts/metastore/upgrade/mysql/hive-schema-2.1.0.mysql.sql。
但是這個腳本文件中並沒有找到HIVE_LOCKS表的創建語句,在該目錄下grep HIVE_LOCKS  ./  -R,發現創建的語句寫在hive-txn-schema-2.1.0.mysql.sql。

 

5、查看hive-schema-2.1.0.mysql.sql文件,發現是通過"SOURCE hive-txn-schema-2.1.0.mysql.sq"來加入執行的。網查說是hive元數據庫沒有初始化。可以通過

schematool -dbType mysql -initSchema

來初始化所有schema,執行以上語句后,有報錯,表還是沒創建。於是手動執行

hive -f hive-txn-schema-2.1.0.mysql.sql

相應的表創建成功之后,再測試就可以了。(將hive-site.xml中的元數據庫換了一個,重新新建了一個mysql元數據庫,在執行 schematool -dbType mysql -initSchema 時竟然沒有報錯,那些表也都有了)

 

 

現在遺留的問題:
1. hive-schema-2.1.0.mysql.sql中SOURCE為什么沒生效?

網上說是沒有絕對路徑當然找不到無法執行(如果試圖手動改成絕對路徑重新執行的話,因為其他的sql語句里有一些insert,就會報一些Duplicate key name,Duplicate entry等錯誤...而且txn那個文件里建表不檢查是否exists,多執行幾遍又會報表已經存在錯誤..

使用schemetool就可以避免這些麻煩,而且很明確的知道是否初始化成功.)...。

可是配置里不帶絕對路徑肯定是通常情況都可以執行的啊


2. 執行hive -f hive-txn-schema-2.1.0.mysql.sql時,為什么表就建立在mysql中了,而不是hive本地文件系統 。

3、 schematool -dbType mysql -initSchema  這個到底干了嘛?

 

參考:

http://www.bubuko.com/infodetail-1834078.html

http://blog.csdn.net/wzy0623/article/details/51483674

http://blog.csdn.net/zxc2zxc120/article/details/40543589

 

 

 

新問題:

hive (zqhdb)> delete from  id_test where id=4;
FAILED: SemanticException [Error 10297]: Attempt to do update or delete on table zqhdb.id_test that does not use an AcidOutputFormat or is not bucketed

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM