zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    纽约顶级富婆鄙视链:4星|《我是个妈妈,我需要铂金包:一个耶鲁人类学博士的上东区育儿战争》
    2星|陈春花《顺德40年》:各种官宣的汇编,内容太虚,新信息太少
    人们喜欢传播符合自己三观的新闻,不在乎真假:4星|《环球科学》2018年12月号
    营销相关21本书
    5星|《辩论:美国制宪会议记录》:200年前的会议纪要
    3星|《品牌物理学》:理论没有实际应用案例,有推销软件的嫌疑
    关于思考的思考12本书,5星2本,4星7本
    Chrome插件 postman的使用方法详解!最全面的教程
    postman发送json请求,使用案例
    SUSE Enterprise Server 12 SP3 64 设置防火墙开放8080端口
  • 原文地址:https://www.cnblogs.com/qiuhong10/p/7588679.html
Copyright © 2011-2022 走看看