spark sql是否使用配置单元元存储?

83qze16e  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(383)

我正在开发spark sql应用程序,我有几个问题:
我读到spark sql在封面下使用hive元存储?这是真的吗?我说的是一个纯sparksql应用程序,它不显式连接到任何配置单元安装。
我正在启动一个sparksql应用程序,不需要使用hive。有什么理由用Hive吗?据我所知,sparksql比hive快得多;所以,我看不出有什么理由使用Hive。但我说的对吗?

shyt4zoc

shyt4zoc1#

初始化hivecontext()对象或spark shell时,它将连接到配置单元元存储,如果找不到,则示例化一个。
使用配置单元的主要原因是,您是从配置单元的托管表中读取hdfs数据,还是希望从外部表中方便地进行选择。
记住,hive只是一个读取和写入hdfs文件的镜头,而不是执行引擎本身。

olhwl3o2

olhwl3o22#

我读到spark sql在封面下使用hive元存储?这是真的吗?我说的是一个纯sparksql应用程序,它不显式连接到任何配置单元安装。
sparksql不使用隐藏的配置单元元存储(默认为 in-memory 非配置单元目录,除非你在 spark-shell 相反)。
默认的外部目录实现由spark.sql.catalogimplementation内部属性控制,可以是两个可能的值之一: hive 以及 in-memory .
使用 SparkSession 了解正在使用的目录。

scala> :type spark
org.apache.spark.sql.SparkSession

scala> spark.version
res0: String = 2.4.0

scala> :type spark.sharedState.externalCatalog
org.apache.spark.sql.catalyst.catalog.ExternalCatalogWithListener

scala> println(spark.sharedState.externalCatalog.unwrapped)
org.apache.spark.sql.hive.HiveExternalCatalog@49d5b651

请注意,我曾经 spark-shell 那会引起Hive意识 SparkSession 所以我不得不从 --conf spark.sql.catalogImplementation=in-memory 把它关掉。
我正在启动一个sparksql应用程序,不需要使用hive。有什么理由用Hive吗?据我所知,sparksql比hive快得多;所以,我看不出有什么理由使用Hive。
这是一个非常有趣的问题,可以有不同的答案(有些甚至主要基于意见,所以我们必须格外小心,并遵循stackoverflow规则)。
有什么理由用Hive吗?
不。
但是…如果您想使用spark 2.2的最新特性,即基于成本的优化器,您可能会认为它是 ANALYZE TABLE 因为成本统计可能相当昂贵,所以对在不同spark应用程序运行中反复使用的表执行一次统计可以提高性能。
请注意,没有配置单元的sparksql也可以做到这一点,但是有一些限制,因为本地默认的元存储仅用于单用户访问,并且在同时提交的spark应用程序之间重用元数据是行不通的。
我看不出有什么理由用Hive。
我写了一篇博文为什么spark sql如此痴迷于hive(在与hive相处了一天之后),我问了一个类似的问题,令我惊讶的是,直到现在(在我于2016年4月9日发表博客文章将近一年之后),我才明白hive metastore的概念为何如此重要,尤其是在多用户spark笔记本环境中。
hive本身只是hdfs上的一个数据仓库,所以如果您有sparksql,那么就没有太多用处了,但是仍然有一些hive做得相当好的概念在sparksql中非常有用(直到它完全独立于一个类似hive的metastore)。

相关问题