您的位置:首页 > 大数据 > Hadoop

Hive 新建分区异常处理:FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.

2020-07-12 17:33 375 查看

今天在测试 hive 相关语句时,发生了一个非常奇妙的错误,就是在我创建分区时,突然出现了一个异常:FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.
这让我有些猝不及防,毕竟以前没遇到过,于是我便在网上寻求解决方法,同是天涯沦落人。
**方法一:**降低Mysql-connect jar包的版本,将它降低到5.1.27,而我正好用的是5.1.38;虽然搞不懂他说的原理,毕竟他成功了,试试,好不容易找到了相应的 jar 包,满怀地启动服务程序。。。。。。继续报错,习惯了,PASS。
**方法二:**说是将hive-site.xml中的hive.metastore.schema.verification属性设置为true,默认情况下为false。尝试了一下,依旧不行,PASS。
**方法三:**便是更改MySQL中hive的 character_set_database 的编码格式改为 latin1;我记得之前有个异常我该过,查看了一下,果然没问题。本以为这个方法也不行,但是之后多看了帖子,尝试了多次,最终发现这个方法是可以解决问题,但是操作过程并没有网上说的那么简单,而且需要有一定的操作步骤。
以下是我总结的正确的操作步骤:

  1. 关闭 Hive 服务进程
    如果没有关闭的话,之后操作的效果基本无法实现,从而无法解决异常问题。
    exit; -> 退出 hive 操作界面
    Ctrl+C(两个键一起按下,无法退出则多按几次)-> 退出 hive 进程
    (以上操作应该再不同 Xshell 界面)

  2. 进入 MySQL 数据库,并删除 hive 数据库

    mysql -u root -p
    //输入数据库密码
    drop database hive;

    操作完成后,界面保持 MySQL 数据库,另外新建链接窗口执行下一步操作

  3. 再次初始化 Hive 的数据库

    schematool -dbType mysql -initSchema

    初始化之后,MySQL 中会自动载入新的 hive 数据库。

  4. 返回 MySQL 界面,进入 Hive 数据库,更改编码格式

    use hive;
    alter database hive character set latin1;
    #最后查看一下 character_set_database 是否为 latin1;之前也可以先查一下,看看是否编码是否错误。
    show variables like '%char%';
    #之后就没有 MySQL 数据库的操作了,可以退出;
    exit;
  5. 再次启动 Hive 进程

    hive --service metastore
    #保持窗口,保持进程运行
  6. 另起窗口,进入 Hive
    这个时候,我发现之前新建的数据库和表会保存在 HDFS 中,但是新建的 hive 中并没这些数据,所有数据都要新建;
    不过我发现一个奇妙的事,如果新建的数据库和数据表和之前的建的数据库和表重名的话,新数据会覆盖掉旧的数据,如果有人知道的话,这是为啥呢,大家可以在评论区讨论讨论。
    谢谢大家的观看,希望所有人都能迅速解决问题。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐