我是 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 将如何发挥作用?
提前致谢。
简单回答你的问题:不,HiveContext不会启动MR作业。您的 SQL 查询仍将使用 Spark 引擎
我将引用 Spark 文档:
除了基本 SQLContext 之外,您还可以创建 HiveContext,它提供基本 SQLContext 所提供功能的超集。其他功能包括使用更完整的 HiveQL 解析器编写查询的能力、访问 Hive UDF 以及从 Hive 表读取数据的能力。要使用 HiveContext,您不需要现有的 Hive 设置,并且 SQLContext 可用的所有数据源仍然可用。 HiveContext 仅单独打包,以避免在默认 Spark 构建中包含 Hive 的所有依赖项。如果这些依赖项对您的应用程序来说不是问题,那么建议在 Spark 1.3 版本中使用 HiveContext。未来的版本将重点关注使 SQLContext 达到与 HiveContext 相同的功能
因此,spark 使用 HiveContext 来增强查询解析和对现有 Hive 表的访问,甚至将结果持久化为 DataFrames/Tables。此外,实际上,Hive 可以使用 Spark 作为其执行引擎,而不是使用 MR 或 tez。
Hive 元存储是有关 Hive 表的元数据。当使用 HiveContext Spark 时可以使用此元存储服务。参考文档:http://spark.apache.org/docs/latest/sql-programming-guide.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)