SparkSQL CLI内部使用HiveQL,如果是Hive on spark(HIVE-7292),则hive使用spark作为后端引擎。有人可以提出更多的意见,这两种情况究竟有何不同以及两种方法的利弊?
答案 0 :(得分:19)
当SparkSQL使用配置单元
时SparkSQL可以使用HiveMetastore来获取存储在HDFS中的数据的元数据。此元数据使SparkSQL能够更好地优化其执行的查询。 Spark是查询处理器。
当Hive使用Spark See the JIRA entry: HIVE-7292
时这里通过spark访问数据。而Hive是查询处理器。因此,我们拥有Spark Core的所有设计功能。但这是对Hive的重大改进,并且仍在进行中#34;截至2016年2月2日。
使用SparkSQL
处理数据有第三种选择不使用Hive就使用SparkSQL。 SparkSQL无法访问Hive Metastore中的元数据。查询运行速度较慢。我已经做了一些比较选项1和3的性能测试。结果是here。
答案 1 :(得分:12)
SparkSQL vs Spark API你可以简单地想象你在RDBMS世界中:
SparkSQL是纯SQL,Spark API是编写存储过程的语言
Spark上的Hive类似于SparkSQL,它是一个使用spark作为执行引擎的纯SQL接口,SparkSQL使用Hive的语法,所以作为一种语言,我会说它们几乎是相同的。
但Hive on Spark对hive功能提供了更好的支持,尤其是hiveserver2和安全功能,SparkSQL中的hive功能真的很不错,SparkSQL中有一个hiveserver2 impl,但是在最新版本(1.6.x)中,hiveserver2在SparkSQL中不再使用hivevar和hiveconf参数,并且通过jdbc登录的用户名也不起作用...
请参阅https://issues.apache.org/jira/browse/SPARK-13983
我相信火花项目中的蜂巢支持实际上是非常低优先级的东西......
遗憾的是Hive on spark整合并不那么容易,还有很多依赖冲突......比如 https://issues.apache.org/jira/browse/HIVE-13301并且,当我尝试使用spark集成的hive时,出于调试目的,我总是像这样开始hive cli:
export HADOOP_USER_CLASSPATH_FIRST=true
bin/hive --hiveconf hive.root.logger=DEBUG,console
我们的要求是以安全的方式使用spark与hiveserver2(具有身份验证和授权),目前SparkSQL无法提供此功能,我们在Spark上使用了ranger / sentry + Hive。
希望这可以帮助您更好地了解应该去哪个方向。
答案 2 :(得分:1)
这里是我在蜂巢官方网站上找到的相关答案:
1.3与鲨鱼和星火SQL比较
有星火生态系统的两个相关项目,可提供有关星火蜂巢QL支持:鲨鱼和星火SQL。
●鲨鱼项目通过翻译产生的蜂房到自己表示查询计划和星火上执行它们。
●星火SQL是Spark的特征。它采用蜂巢的解析器前端提供蜂巢QL支持。火花应用开发者可以容易地表达自己的SQL数据处理逻辑,以及其他火花运营商,他们的代码。星火SQL支持不同的使用情况比蜂巢。
与鲨鱼相比,和Spark SQL,设计我们的方法支持所有现有的蜂巢功能,包括蜂巢QL(以及任何未来的扩展),以及蜂巢与授权,监控,审计的整合,以及其他操作工具。
3。蜂巢级设计 正如介绍中指出,该项目需要从鲨鱼或火花SQL中,我们不打算实现使用星火的原语的语义SQL意义上的不同的方法。相反,我们将使用MapReduce的原语实施。这里唯一的新东西就是这些MapReduce的原语将在星火执行。事实上,只有少数星火的原语将在本设计中使用。
在星火执行蜂房的MapReduce原语的做法,是从什么鲨鱼或Spark SQL确实具有以下优势直接不同:
1.Spark用户将自动获得整套配置单元的丰富的功能,包括配置单元可能在未来引入任何新功能。
2,本方法可避免或减少在蜂巢星火执行引擎的任何定制工作的必要性。
3.It也将限制该项目的范围和通过保持蜂房上星火全等蜂巢MapReduce和TEZ降低长期维护。