Hive 查询失败并出现错误:java.io.IOException:java.lang.IllegalArgumentException:bucketId 超出范围:-1state=,code=0

问题描述

我正在使用 Spark 创建并写入 Hive 托管表(Spark 作业正在完成且没有错误)。但是,从 Hive beeline 控制台查询同一张表会抛出

java.io.IOException: java.lang.IllegalArgumentException: bucketId out 范围:-1 (state=,code=0)`

我还打印了 DataSet<Row> 的值,这是正确的。

下面是火花代码

SparkSession spark = SparkSession.builder().appName("Spark_Hive").enableHiveSupport().getorCreate();
HiveContext hiveContext = new HiveContext(sparkContext);
hiveContext.setConf("hive.exec.dynamic.partition","true");
hiveContext.setConf("hive.exec.dynamic.partition.mode","nonstrict");

spark.sql("CREATE TABLE IF NOT EXISTS table1" + " (num1 INT,num2 INT) STORED AS ORC");

String sql = "with tab1 as(select inline(array(" + "struct(1),struct(2),struct(3),struct(4),struct(5),struct(6)"
        + ")) as num1),tab2 as (select inline(array(" + "struct(1),struct(6)"
        + ")) as num2) select * from tab1 t1 join tab2 t2 on t1.num1=t2.num2";

Dataset<Row> df = hiveContext.sql(sql);
JavaRDD<Row> res = df.toJavaRDD();
StructType schema = new StructType().add("num1","int").add("num2","int");
Dataset<Row> result = hiveContext.createDataFrame(res,schema);
result.write().format("ORC").mode(SaveMode.Append).insertInto("table_" + tableSuffix);
result.unpersist();

从蜂巢直线运行选择查询时,我得到:

0: jdbc:hive2://host> select * from table1; 
INFO  : Compiling command(queryId=hive_20210120020726_8814e02b-d413-4ec8-a9ea-9009734b5618): select * from table1 
INFO  : Semantic Analysis Completed (retrial = false) 
INFO  : Returning Hive schema: Schema(fieldSchemas:[FieldSchema(name:table1.num1,type:int,comment:null),FieldSchema(name:table1.num2,comment:null)],properties:null) 
INFO  : Completed compiling command(queryId=hive_20210120020726_8814e02b-d413-4ec8-a9ea-9009734b5618); Time taken: 0.11 seconds 
INFO  : Executing command(queryId=hive_20210120020726_8814e02b-d413-4ec8-a9ea-9009734b5618): select * from table_1  
INFO  : Completed executing command(queryId=hive_20210120020726_8814e02b-d413-4ec8-a9ea-9009734b5618); Time taken: 0.003 seconds 
INFO  : OK Error: java.io.IOException: java.lang.IllegalArgumentException: bucketId out of range: -1 (state=,code=0)

请帮助解决此问题。

编辑: 尝试了以下帖子中提到的解决方案,没有奏效。

spark throws error when reading hive table

Table loaded through Spark not accessible in Hive

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)