1.spark

  • spark是一个数据分析、计算引擎,本身不负责存储
  • 可以对接多种数据源,包括:结构化、半结构化、非结构化的数据;
  • 其分析处理数据的方式有多种发,包括:sql、Java、Scala、python、R等;其中spark-sql用来对结构化数据分析处理,它将数据的计算任务通过SQL的形式转换成了RDD的计算

2.hive

数据仓库,主要负责数据存储和管理,看作MapReduce计算引擎+HDFS分布式文件系统,直观理解就是Hive的SQL通过很多层解析成了MR程序,然后存储是放在了HDFS上,并且只能用SQL这种方式来处理结构化数据,因此spark和hive是互不依赖的。

3.spark和hive的结合

实际应用两者结合,有三种方式:hive on spark、spark on hive、spark+spark hive catalog,常见的是第一种,是因为hive底层现在支持三种计算计算引擎:mr\tez\spark。

  • 第一种:使用hive的语法规范即hive sql,执行时编译解析成spark作业运行(当然此时底层的计算引擎是spark);

  • 第二种:因为spark本身只负责数据处理而不是存储,支撑多种数据源,当我们使用spark来处理分析存储在hive中的数据时(把hive看作一种数据源,常见的其他数据源包括:JDBC、文件等),这种模式就称为为 spark on hive。这个时候可以使用spark的各种语言的API,也可以使用hive的hql
  • 第三种:我感觉有点难,了解即可,只是现在好像发展挺快的,用的人挺多的

4.Hive VS Spark

  • Hive:数据存储和清洗,处理海量数据,比如一个月、一个季度、一年的数据量,依然可以处理,虽然很慢;
  • Spark SQL:数据清洗和流式计算,上述情况下 Spark SQL 不支持,无法处理,因为其基于内存,量级过大承受不住,并且性价比不如hive高;
  • 结合来说,hive的强项在于:1、大数据存储,2、通过sql方式进行MapReduce操作,降低大数据使用门槛。spark强项在于1、基于内存的MapReduce操作,速度快2、流式计算(对标产品flink,storm)。运用上大多两者集合,hive负责廉价的数据仓库存储,spark-sql负责告诉计算,并结合DataFrame进行复杂的数据挖掘(包括机器学习、图计算等复杂算法)。

5.Spark on hive VS Spark-sql

  • 在同时安装了Hive和spark时,我使用hive下的beeline执行HQL,执行引擎是MapReduce;使用spark下的spark-beeline执行HQL,执行引擎是spark;后者执行速度会更快;
  • Hive On Spark大体与Spark SQL结构类似,只是SQL引擎不同,但是计算引擎都是Spark

6.Hive VS Hbase

  • Hive中的表是纯逻辑表,就只是表的定义等,即表的元数据;其本身不存储数据,它完全依赖HDFS和MapReduce。将结构化的数据文件映射为为一张数据库表,并提供完整的SQL查询功能,并将SQL语句最终转换为MapReduce任务进行运行。
  • 而HBase表是Hadoop database的简称,是一种NoSql数据库,适合存放非结构化的数据,是物理表,适用于海量明细数据的随机实时查询
  • 大数据架构中,Hive和HBase是协作关系,流程如下:
    1. 通过ETL工具将数据源抽取到HDFS存储
    2. 通过Hive清洗、处理和计算原始数据;
    3. HIve清洗处理后的结果,如果是面向海量数据随机查询场景的可存入Hbase
    4. 数据应用从HBase查询数据;

参考引用说明:

(17 封私信 / 80 条消息) 请问spark和hive是什么关系? - 知乎 (zhihu.com)

(17 封私信 / 80 条消息) HBase 和 Hive 的差别是什么,各自适用在什么场景中? - 知乎 (zhihu.com)



2021.12.25更新 SparkSQL历史:

1.shark

Hive on Spark,为了实现与Hive兼容,Shark在 HiveQL方面重用了Hive中HiveQL的解析、逻辑执行计划翻译、 执行计划优化等逻辑,可以近似认为仅将物理执行计划从 MapReduce作业替换成了Spark作业,通过Hive的HiveQL解 析,把HiveQL翻译成Spark上的RDD操作。

Shark的出现,使得SQL-on-Hadoop的性能比Hive有了 10-100倍的提高。但是它的设计有两个问题:

  • 执行计划完全依赖于Hive,不方便添加新的优化策略
  • spark是线程级并行,而MapReduce是进程级并行,故而存在线程安全问题

2014年6月1日Shark项目和Spark SQL项目的主持人Reynold Xin宣布: 停止对Shark的开发,团队将所有资源放在Spark SQL项目上,至此, Shark的发展画上了句号,但也因此发展出两个分支:Spark SQL和 Hive on Spark。前者推翻之前的那套另起炉灶,不再受限Hive而是兼容Hive,后者成了一个发展计划即Hive不再局限于一个引擎,而是采用MapReduce、Tez、Spark等引擎。

2.Spark SQL设计

Spark SQL在Hive兼容层面仅依赖HiveQL解析、Hive元数据,也就是 说,从HQL被解析成抽象语法树(AST)起,就全部由Spark SQL接管了。

Spark SQL增加了DataFrame(即带有Schema信息的RDD),使用户可以 在Spark SQL中执行SQL语句,数据既可以来自RDD,也可以是Hive、 HDFS、Cassandra等外部数据源,还可以是JSON格式的数据。

3.为什么推出SparkSQL?

背景:

  • 关系数据库已经很流行
  • 关系数据库在大数据时代已经不能够满足要求(各种的数据源包括:结构化、半结构化、非结构化);其次,用户执行需要高级分析,如:机器学习和图像处理
  • 实际应用中,经常需要融合关系查询和复杂分析算法(机器学习),但是缺少这样的系统

Spark SQL的出现填补了这个鸿沟

  • DataFrame API可以对内外部数据源执行各种关系型操作
  • 支持大数据中的大量数据源和数据分析算法,融合传统的结构化数据管理和机器学习算法的数据处理

4.RDD与DataFrame对比

DataFrame的推出,让Spark具备了处理大规模结构化数据的能力,不仅比原有的RDD转化方式更加简单易用,而且获得了更高的计算性能。Spark能够轻松实现从MySQL到DataFrame的转化,并且支持SQL查询

RDD是分布式的 Java对象的集合,但是,对象内部结构对于RDD而言却是不可知的

DataFrame是一种以RDD为基础的分布式数据集,提供了详细的结构信息

 

(20条消息) DataFrame_好啊啊啊啊的博客-CSDN博客

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐