hive-19994 bug java.sql.BatchUpdateException
事件背景:
大数据应用跑业务时候,涉及对hive表删除操作。删除过程中,会引起hive metastore报错:java.sql.BatchUpdateException: Cannot delete or update a parent row: a foreign key constraint fails ("hivemetastore_emtig3vtq7qp1tiooo07sb70ud"."COLUMNS_V2", CONSTRAINT "COLUMNS_V2_FK1" FOREIGN KEY ("CD_ID") REFERENCES "CDS" ("CD_ID"))。
问题分析:
此为hive 的一个bug,详细信息如
https://issues.apache.org/jira/browse/HIVE-19994
hive的表元数据存储在mysql中,mysql中两表之间有外键约束(关于mysql外键约束详见下文),导致无法删除。
mysql 外键约束介绍:
l RESTRICT: 拒绝删除或者更新父表。指定RESTRICT(或者NO ACTION)和忽略ON DELETE或者ON UPDATE选项的效果是一样的。(mysql创建表时,外键约束默认值)
l CASCADE: 从父表中删除或更新对应的行,同时自动的删除或更新自表中匹配的行。ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支持。
解决方案:
l 官方推荐解决方案:
更改hive-metastore.jar包中的package.jdo,添加如下内容:
此行下边添加如下内容:
</datastore-identity> 此行下边添加如下内容: <field name="cols" table="COLUMNS_V2" > <collection element-type="MFieldSchema"/> <foreign-key name="COLUMNS_V2_FK1" delete-action="cascade"/> <join> <primary-key name="COLUMNS_PK"> <column name="COLUMN_NAME"/> </field>
l 其他可行方案:(公司采取)
在mysql中删除表COLUMNS_V2的外键,重新创建外键,并制定外键约束为ON DELETE CANSCADE和ON UPDATE CANSCADE
ALTER TABLE COLUMNS_V2 DROP FOREIGN KEY COLUMNS_V2_FK1
ALTER TABLE COLUMNS_V2 ADD CONSTRAINT COLUMNS_V2_FK1 FOREIGN KEY (CD_ID) REFERENCES CDS(CD_ID)ON DELETE CANSCADE ON UPDATE CANSCADE;

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
设计模式之单例模式
单例模式,是一种比较简单的设计模式,也是属于创建型模式(提供一种创建对象的模式或者方式)。 要点: **1.**涉及一个单一的类,这个类来创建自己的对象(不能在其他地方重写创建方法,初始化类的时候创建或者提供私有的方法进行访问或者创建,必须确保只有单的对象被创建)。 **2.**单例模式不一定是线程不安全的。 **3.**单例模式可以分为两种:懒汉模式(在第一次使用类的时候才创建,可以理解为类加载的时候特别懒,要用的时候才去获取,要是没有就创建,由于是单例,所以只有第一次使用的时候没有,创建后就可以一直用同一个对象),饿汉模式(在类加载的时候就已经创建,可以理解为饿汉已经饿得饥渴难耐,肯定先把资源紧紧拽在自己手中,所以在类加载的时候就会先创建实例) 关键字: 单例:singleton 实例:instance 同步: synchronized 饿汉模式(2种): 第一种single是public,可以直接通过Singleton类名来访问 publicclassSingleton{ //私有化构造方法,以防止外界使用该构造方法创建新的实例 privateSingleton(){ } //默...
- 下一篇
Jenkins与Docker的自动化CI/CD
高效的CI/CD环境能获得什么呢? 及时发现问题:提早得到集成反馈和修复 大幅度减少故障率:业务流程化,减少人工出错风险 加快迭代速度:可以在几分钟内运行几十次、甚至上百次持续集成 减少时间成本:多项目管理及繁琐的部署工作没有了,不必再花费一定时间去准备 研发端到端流水线,一键部署,应用弹性伸缩,灰度发布 要想做到一个高效的CI/CD流程,需要有能力整合DevOps工具链及多环境适配,并且设计之初以自动化为原则,如一键部署、一键升级。 发布流程设计 1.开发语言:Java 2.项目代码版本管理:Git 3.代码编译:Maven 4.持续集成:Jenkins 5.交付:以Docker镜像形式交付,提交至Harbor 6.部署:Docker主机创建容器 环境规划如下: 角色 IP Docker 192.168.30.128 Jenkins 192.168.30.129 Git 192.168.30.130 工作流程: 开发人员提交代码到Git版本仓库; Jenkins人工/定时触发项目构建; Jenkins拉取代码、代码编译、打包镜像、推送到镜像仓库; Jenkins在Docker主机创建...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS关闭SELinux安全模块
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2全家桶,快速入门学习开发网站教程
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2配置默认Tomcat设置,开启更多高级功能