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 自动收集列级统计信息的功能

具体作用

  1. 统计信息
    Hive 提供统计信息(Statistics)以帮助优化器更高效地生成查询执行计划,比如列的最大值、最小值、基数(cardinality)等信息。

  2. 自动收集
    hive.stats.column.autogather=true 时,Hive 会在执行 CREATE TABLEINSERT 操作时自动收集列级统计信息。这可能会增加任务的额外开销。

  3. 禁用此功能
    hive.stats.column.autogather 设置为 false 后,Hive 不会在这些操作中自动收集列级统计信息。这可以减少任务执行的开销,但如果没有统计信息,查询优化可能会受影响。

适用场景

  • 设置为 false 的场景
    • 数据量大,自动收集统计信息耗时较长。
    • 不需要优化器使用列级统计信息,或者计划手动收集统计信息。
    • 在开发环境中测试 Hive 作业性能时。
  • 设置为 true 的场景
    • 数据查询复杂,希望优化器基于统计信息优化查询。
    • 数据量适中,自动收集的性能开销可以接受。
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐