kettle 报错 return code 1 from org.apache.hadoop.hive.ql.exec.StatsTask 从mysql导入到hive只有两条数据
kettle 报错 return code 1 from org.apache.hadoop.hive.ql.exec.StatsTask 从mysql导入到hive只有两条数据
·
2024-09-11 20:33:59.421 INFO <mysqltohive2 - 表输出> [E:\JAVA_CODE\spoon\kettle_ktr\mysqltohive2.ktr] 完成处理 (I=0, O=1, R=2, W=0, U=0, E=1)
2024-09-11 20:33:59.427 ERROR <mysqltohive2 - 表输出> [E:\JAVA_CODE\spoon\kettle_ktr\mysqltohive2.ktr] 错误被检测到!
2024-09-11 20:33:59.427 ERROR <mysqltohive2 - 表输出> [E:\JAVA_CODE\spoon\kettle_ktr\mysqltohive2.ktr] 错误被检测到!
2024-09-11 20:33:59.440 ERROR <mysqltohive2 - 表输出> [E:\JAVA_CODE\spoon\kettle_ktr\mysqltohive2.ktr] 错误被检测到!
2024-09-11 20:33:59.451 WARN <mysqltohive2 - 表输出> [E:\JAVA_CODE\spoon\kettle_ktr\mysqltohive2.ktr] 转换被检测
2024-09-11 20:33:59.451 WARN <mysqltohive2 - 表输出> [E:\JAVA_CODE\spoon\kettle_ktr\mysqltohive2.ktr] 转换正在杀死其他步骤!
2024-09-11 20:36:34.361 INFO <Thread-103> [E:\JAVA_CODE\spoon\kettle_ktr\mysqltohive2.ktr] 为了转换解除补丁开始 [mysqltohive2]
2024-09-11 20:36:34.456 INFO <mysqltohive2 - 表输入> [E:\JAVA_CODE\spoon\kettle_ktr\mysqltohive2.ktr] Finished reading query, closing connection.
2024-09-11 20:36:34.458 INFO <mysqltohive2 - 表输入> [E:\JAVA_CODE\spoon\kettle_ktr\mysqltohive2.ktr] 完成处理 (I=14, O=0, R=0, W=14, U=0, E=0)
2024-09-11 20:36:38.837 ERROR <mysqltohive2 - 插入 / 更新> [E:\JAVA_CODE\spoon\kettle_ktr\mysqltohive2.ktr] Error in step, asking everyone to stop because of:
2024-09-11 20:36:38.838 ERROR <mysqltohive2 - 插入 / 更新> [E:\JAVA_CODE\spoon\kettle_ktr\mysqltohive2.ktr] org.pentaho.di.core.exception.KettleDatabaseException:
Error inserting/updating row
Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.StatsTask
at org.pentaho.di.core.database.Database.insertRow(Database.java:1331)
at org.pentaho.di.core.database.Database.insertRow(Database.java:1255)
at org.pentaho.di.core.database.Database.insertRow(Database.java:1243)
at org.pentaho.di.core.database.Database.insertRow(Database.java:1231)
at org.pentaho.di.trans.steps.insertupdate.InsertUpdate.lookupValues(InsertUpdate.java:114)
at org.pentaho.di.trans.steps.insertupdate.InsertUpdate.processRow(InsertUpdate.java:299)
at org.pentaho.di.trans.step.RunThread.run(RunThread.java:62)
at java.lang.Thread.run(Thread.java:750)
Caused by: java.sql.SQLException: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.StatsTask
at org.apache.hive.jdbc.HiveStatement.waitForOperationToComplete(HiveStatement.java:401)
at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:266)
at org.apache.hive.jdbc.HiveStatement.executeUpdate(HiveStatement.java:511)
at org.apache.hive.jdbc.HivePreparedStatement.executeUpdate(HivePreparedStatement.java:122)
at org.pentaho.di.core.database.Database.insertRow(Database.java:1298)
... 7 more
解决方案
set hive.stats.column.autogather=false;
具体场景
1、在使用kettle将mysql中的数据导入hive中时,会报该错误,数据可以插入,但是只有两条。
此时需要在hive的conf路径下创建一个.hiverc文件,将上面的语句追加进文件即可。
2、使用insert into 向hive表中插入数据时,也会出现这个错误
可以在窗口执行这条语句
原理
这个语句的含义是:禁用 Hive 自动收集列级统计信息的功能。
具体作用
-
统计信息:
Hive 提供统计信息(Statistics)以帮助优化器更高效地生成查询执行计划,比如列的最大值、最小值、基数(cardinality)等信息。 -
自动收集:
当hive.stats.column.autogather=true
时,Hive 会在执行CREATE TABLE
或INSERT
操作时自动收集列级统计信息。这可能会增加任务的额外开销。 -
禁用此功能:
将hive.stats.column.autogather
设置为false
后,Hive 不会在这些操作中自动收集列级统计信息。这可以减少任务执行的开销,但如果没有统计信息,查询优化可能会受影响。
适用场景
- 设置为
false
的场景:- 数据量大,自动收集统计信息耗时较长。
- 不需要优化器使用列级统计信息,或者计划手动收集统计信息。
- 在开发环境中测试 Hive 作业性能时。
- 设置为
true
的场景:- 数据查询复杂,希望优化器基于统计信息优化查询。
- 数据量适中,自动收集的性能开销可以接受。
更多推荐
已为社区贡献3条内容
所有评论(0)