在Hive上执行Spark SQL查询

时间:2016-03-23 20:55:45

标签: apache-spark hive apache-spark-sql

我是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将如何形成图片?

提前致谢。

1 个答案:

答案 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