当前位置: 首页 > 知识库问答 >
问题:

Spark SQL是否使用Hive元存储?

刘永望
2023-03-14

我正在开发Spark SQL应用程序,我有几个问题:

  1. 我读到Spark SQL在封面下使用Hive metastore?这是真的吗?我说的是一个纯Spark SQL应用程序,它不显式连接到任何配置单元安装
  2. 我正在启动一个Spark SQL应用程序,不需要使用Hive。有什么理由使用蜂箱吗?据我所知,Spark SQL比Hive快得多;所以,我看不出有任何理由使用蜂箱。但我说得对吗

共有2个答案

华锦程
2023-03-14

它将连接到HiveMetastore或实例化一个,如果没有发现当您初始化HiveContext()对象或火花外壳。

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

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

徐鑫鹏
2023-03-14

我读到Spark-SQL在封面下使用Hive metastore?这是真的吗?我说的是一个纯粹的Spark-SQL应用程序,它没有显式连接到任何Hive安装。

SparkSQL不使用Hive转移(默认为内存中非Hive目录,除非您在spack-shell中执行相反的操作)。

默认的外部目录实现由spark控制。sql。catalogImplementation内部属性,可以是两个可能的值之一:hive内存中的

使用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

请注意,我使用了spack-shell,它确实启动了一个可感知蜂巢的Spark会话,所以我不得不使用--confspark.sql.catalog实施=内存中来启动它来关闭它。

我正在启动一个Spark SQL应用程序,不需要使用Hive。有什么理由使用蜂箱吗?据我所知,Spark SQL比Hive快得多;所以,我看不出有任何理由使用蜂箱。

这是一个非常有趣的问题,可以有不同的答案(有些甚至主要基于观点,所以我们必须格外小心,并遵循StackOverflow规则)。

有什么理由使用蜂箱吗?

但是如果您想使用火花2.2的最新特性,即基于成本的优化器,您可能需要考虑它为“代码>分析表< /代码>,因为成本统计可能相当昂贵,所以在不同的星火应用程序运行中反复使用的表一次就可以提高性能。

请注意,没有配置单元的Spark SQL也可以做到这一点,但有一些限制,因为本地默认元存储仅用于单用户访问,并且在同时提交的Spark应用程序之间重用元数据是行不通的。

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

我写了一篇博文,为什么Spark SQL如此痴迷于Hive?!(在与Hive相处了一天之后)我问了一个类似的问题,令我惊讶的是,直到现在(在我于2016年4月9日发布这篇博文将近一年之后),我才明白Hive metastore的概念为何如此重要,尤其是在多用户Spark笔记本环境中。

Hive本身只是HDFS上的一个数据仓库,所以如果你有Spark SQL,它就没有多大用处了,但仍然有一些概念Hive做得相当好,在Spark SQL中非常有用(直到它完全独立于Hive一样的元存储)。

 类似资料:
  • 这些查询是:select*from t1 where col1='123'[t1由col1 bucketted]select*from t1 where col2='123'[col2不是bucketting列]我的问题是 > 如何确定在查询执行期间正在进行全表扫描还是正在进行相关的部分表扫描? 我能从DAG或物理计划中得到任何信息吗?我两个都看过,但我看不出有什么不同,就像我在物理计划中看到的那

  • 问题内容: 我正在通过.NET应用程序中的ODBC驱动程序连接到Hive。是否存在查询以确定表是否已存在? 例如,在MSSQL中,您可以查询表,而在Netezza中,您可以查询表。 任何援助将不胜感激。 问题答案: 您可以通过两种方法进行检查: 1.)如@dimamah所建议,只需在此处添加一点,对于这种方法,您需要 2.)第二种方法是使用HiveMetastoreClient API,您可以在其

  • 问题内容: 有没有一种方法可以测试元素是否存在?任何findElement方法都将以异常结尾,但这不是我想要的,因为它可能是一个元素不存在并且没关系,这不是测试失败,因此异常不能成为解决方案。 我发现了这篇文章:Seleniumc#Webdriver:等待元素出现,但这是针对C#的,我不是很擅长。谁能将代码翻译成Java?抱歉,我在Eclipse中进行了尝试,但我没有将其正确地插入Java代码中。

  • 问题内容: 有没有一种方法可以测试元素是否存在?任何findElement方法都将以异常结尾,但这不是我想要的,因为它可能是某个元素不存在并且没关系,这不是测试失败,因此异常不能成为解决方案。 我发现了这篇文章:Selenium c#Webdriver:等待元素出现, 但这是针对C#的,我不是很擅长。谁能将代码翻译成Java?抱歉,我在Eclipse中进行了尝试,但我没有将其正确地插入Java代码

  • 本文向大家介绍Hive中存放是什么?相关面试题,主要包含被问及Hive中存放是什么?时的应答技巧和注意事项,需要的朋友参考一下 表。 存的是和hdfs的映射关系,hive是逻辑上的数据仓库,实际操作的都是hdfs上的文件,HQL就是用sql语法来写的mr程序。

  • 在RedHat测试服务器中,我安装了hadoop 2.7,并运行了Hive、Pig 我把IP作为localhost,因为它是单节点机器。之后我甚至无法连接到Hive。这是抛出错误 线程"main"中的异常java.lang.RuntimeException:java.lang.RuntimeException:无法实例化org.apache.hadoop.hive.ql.metadata.Sess