2017-05-09 71 views
1

我是Spark新手。我正在开发一个Spark-SQL应用程序;我的问题是:Spark SQL是否使用Hive Metastore?

  1. 我读过Spark-SQL在封面下使用Hive Metastore?这是真的?我正在谈论一个纯粹的Spark-SQL应用程序,它没有明确地连接到任何Hive安装。
  2. 我正在启动一个Spark-SQL应用程序,并且不需要使用Hive。有没有任何理由使用Hive?据我所知,Spark-SQL比Hive快得多;所以,我没有看到有任何理由使用Hive。但我是否正确?
+2

Spark为内部使用启动伪Metastore(嵌入式Derby DB),*可选*使用实际的Hive Metastore读取/写入持久Hadoop数据。这并不意味着Spark使用Hive I/O库,只是Hive元数据。 –

回答

0

我读到Spark-SQL在封面下使用Hive Metastore?这是真的?我正在谈论一个纯粹的Spark-SQL应用程序,它没有明确地连接到任何Hive安装。

Spark SQL在封面下未使用Hive Metastore(默认情况下假定为in-memory非Hive目录)。

您可以使用SparkSession来查看。

scala> spark.version 
res0: String = 2.3.0-SNAPSHOT 

scala> spark.sharedState.externalCatalog 
res1: org.apache.spark.sql.catalyst.catalog.ExternalCatalog = [email protected] 

请注意,我用spark-shell,它开始蜂房感知SparkSession,所以我只好用--conf spark.sql.catalogImplementation=in-memory启动将其关闭。

我正在启动一个Spark-SQL应用程序,并且不需要使用Hive。有没有任何理由使用Hive?据我所知,Spark-SQL比Hive快得多;所以,我没有看到有任何理由使用Hive。

这是一个非常有趣的问题,可以有不同的答案(有些甚至主要意见为基础所以我们必须要格外小心,并按照StackOverflow的规则)。

是否有任何理由使用Hive?

但是...如果你想用非常新的Spark 2.2的功能,即基于成本的优化器,你可能要考虑它作为ANALYZE TABLE成本的统计,可以相当昂贵所以对于在不同的Spark应用程序运行中反复使用的表,可以进行一次性能提升。

请注意,没有Hive的Spark SQL也可以这样做,但有一些限制,因为本地默认Metastore仅用于单用户访问,并且在同时提交的Spark应用程序中重用元数据将不起作用。

我看不出有任何理由使用Hive。

我写了一篇博客文章Why is Spark SQL so obsessed with Hive?! (after just a single day with Hive),我问过类似的问题,让我吃惊的是,现在只有(后将近一年我张贴的博客帖子上2016年4月9日)的时候,我想我可能已经明白了为什么蜂巢Metastore的概念是如此重要,尤其是,在多用户Spark笔记本电脑环境中。

Hive本身只是HDFS上的一个数据仓库,所以如果你有Spark SQL,那么它的用处不大,但是仍然有一些概念Hive做得相当好,在Spark SQL中有很多用处(直到它完全站立它自己的腿与蜂巢般的metastore)。

0

如果在初始化HiveContext()对象或spark-shell时没有找到它,它将连接到Hive Metastore或实例化一个。

使用Hive的主要原因是如果您从Hive的托管表中读取HDFS数据,或者希望从外部表格中进行选择。

请记住,Hive只是读写HDFS文件的镜头,而不是执行引擎本身。

相关问题