作者:狗叔
链接:https://www.zhihu.com/question/36053025/answer/121404733
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
Hive是什么?一个建立在分布式存储系统(这里指HDFS)上的SQL引擎。
为什么要有Hive呢?因为有了Hadoop后,大家发现存储和计算都有了,但是用起来很困难。去厂商那里一看,清一色Oracle、DB2、TD啥啥的,客户被惯的只会用SQL来处理业务,难一点都交给乙方来做。
转头一想,劳资拿个项目,总不能搭一堆维护人员天天在局点给你们维护你们写的(也有可能是自己写的)超烂的MR代码吧?嗯,在MR上包一层,继续让你们用SQL,就好了嘛
Hive适合的是什么场景呢?数据仓库。基于Hadoop做一些数据清洗啊(ETL)、报表啊、数据分析啊什么的。
传统数据库的SQL03 SQL11标准、自定义函数、权限管理,支持!
JDBC、ODBC、REST接入,支持!
存储过程,支持!
分布式的scale out,支持!
事务处理、一致性、回滚,这个比较难,但是也努力支持!
基本上就是朝着替代传统数据库的方向去的,当然是在大数据背景下的替代。本质上来说,它还是一个面向读的、面向分析的SQL工具。
你问它有什么缺点?天天插入、更新、删除数据,还要求强一致性和毫秒级相应,这个不仅不是Hive的长处,当前的Hadoop框架就不适合这玩意儿。
好,回过头来再说Spark SQL。
SparkSQL是啥呢?这个首先要问Spark是啥。
Spark就是以RDD为核心的计算框架,它产生的背景就是MR难用!慢!
于是Spark搞了一个抽象概念RDD,把map过程都串起来,内存用起来,再做点流水线优化。嗯,快了10到100倍(官方宣称)!
RDD上面抽象一些高级操作,替代MR单纯的map和reduce,简化编程;加上Python、R、Java、Scala等等的接口,谁来用都能无缝切换。嗯,易用性大大增加!
那既然有了RDD这么牛逼的东西,总不能只让用户去写应用处理离线任务吧。流处理,上!机器学习,上!SQL,上!哈哈哈哈哈我一个Spark啥都能搞定,你们就不用费心去用别的东东了!
那SparkSQL对比Hive有啥缺点呢?
由于前者发展时间短,且大数据领域Hive、HBase等等都已经快形成了事实标准,所以SparkSQL一直在吹嘘自己的一栈式数据处理平台,试图从易用性上争取用户。但用户是不是真的需要这些呢?未必。从Spark发展的过程来看,SparkSQL的发展速度远远超过Core、Streaming、MLlib、GraphX等;从语言来看,对Scala的支持也远远超过了Java、R、Python的关注。这说明了一栈式处理虽然看起来很美,但用户未必有这样的场景。
单就SparkSQL来讲呢?由于已经有了Hive(而避免重复造差不多的轮子),所以像Metastore、权限、JDBC这些东东,SparkSQL要么直接复用Hive的,要么干脆不做。
那SparkSQL究竟重点在做什么呢?性能、稳定性、标准兼容性,这是社区2.0版本比较关注的东西,也是Hive从架构上(计算引擎是外部依赖,而不是内部开发)无法赶超的东西。
SparkSQL的应用场景?传统数据仓库我看SparkSQL可能不想大力发展了。Apache Spark是从U.C.Berkeley孵化出来的,和Hadoop、Hive等社区被几大巨头牵制不同,其社区也牢牢被U.C.Berkeley databricks把控。而databricks推出的产品显然是公有(企业)云性质的大数据统一处理平台(Databricks makes Spark easy through a cloud-based integrated workspace.)(不是广告),所以SQL层的很多特性,它们要么不需要(权限管理、多租户),要么不必对客户暴露(JDBC等),所以干脆在社区不care这部分的发展。走上云化的道路,这是时代背景决定的,也是databricks的利益决定的。
选择SparkSQL,要么企业自己定制成性能更好的Hive。要么也将其云化,跟着databricks的脚步走。
为什么要有Hive呢?因为有了Hadoop后,大家发现存储和计算都有了,但是用起来很困难。去厂商那里一看,清一色Oracle、DB2、TD啥啥的,客户被惯的只会用SQL来处理业务,难一点都交给乙方来做。
转头一想,劳资拿个项目,总不能搭一堆维护人员天天在局点给你们维护你们写的(也有可能是自己写的)超烂的MR代码吧?嗯,在MR上包一层,继续让你们用SQL,就好了嘛
Hive适合的是什么场景呢?数据仓库。基于Hadoop做一些数据清洗啊(ETL)、报表啊、数据分析啊什么的。
传统数据库的SQL03 SQL11标准、自定义函数、权限管理,支持!
JDBC、ODBC、REST接入,支持!
存储过程,支持!
分布式的scale out,支持!
事务处理、一致性、回滚,这个比较难,但是也努力支持!
基本上就是朝着替代传统数据库的方向去的,当然是在大数据背景下的替代。本质上来说,它还是一个面向读的、面向分析的SQL工具。
你问它有什么缺点?天天插入、更新、删除数据,还要求强一致性和毫秒级相应,这个不仅不是Hive的长处,当前的Hadoop框架就不适合这玩意儿。
好,回过头来再说Spark SQL。
SparkSQL是啥呢?这个首先要问Spark是啥。
Spark就是以RDD为核心的计算框架,它产生的背景就是MR难用!慢!
于是Spark搞了一个抽象概念RDD,把map过程都串起来,内存用起来,再做点流水线优化。嗯,快了10到100倍(官方宣称)!
RDD上面抽象一些高级操作,替代MR单纯的map和reduce,简化编程;加上Python、R、Java、Scala等等的接口,谁来用都能无缝切换。嗯,易用性大大增加!
那既然有了RDD这么牛逼的东西,总不能只让用户去写应用处理离线任务吧。流处理,上!机器学习,上!SQL,上!哈哈哈哈哈我一个Spark啥都能搞定,你们就不用费心去用别的东东了!
那SparkSQL对比Hive有啥缺点呢?
由于前者发展时间短,且大数据领域Hive、HBase等等都已经快形成了事实标准,所以SparkSQL一直在吹嘘自己的一栈式数据处理平台,试图从易用性上争取用户。但用户是不是真的需要这些呢?未必。从Spark发展的过程来看,SparkSQL的发展速度远远超过Core、Streaming、MLlib、GraphX等;从语言来看,对Scala的支持也远远超过了Java、R、Python的关注。这说明了一栈式处理虽然看起来很美,但用户未必有这样的场景。
单就SparkSQL来讲呢?由于已经有了Hive(而避免重复造差不多的轮子),所以像Metastore、权限、JDBC这些东东,SparkSQL要么直接复用Hive的,要么干脆不做。
那SparkSQL究竟重点在做什么呢?性能、稳定性、标准兼容性,这是社区2.0版本比较关注的东西,也是Hive从架构上(计算引擎是外部依赖,而不是内部开发)无法赶超的东西。
SparkSQL的应用场景?传统数据仓库我看SparkSQL可能不想大力发展了。Apache Spark是从U.C.Berkeley孵化出来的,和Hadoop、Hive等社区被几大巨头牵制不同,其社区也牢牢被U.C.Berkeley databricks把控。而databricks推出的产品显然是公有(企业)云性质的大数据统一处理平台(Databricks makes Spark easy through a cloud-based integrated workspace.)(不是广告),所以SQL层的很多特性,它们要么不需要(权限管理、多租户),要么不必对客户暴露(JDBC等),所以干脆在社区不care这部分的发展。走上云化的道路,这是时代背景决定的,也是databricks的利益决定的。
选择SparkSQL,要么企业自己定制成性能更好的Hive。要么也将其云化,跟着databricks的脚步走。
相关推荐
Apache Atlas 是一个元数据管理框架,它为大数据生态系统提供了一个全面的数据治理解决方案。...在Spark SQL与Hive的交互场景下,这种集成显得尤为重要,因为它确保了数据操作的透明性和可追溯性。
在实际场景中,这个文件夹可能包含了如`spark-2.11.x-y.z-bin-hadoop2.x.y.tgz`这样的Spark发行版,`hive-2.3.x.y-z-bin.tar.gz`的Hive发行版,以及可能的`spark-hive_2.11-2.4.x.y.jar`和`spark-sql_2.11-2.4.x.y....
Spark 2.3.1 是一个重要的大数据处理框架,它提供了高效的分布式计算能力,而与 Hive 的集成使得 Spark 可以充分利用 Hive 的元数据、SQL 查询功能和存储系统,为大数据分析提供更丰富的选择。Hive 是一种基于 ...
此外,Spark SQL还集成了Hive,使得传统的Hive用户能无缝地过渡到Spark平台,享受更快的查询速度和更高效的处理能力。 本书将详细介绍如何创建DataFrame、执行SQL查询、转换和操作数据,以及如何使用Spark SQL进行...
1. **源头上更换引擎**:最简单直接的方式是不在数据源端使用Tez引擎,而是选择使用Hive或Spark-SQL直接进行数据写入。这种方式避免了额外子目录的生成,从而消除了后续查询中的潜在问题。 2. **使用Tez引擎并进行二...
Hive on Spark 源码分析是指将 Hive 默认的执行引擎 MapReduce 换成 Spark 或者 Tez,以满足实际场景中的需求。本文将对 Hive on Spark 的源码进行深入分析,涵盖其基本原理、运行模式、Hive 解析 HQL、Spark 上下文...
这意味着虽然可以使用 Spark 连接和处理 Hive 存储的数据,但无法直接执行 Hive 的 SQL 查询。这对于那些已经有一个独立的 Hive 集群,或者希望在不依赖 Hive 全部功能的情况下使用 Spark 的场景非常有用。 Hive on...
然而,默认情况下,Hive使用MapReduce作为执行引擎,其效率较低,尤其对于迭代式算法等场景,处理速度明显慢于新兴的Spark计算框架。因此,将Hive的执行引擎从MapReduce切换至Spark(Hive on Spark),成为提高大...
通过支持HiveQL语法,Spark SQL允许用户直接使用Hive中的SerDes(Serializer/Deserializer)和UDF(用户自定义函数),从而访问现有的Hive仓库。此外,Spark SQL也支持通过JDBC或ODBC连接到外部的BI工具。 Spark ...
3. **Spark SQL操作多种数据源**:此部分探讨如何使用Spark SQL连接和处理来自不同来源的数据,如HDFS、Hive、Cassandra等,展示了其强大的数据处理能力。 4. **Parquet列式存储**:Parquet是一种高效的列式存储...
Spark SQL广泛应用于数据仓库、实时数据分析、机器学习模型的训练和评估等场景,通过与Spark Streaming、MLlib等组件结合,可以构建复杂的大数据分析解决方案。 通过深入学习并实践《Spark SQL操作大全》中的内容...
这个文件可能包含了一系列的JAR包,如`spark-core`, `spark-sql`, `spark-hive`, `spark-hbase-connector`等,这些都是在Spark应用中连接和操作Hive和HBase所必需的依赖。 使用这些库,开发人员可以编写程序来实现...
* Spark SQL 可以支持大量的数据源和数据分析算法,组合使用 Spark SQL 和 Spark MLlib,可以融合传统关系数据库的结构化数据管理能力和机器学习算法的数据处理能力。 五、RDD 转换为 DataFrame * RDD 转换为 ...
6. **启动Hive Thrift Server**: 使用配置好的Spark,启动Hive Thrift Server,这样客户端就可以通过SQL接口与Spark进行交互。 7. **测试连接**: 通过执行Hive查询验证配置是否成功。如果一切正常,你应该能在不...
Spark SQL 在 Hive 兼容层面仅依赖 HiveQL 解析和 Hive 元数据,实现了与 Hive 的兼容性。 二、Spark SQL 功能 Spark SQL 提供了多种功能,包括: * DataFrame:是一种分布式数据集,提供了详细的结构信息。...
总结来说,“spark-3.2.0-bin-hadoop3-without-hive”是一个专注于 Spark 与 Hadoop 3 基础集成的版本,它提供了最新的 Spark 特性,如优化的 SQL 引擎和 DataFrame API,同时也兼容 Hadoop 3 的诸多改进。...
Hive中SQL详解 Hive是一个基于Hadoop构建的数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop分布式文件系统中的数据。 Hive SQL支持绝大多数的语句,如DDL、DML、聚合函数、连接查询、条件查询等。 ...
在实际应用中,这个预编译的Spark 2.3.1版本能够无缝地与Hive和YARN集成,适用于大规模的数据分析和处理场景。例如,数据科学家和工程师可以通过Spark SQL执行复杂的数据查询,利用Spark的DataFrame API进行数据清洗...
书中可能涵盖的内容包括Spark SQL的安装配置、DataFrame和Dataset的创建与操作、SQL查询的编写、数据源的使用、性能调优、以及与Hive的集成等内容。通过学习《Mastering Spark SQL》,读者可以掌握如何利用Spark SQL...
总的来说,"spark-2.4.3-bin-hadoop2-without-hive.tgz"提供了Spark的一个完整运行环境,适用于需要高性能、低延迟数据处理的场景,同时用户可以根据自己的需求选择是否集成Hive,以实现更复杂的数据仓库和分析任务...