Spark发展技术简介

一、Spark与Hadoop的区别

任务背景:完成最终的任务需要分为若干个有依赖关系的子任务连接成一个DAG(有向无环)图。

Hadoop:由于完成这个图任务有多个map-reduce子任务,每个子任务都要把输出的结果存储起来(默认是三份)以供下一个任务的读取,而且每个子任务map-reduce的中间结果也会把数据存储在本地。

ps:在ML任务下效率很不理想,大量的磁盘io和网络io拉低了程序的效率。 

ps:map-reduce的过程细分:map映射键值对,shuffle哈希映射划分区块,reduce合并区块的到结果。

Spark:在map-reduce子任务的基础上在进行任务的细分组成一个新的DAG图,并且去掉了HDFS本地存储的过程,使用内存来加快速度。

ps:对多任务map-reduce通过细分map-reduce省去了磁盘的io,大大提高了效率。

 ps:在任务只有一次map-reduce的情况下,效果是远远不如map-reduce的。

二、Spark的发展

Spark发展技术简介_第1张图片

Spark提出的起始就是因为在处理复杂问题的情况下效果很不好,所以就有了Spark雏形,然后由于项目很好工业上吸引程度也很大,才一步一步发展了起来。Spark在有了MLlib计算框架,Spark sql数据索引模块,streaming流式实时计算的情况下,由于数据结构不统一造成编程复杂,就在原始rdd的数据结构上进行了封装出现了DataFrame,再在此上封装了一层DataSet是编程复杂度大大降低,在之后就是基本框架上的优化了。

三、Spark编程模式

Spark发展技术简介_第2张图片

过程:程序编写的application应用会被资源调度来进行管理,来维护工作的执行和数据交互的过程。

ps:资源调度一般是用yarn来进行;数据的交互一般也是利用了HDFS来执行;所以说Spark只是在一定类型的问题上代替了map-reduce。

四、Spark sql概述

Spark发展技术简介_第3张图片

Hive的提出:由于MapReduce的使用难度较大,FaceBook基于此提出了Hive,它的出现解决了这个问题,它的原理是将HQL语句经过一系列变换,最终转换为了MapReduce程序去执行。

Shark的提出:由于Hive转化为了MapReduce虽然降低了开发难度,但是效率很不如意,这才引出了Shark,它的不但兼容了HQL而且还把MapReduce作业变为了Spark,最终使得性能比Hive有了10-100倍的提高。

Spark SQL的提出:由于Shark需要兼容Hive所以在有些功能上面不太好为了处理这个问题,spark团队把Shark项目转给了Hive团队使得Hive有了多个引擎(MapReduce,Tez,Spark),而spark团队研发出了不但可以很好的兼容Hive,而且还不受限于Hive的Spark SQL就此诞生了。

ps:spark sql不断的在原始RDD的数据结构基础上进行优化,推出了DataFrame(类型不安全)和DataSet(类型安全)数据结构。

很经典的一段话:

Spark发展技术简介_第4张图片

ps:类型安全性就是严格区分数据的类型,不同的类型不同的处理,类型之间的转换遵循严格的规范(例如:类型的转换,类型是否匹配等等),保证不发生类型错误。

五、基于数据仓库的Hive

数据仓库:汇聚了来自各个维度的数据(日志的,数据库的,爬虫的....),主要用于数据的查询,不可更新如果进行了修改会进行数据的备份。

什么是Hive:专门对大数据进行离线的分析使用的工具适用于数据分析,特征处理等任务,它的底层是把HQL转化为MapReduce程序,并且数据存储在HDFS上,程序运行在yarn上。(经常是深夜的定时任务,处理完后自动存放入数据库中。)

ps:所以然,Hive主要是基于数据的查询而不是更新,否则你的数据仓库由于数据备份的问题,会变得很庞大。

Hive的优缺点:使用类SQL语言代替了MapReduce的编写,编写方便,处理大数据比一般的数据库有优势;由于是机器生成的代码,所以性能上会有差异。

Hive的架构:基于用户编写的类SQL语句通过Parser(解析器)进行解析,在通过Physical Plan(编译器)翻译成MapReduce程序,Query Optimizer(优化器)在进行语句的优化,最终Execution(执行器)执行任务到Hadoop上。

Spark发展技术简介_第5张图片

你可能感兴趣的:(大数据,面试)