【问题标题】:Spark read from parquet hive table having timestamp从具有时间戳的镶木地板蜂巢表中读取火花
【发布时间】:2016-09-29 21:26:14
【问题描述】:

我在 Hive 中有一个镶木地板表,其中包含日期和时间戳字段。我现在想从 over spark 中读取此表,但由于 parquet 时间戳兼容性错误而失败。

hive 版本是 1.2.1 & Spark 版本是 1.6.1

线程“主”java.lang.UnsupportedOperationException 中的异常:Parquet 不支持时间戳。见 HIVE-6384 应用程序 在 org.apache.hadoop.hive.ql.io.parquet.serde.ArrayWritableObjectInspector.getObjectInspector(ArrayWritableObjectInspector.java:98) 应用程序 在 org.apache.hadoop.hive.ql.io.parquet.serde.ArrayWritableObjectInspector.(ArrayWritableObjectInspector.java:60)

我尝试从 Hive 上读取,它工作得非常好。但是,从 Spark 上读取时会失败。这是正在尝试运行的查询。

import org.apache.spark.sql.hive._ 
val sqlContext = new HiveContext(sc)
sqlContext.sql("select * from hivetablename limit 10")

hive 表如下所示。

CREATE EXTERNAL TABLE hivetablename (col1 string, date_time timestamp, somedate date) PARTITIONED BY (load_date date) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'  
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 's3n://path'

有什么建议或解决方法吗?

【问题讨论】:

  • 您使用的是什么版本的 hive 和 spark ?你能粘贴给出这个错误的代码吗
  • 将 spark.sql.hive.convertMetastoreParquet 配置设置为 false。当设置为 false 时,Spark SQL 将对 parquet 表使用 Hive SerDe 而不是内置支持。希望这能解决您的问题。
  • 可以使用 SQLContext 上的 setConf 方法或使用 SQL 运行 SET key=value 命令来完成 Parquet 的配置。
  • @ArunakiranNulu 我尝试使用命令行参数“--conf spark.sql.hive.convertMetastoreParquet=false”添加它。它失败并显示相同的错误消息。
  • 看起来是版本兼容性问题,你可能需要用最新版本的蜂巢尝试一次。

标签: apache-spark apache-spark-sql parquet


【解决方案1】:

快速检查一下,请查看您的 Spark 指的是哪个 Hive 版本?确保它不是指较旧的 Hive 版本 (

【讨论】:

  • 没错,它内部引用的 Hive Metastore 是 0.13.1。我尝试将其更改为较新的版本(0.14.0、1.2.1),但是现在失败并出现不同的错误。 -- 线程“main”中的异常 java.lang.NoSuchMethodException: org.apache.hadoop.hive.conf.HiveConf.getTimeVar(org.apache.hadoop.hive.conf.HiveConf$ConfVars, java.util.concurrent.TimeUnit)
  • 我尝试使用 Spark 1.6 的最新版本 hive 设置一个测试集群,它运行良好。该问题似乎与旧版本的 hive Metastore 完全相关。
  • 嗨 Akarsh,您使用的是哪个版本的 hive?
【解决方案2】:

首先检查 Spark 版本及其 hive 依赖版本(是否兼容)

如果 spark 版本和 hive 版本都兼容并且仍然出现错误,请检查以下内容: 在您的 spark 配置中添加以下内容
a) spark.sql.hive.metastore.version 1.2.1
b) spark.sql.hive.metastore.jars 内置

如果您使用的是 databricks 集群,您可以将这些添加到集群配置中: Configuration->Advanced Options->Spark-> Spark Conf

添加了对1.2.x 版本的支持

【讨论】:

  • 嗨,Ravindra,欢迎来到 SO。也许用户必须升级 Hive 依赖才能与 spark 版本完美匹配。
  • 嗨尼奥,也可能是另一种方式。用户可能需要升级 spark 版本。
猜你喜欢
  • 2021-09-05
  • 1970-01-01
  • 2016-12-11
  • 1970-01-01
  • 2018-12-20
  • 2019-02-19
  • 2016-08-22
  • 1970-01-01
  • 2017-03-17
相关资源
最近更新 更多