我是Spark SQL的新手,但知道hive查询执行框架。我想了解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 Metastore将如何形成图片?
提前致谢。
答案 0 :(得分:0)
简要回答你的问题:不,HiveContext不会启动MR作业。您的SQL查询仍将使用spark引擎
我将引用spark文档:
除了基本的SQLContext之外,您还可以创建HiveContext,它提供基本SQLContext提供的功能的超集。其他功能包括使用更完整的HiveQL解析器编写查询,访问Hive UDF以及从Hive表读取数据的功能。要使用HiveContext,您不需要现有的Hive设置,并且SQLContext可用的所有数据源仍然可用。 HiveContext仅单独打包,以避免在默认的Spark构建中包含所有Hive的依赖项。如果这些依赖项不是您的应用程序的问题,那么建议在1.3版本的Spark中使用HiveContext。未来版本将专注于将SQLContext与HiveContext
进行功能奇偶校验
因此,Spark使用HiveContext来增强查询解析和访问现有Hive表,甚至可以保留结果DataFrames / Tables。实际上,Hive可以使用Spark作为执行引擎,而不是使用MR或tez。
Hive Metastore是关于Hive表的元数据。当使用HiveContext时,spark可以使用此Metastore服务。请参阅文档:http://spark.apache.org/docs/latest/sql-programming-guide.html