2016-03-23 83 views
1

我是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 metastore将如何进入图片?

在此先感谢。

回答

0

简要回答您的问题:不,HiveContext不会启动MR作业。你的SQL查询将仍然使用火花引擎

我将从火花文件引用:

除了基本SQLContext,你还可以创建一个HiveContext,它提供了所提供的功能的超基本的SQLContext。其他功能还包括使用更完整的HiveQL解析器编写查询,访问Hive UDF以及从Hive表读取数据的能力。要使用HiveContext,您不需要具有现有的Hive安装程序,并且所有可用于SQLContext的数据源仍可用。 HiveContext只是单独打包,以避免在默认的Spark构建中包含Hive的所有依赖项。如果这些依赖关系对您的应用程序不是问题,那么建议在1.3版本的Spark中使用HiveContext。未来的版本将着力引进SQLContext高达功能平价与HiveContext

所以HiveContext用于火花,以提高查询解析和访问现有的蜂巢表,甚至还坚持你的结果DataFrames /桌。实际上,Hive可以使用Spark作为执行引擎,而不是使用MR或tez。

Hive metastore是有关Hive表的元数据。而当使用HiveContext时,spark可以使用这种Metastore服务。请参阅文档:http://spark.apache.org/docs/latest/sql-programming-guide.html

+0

SQL语句解析是由HiveQl解析器完成还是Spark将解析它? – Shashi

+0

我不确定我是否理解你的问题,但我会这样说:所有的工作都是由Spark完成的。 Spark不会重新发明轮子,因此它使用Hive解析的功能。我希望能回答你的问题;) – user1314742

+0

是否有任何可用于Spark + Hive交互的体系结构图? – Shashi