SparkSQL与Spark上的Hive - 差异和利弊?

Gau*_*are 29 hadoop hive apache-spark apache-spark-sql

SparkSQL CLI内部使用HiveQL,如果是Hive on spark(HIVE-7292),则hive使用spark作为后端引擎.有人可以提供更多的亮点,这两种情况究竟有何不同以及两种方法的利弊?

pra*_*jod 21

  1. 当SparkSQL使用配置单元时

    SparkSQL可以使用HiveMetastore来获取存储在HDFS中的数据的元数据.此元数据使SparkSQL能够更好地优化其执行的查询.Spark是查询处理器.

  2. 当Hive使用Spark时请参阅JIRA条目:HIVE-7292

    这里的数据是通过spark访问的.而Hive是查询处理器.因此,我们拥有Spark Core的所有设计功能.但这是Hive的重大改进,截至2016年2月2日仍在"进行中".

  3. 使用SparkSQL处理数据有第三种选择

    不使用Hive就使用SparkSQL.SparkSQL无法访问Hive Metastore中的元数据.查询运行速度较慢.我已经做了一些比较选项1和3的性能测试.结果在这里.

  • 无需为 SparkSQL 设置元存储。SparkSQL 可以以多种方式使用。但在此选项中,不需要 Metastore 设置。即使没有设置 Hive Metastore 连接,我们也可以使用 sparksql-cli 中的 HiveContext 类。看待这个概念的另一种方式:SparkSQL 可以使用其他数据源,如 csv 文件,其中 Metastore 概念不相关。 (2认同)

chu*_*ium 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)中,SparkSQL中的hiveserver2没有不再使用hivevar和hiveconf参数了,通过jdbc登录的用户名也不起作用......

请参阅https://issues.apache.org/jira/browse/SPARK-13​​983

我相信火花项目中的蜂巢支持真的是非常低优先级的东西......

可悲的是,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
Run Code Online (Sandbox Code Playgroud)

我们的要求是以安全的方式使用spark与hiveserver2(具有身份验证和授权),目前SparkSQL无法提供此功能,我们在Spark上使用ranger/sentry + Hive.

希望这可以帮助您更好地了解应该走哪个方向.