在配置单元上执行spark sql查询

r9f1avp5  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(334)

我是sparksql新手,但了解配置单元查询执行框架。我想了解spark如何执行sql查询(技术说明)?
如果我按命令开火

val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
sqlContext.sql("select count(distinct(id)) from test.emp").collect

在hive中,它将转换为map reduce作业,但它如何在spark中执行呢?
Hive元存储将如何进入画面?
提前谢谢。

vc9ivgsu

vc9ivgsu1#

简单回答您的问题:不,hivecontext不会启动mr job。您的sql查询仍将使用spark引擎
我将引用spark文档:
除了基本sqlcontext之外,还可以创建hivecontext,它提供基本sqlcontext提供的功能的超集。其他特性包括使用更完整的hiveql解析器编写查询的能力、对配置单元udf的访问以及从配置单元表读取数据的能力。要使用hivecontext,不需要现有的配置单元设置,而且sqlcontext可用的所有数据源仍然可用。hivecontext仅单独打包,以避免在默认spark构建中包含所有配置单元的依赖项。如果这些依赖关系对您的应用程序来说不是问题,那么建议在spark的1.3版本中使用hivecontext。未来的版本将侧重于将sqlcontext提升到与hivecontext的功能对等
因此spark使用hivecontext来增强对现有配置单元表的查询解析和访问,甚至持久化结果Dataframe/表。实际上,hive可以使用spark作为执行引擎,而不是使用mr或tez。
配置单元元存储是关于配置单元表的元数据。当使用hivecontext时,spark可以使用这个metastore服务。请参阅文档:http://spark.apache.org/docs/latest/sql-programming-guide.html

相关问题