【发布时间】:2018-10-11 13:32:46
【问题描述】:
无法从 Hive 访问通过 Spark (pyspark) 创建的 Hive 表。
df.write.format("orc").mode("overwrite").saveAsTable("db.table")
从 Hive 访问时出错:
错误:java.io.IOException:java.lang.IllegalArgumentException:bucketId 超出范围:-1 (state=,code=0)
在 Hive 中成功创建了表,并且能够在 spark 中读取该表。可以访问表元数据(在 Hive 中)和表(在 hdfs)目录中的数据文件。
Hive 表的 TBLPROPERTIES 是:
'bucketing_version'='2',
'spark.sql.create.version'='2.3.1.3.0.0.0-1634',
'spark.sql.sources.provider'='orc',
'spark.sql.sources.schema.numParts'='1',
我也尝试使用其他解决方法创建表,但在创建表时出错:
df.write.mode("overwrite").saveAsTable("db.table")
或
df.createOrReplaceTempView("dfTable")
spark.sql("CREATE TABLE db.table AS SELECT * FROM dfTable")
错误:
AnalysisException: u'org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(message:Table default.src 由于以下原因未能通过严格的托管表检查:表被标记为托管表但不是事务性的。);'
堆栈版本详情:
Spark2.3
Hive3.1
Hortonworks 数据平台 HDP3.0
【问题讨论】:
-
你是否设置了 hive.strict.managed.tables=true
-
是的,默认是这样的。
-
表被标记为托管表 => 内部表。在表属性中,是否可以尝试添加'transactional'='true?
-
我怀疑这是一个错误。 issues.apache.org/jira/browse/HIVE-20593
-
2018 年 9 月 26 日固定。
标签: apache-spark hadoop hive pyspark hortonworks-data-platform