Spark 不显示 Hive 表中的数据

Posted

技术标签:

【中文标题】Spark 不显示 Hive 表中的数据【英文标题】:Spark does not show data residing in a hive table 【发布时间】:2018-02-09 12:50:24 【问题描述】:

假设我使用 Spark 创建了下表:

df = spark.createDataFrame([(1, 4), (2, 5), (3, 6)], ["A", "B"])
df.write.mode("overwrite").saveAsTable("hivedb.mwe")

现在,如果我尝试计算此表中的数据:

> spark.sql("SELECT count(*) FROM hivedb.mwe").show()

+--------+
|count(1)|
+--------+
|       0|
+--------+

但是,如果我使用 Hive(或 Impala,结果相同)计算数据

jdbc:hive2:...> SELECT count(*) FROM hivedb.mwe

+------+--+
| _c0  |
+------+--+
| 3    |
+------+--+

spark 似乎看不到 mwe 中的数据,这可能是怎么回事?

作为插件,Spark 非常了解表格:

> spark.sql("DESCRIBE hivedb.mwe").show()

+--------+---------+-------+
|col_name|data_type|comment|
+--------+---------+-------+
|       A|   bigint|   null|
|       B|   bigint|   null|
+--------+---------+-------+

只是为了完整性:

Spark 版本:v2.2.0.cloudera1 hivedb 是使用非标准位置参数创建的 hive 数据库 集群是 完全kerberized

HDFS 包含:

[myuser@cluster~]$ hdfs dfs -ls /path/to/hivedb/mwe
Found 3 items
-rw-r--r--   3 myuser somegroup          0 2018-02-09 13:29 /path/to/hivedb/mwe/_SUCCESS
-rw-r--r--   3 myuser somegroup          526 2018-02-09 13:29 /path/to/hivedb/mwe/part-00000-f1e79c0d-fca5-4a46-aa70-3651baa96a90-c000.snappy.parquet
-rw-r--r--   3 myuser somegroup          545 2018-02-09 13:29 /path/to/hivedb/mwe/part-00001-f1e79c0d-fca5-4a46-aa70-3651baa96a90-c000.snappy.parquet

【问题讨论】:

您的 sparksession 是否是使用 enableHivesupport 创建的。您在 spark 中保存的 dB 名称和在 hive 中的读数看起来不同 是的,hive 支持已启用。不同的表名是由于我在创建示例时引入的拼写错误造成的。我更正了这个问题。 我认为 Bug 是问题。 【参考方案1】:

它似乎是 cloudera 2.2 中的一个已知问题。

https://www.cloudera.com/documentation/spark2/latest/topics/spark2_known_issues.html#SPARK-21994

提供了最佳替代解决方案,您可以查看上述链接并执行解决方案并查看解决方案是否可行。

这些是解决方案

val options = Map("path" -> "/path/to/hdfs/directory/containing/table")
df.write.options(options).saveAsTable("db_name.table_name")

spark.sql("alter table db_name.table_name set SERDEPROPERTIES ('path'='hdfs://host.example.com:8020/warehouse/path/db_name.db/table_name')")
spark.catalog.refreshTable("db_name.table_name")

【讨论】:

以上是关于Spark 不显示 Hive 表中的数据的主要内容,如果未能解决你的问题,请参考以下文章

Spark Shell 的 Spark Session 中不显示新插入的 Hive 记录

如何使用 Spark SQL 识别 hive 表中的分区列

SPARK 中可用但未显示在 Hive CLI 中的 HIVE 表

Zeppelin:在 HDP3.0 中不显示 Hive 数据库/表

Hive中的Timestamp类型日期与Impala中显示不一致分析

使用spark对hive表中的多列数据判重