IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> hive查询或者插入数据报return code 2的错误 -> 正文阅读

[大数据]hive查询或者插入数据报return code 2的错误

?

org.apache.hive.service.cli.HiveSQLException: Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask at org.apache.hive.service.cli.operation.Operation.toSQLException(Operation.java:380) at org.apache.hive.service.cli.operation.SQLOperation.runQuery(SQLOperation.java:257) at org.apache.hive.service.cli.operation.SQLOperation.access$800(SQLOperation.java:91) at org.apache.hive.service.cli.operation.SQLOperation$BackgroundWork$1.run(SQLOperation.java:348) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1911) at?

我相信这个问题会困扰大家很久

我摸索出一种解决方案。

设置执行引擎为spark

因为报错的时候,使用的引擎是mr,可以尝试设置tez或者spark引擎,我尝试过后,发现使用spark引擎有效果。

a、配置mapreduce计算引擎
set hive.execution.engine=mr;

b、配置spark计算引擎
set hive.execution.engine=spark;

c、配置tez 计算引擎
set hive.execution.engine=tez;

这样就可以查出数据来了。

上面解决了查询问题。如果是 insert overwrite/into table select * from tablename 这种的插入语句,该如何解决呢?

第一步、设置spark引擎

set hive.execution.engine=spark;

第二步、向临时表中插入数据

解释一下:因为选用了spark引擎,在插入数据以后,会产生许多小文件的问题。本次解决spark产生小文件的问题。

a、新建一个临时表,例如要插入表A中,那么创建一张与表A同构的表作为临时表,这里命名表A_tmp。这一步解决了return code 2的问题

第三步、设置mr引擎

set hive.execution.engine=mr;

将引擎从spark换回mr,这样是为了解决spark小文件的问题。

第四步、将临时表的数据插入到目标表中

第五步、删掉临时表中的数据

具体栗子:

--第一步、设置spark引擎
set hive.execution.engine=spark;

--第二步、向临时表中插入数据
insert overwrite table dw.A_tmp partition(dt = '${dt}') 
select id ,name from ods.t_table 
where dt = '${dt}'
;
--注意,这里的ods、dw指的是数据仓库的分层
--此时A_tmp表中有很多小文件,所以不应该在直接插入到目标表A中,应该在插入之前解决小文件问题

--第三步、设置mr引擎
set hive.execution.engine=mr;

--第四步、将临时表的数据插入到目标表中
insert overwrite table dw.A partition(dt = '${dt}') 
select id ,name from dw.A_tmp 
where dt = '${dt}'
;
--因为此时是mr引擎,所以当A_tmp表向目标表A插入数据时,会自动合并掉小文件到表A中,当然A_tmp表中还是有小文件的

--第五步、删掉临时表中的数据
alter table dw.A_tmp  drop partition (dt ='${dt}');
--因为是临时表,是一个过渡的表,所以删掉或者清空分区中的数据,也就是清空了小文件,这样就减轻了hdfs系统的管理压力。

?我在网上看到的一些观点:

以下拷贝其他作者的话语

使用hive做join查询,a表十几万数据,b表1kw多点数据,结果跑起来就是跑一半返回错误,提示如下:

FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask

尝试

  • 实在是没什么解决办法,然后咨询了别人,说看看是不是有不合理数据,然后查了一下,去掉了一个空数据……然后重新跑,还是不行
  • 谷歌上,看到这个网页,意思是这并不是真的错误,需要去看日志。然后同事去看了日志,没看到什么东西
  • 再考虑是不是队列的事情,结果换了个队列,依然是同样的错误

解决

这个时候我真的开始怀疑是不是数据过大了……虽然理论上倒是不应该,然后同事说要不你试一下换个引擎,然后把引擎换成了Tez,你妈嗨,22s跑出来了结果……擦

这让我情何以堪?就换个引擎,你至于差别这么大么,Map-Reduce和Tez让我感觉实在是太吃惊了

所以再遇到这个问题,确认数据没问题,命令没问题的同学,可以试试这个办法。

感想

解决问题的思路,有时候卡住了可以换个思路,这条路堵住了,看看其他的办法

https://www.cnblogs.com/wswang/p/7718067.html

在这篇文章的启迪下,我摸索出这个办法来。

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-05 17:25:10  更:2021-08-05 17:27:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 18:46:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码