大数据技术---Spark

一、Spark简介

1、Spark概述
Spark:由美国加州伯克利大学的AMP实验室于2009年开发,基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序。
三大分布式计算系统开源项目:Hadoop、Spark、Storm。
Spark的特点:
(1)运行速度块:使用DAG执行引擎以支持循环数据流与内存计算。
(2)容易使用:支持使用scala、Java、python和R语言进行编程,可以通过spark shell进行交互式编程。
(3)通用性:Spark提供了完整强大的技术栈,包括SQL查询、流式计算、机器学习和图算法等。
(4)运行模式多样:可运行于独立的集群模式中,可运行于Hadoop中,也可运行于Amazon EC2等云环境中,并且可以访问hdfs,hbase,hive等多种数据源。

2、Scala概述
Scala:现代的多范式编程语言,运行于Java平台,并兼容现有的Java程序。
Scala特性:
(1)具备强大的并发性,支持函数式编程,可以更好的支持分布式系统;
(2)兼容Java,运行速度快;
(3)语法简洁,能提供优雅的api。
Scala是spark的主要编程语言,优势是提供了REPL(交互式解释器),提高程序开发效率。

3、Spark与Hadoop对比?
Hadoop缺点:表达能力有限、磁盘IO开销大、延迟高、任务之间的衔接涉及IO开销、在前一个任务执行完成之前,其他任务就无法开始,难以胜任复杂,多阶段的计算任务。
Spark的优点:
(1)Spark计算模式也属于Map Reduce,但不局限于map和reduce操作,还提供了多种数据集操作类型,编程模型比Hadoop mapreduce更灵活。
(2)Spark还提供了内存计算,可将中间结果放到内存中,对于迭代运算效率更高。
(3)Spark基于DAG的任务调度执行机制,要由于Hadoop的迭代执行机制。
大数据技术---Spark_第1张图片
大数据技术---Spark_第2张图片

二、Spark生态系统

在实际应用中,大数据处理主要包括以下三个类型:
1、复杂的批量数据处理:通常时间跨度在数十分钟到数小时之间。比如Hadoop MapReduce。
2、基于历史数据的交互式查询:通常时间跨度在数十秒到数分钟之间。比如Cloudera Impala。
3、基于实时数据流的数据处理:通常时间跨度在数百毫秒到数秒之间。比如Storm。
可能存在的问题:
1、不同场景之间输入输出数据无法做到无缝共享,通常需要进行数据格式的转换。
2、不同的软件需要不同的开发和维护团队,带来了较高的使用成本。
3、比较难以对同一个集群中的各个系统进行统一的资源协调和分配。
Spark可以部署在资源管理器YARN之上,提高一站式的大数据解决方案。
大数据技术---Spark_第3张图片

三、Spark运行架构

1、基本概念
大数据技术---Spark_第4张图片
2、运行架构
大数据技术---Spark_第5张图片
架构设计的优点:
(1)利用多线程来执行具体的任务,减少任务的启动开销。
(2)Executor中有一个BlockManager存储模块,会将内存和磁盘共同作为存储设备,有效减少IO 开销。
相互关系:
大数据技术---Spark_第6张图片
大数据技术---Spark_第7张图片
3、Spark运行的基本流程
大数据技术---Spark_第8张图片
(1)为应用程序构建基本的运行环境,由driver创建一个sparkcontext进程资源的申请、任务的分配和监控;
(2)资源管理器会为executor分配资源,并启动executor;
(3)sparkcontext根据RDD的依赖关系构建DAG图,DAG图提交给DAGSchedule解析成stage,然后把一个个taskset提交给底层调度器taskschedule处理。executor向sparkcontext申请task,taskschedule将task发放给executor运行;
(4)task在executor上运行把执行结果反馈给taskschedule,然后反馈给DAGSchedule,运行完毕后写入数据并释放所有资源。

4、Spark运行架构的特点
(1)每个application都有自己专属的executor进程,并且该进程在application运行期间 一直驻留。executor进程以多线程的方式运行task。
(2)spark运行过程与资源管理器无关,只要能够获取executor进程并保持通信即可。
(3)task采用了数据本地性(计算向数据靠拢)和推测执行(任务执行推测)等优化机制。

5、RDD
设计背景:许多迭代式算法和交互式数据挖掘工具,共同的是不同计算阶段之间会重用中间结果。目前的mapreduce是将中间的计算结果保存在磁盘中,带来大量的数据复制、磁盘IO和序列化开销。
RDD:一个RDD就是一个分布式对象集合,本质上是一个只读的分区记录集合,每个RDD可分为多个分区,每个分区就是一个数据集片段,并且一个RDD的不同分区可以被保存到集群中不同的节点上,从而可以在集群中的不同节点上进行并行计算。RDD提供了一种高度受限的共享内存模型,即RDD是只读的记录分区的集合,不能直接修改,只能基于稳定的物理存储中的数据集创建RDD,或者通过在其他RDD上执行确定的转换操作而创建得到新的RDD。
大数据技术---Spark_第9张图片
RDD执行过程:
(1)RDD读入外部数据据源进行创建;
(2)RDD经过一系列的转换操作,每一次都会产生不同的RDD供给下一个转换操作使用;
(3)最后一个RDD经过动作操作进行计算并输出到外部数据源。
大数据技术---Spark_第10张图片
优点:惰性调用、管道化、避免同步等待、不需要保存中间结果、每次操作变得简单。

RDD特性:
(1)高效的容错性
传统容错方式:数据复制或记录日志。
RDD具有天生的容错性:血缘关系、重新计算分区、无需回滚系统、重算过程在不同节点之间并行、只记录粗粒度的操作。
(2)中间结果持久化到内存,数据在内存中的多个RDD操作之间进行传递,避免了不必要的读写磁盘开销。
(3)存放的数据可以是Java对象,避免了不必要的对象序列化和反序列化。

RDD的依赖关系:
窄依赖:表现为一个父RDD的分区对应于一个子RDD的分区或者多个父RDD的分区对于于一个子RDD。如图所示:RDD1、RDD6为父分区,RDD2,RDD8为子分区(一对一,多对一)。
宽依赖:表现为存在一个父RDD的一个分区对应一个子RDD的多个分区(多对多)。
大数据技术---Spark_第11张图片
Stage的划分:
在DAG中进行反向解析,遇到宽依赖就断开,遇到窄依赖就把它当前的RDD加入到stage中,将窄依赖尽量划分在同一个stage中,可以实现流水线计算,从而使得数据可以直接在内存中进行交换,避免了磁盘IO开销。
大数据技术---Spark_第12张图片
Stage类型:
(1)ShuffleMapStage:不是最终的stage,在它之后还有其他的stage,它的输出一定需要经过shuffle过程,并作为后续stage的输入。
(2)ResultStage:最终的stage,没有输出,而是直接产生结果或存储。在一个job中有多个stage,至少包含一个ResultStage。

RDD运行过程:
大数据技术---Spark_第13张图片
6、Spark SQL
Shark:即hive on spark ,为了实现于hive兼容,shark在hiveQL方面重用了hive中hiveQL的解析、逻辑执行计划翻译、执行计划优化等逻辑,可以近似任务仅将物理执行计划从MapReduce作业替换成了spark作业,通过hive的hiveQL解析,把hiveQL翻译成spark上的RDD操作。
大数据技术---Spark_第14张图片
Spark SQL:Spark SQL在hive兼容层面仅依赖hiveQL解析、hive元数据。从HQL被解析成抽象语法树起,就全部由Spark SQL接管了。Spark SQL执行计划生成和优化都由Catalyst(函数式关系查询优化框架)负责。

你可能感兴趣的:(spark,scala,big,data,hadoop)