spark期末复习一、Spark基础
1. Spark与Hadoop的区别
- 时间节点上来看
- Hadoop在2006·1开始开发,2008·1成为apache顶级项目,2011年发布1.0版本,2013年10月发布2.x版本(Yarn)
- Spark2009年诞生,2013·6称为apache项目,2014·2成为顶级项目,2015至今开始大量重点使用Spark
- 组成上来看
- Hadoop由Java编写,是一个在分布式服务器集群上存储海量数据并运行分布式分析应用的开源框架。HDFS是其分布式文件系统,MapReduce是Hadoop的分布式计算模型,HBase是基于HDFS的分布式数据库。
- Spark是一种快速、通用、可扩展的大数据分析引擎,Spark Core提供基础和核心功能,SparkSQL用来操作结构化数据,SparkStreaming是针对实时数据的流式计算组件
- 框架上看:MapReduce和Spark都是数据处理框架
- MR作业流程中,对于计算模型只有map和reduce两个模型,对于上层应用来说就需要拆分算法或者是实现多个任务的串联。而任务之间的关联需要磁盘交互,这种情况下,磁盘I/O会影响性能
- Spark中含有丰富的数据处理模型,而且它可以基于内存做多次迭代,能够更好的支持刚才所说的数据挖掘算法以及图计算等。只考虑数据处理的过程,Spark把任务的计算结果放在Memory内存中进行,为下一次计算提供了更加便利的处理方式,效率高。
- 从功能上看
- Spark数据存储在内存中:Spark更适合于迭代计算较多的机器学习和数据挖掘,因为在Spark中有RDD的抽象概念
- Spark比Hadoop更通用:Spark提供的数据集操作类型很多,且节点间通信模型不再只有Shuffle一种模式
- 容错性:分布式数据集计算时通过checkpoint来实现容错,有两种方式:checkpoint data、logging the updates
- 可用性:Spark提供丰富的Scala、Java、python API;Spark可以直接对HDFS读写,可以于MR运行于同一个集群中,共享存储于计算资源,且几乎与hive完全兼容。
- 总结/MR与Spark:
- 数据存储机构:MR/HDFS Spark/RDD
- 编程范式:MR/Map+Reduce Spark/DAG(有向无环图)
- 中间结果存储:MR/磁盘 Spark/内存
- 运行方式:MR/task以进程方式维护,任务启动慢 Spark/task以线程方式维护,任务启动快
2. Spark的特点
- 先进架构:
- Spark采用Scala语言编写,底层采用了actor model的akka作为通讯框架,代码十分简洁高效。
- 基于DAG图的执行引擎,减少多次计算之间中间结果写到Hdfs的开销。
- 建立在统一抽象的RDD(分布式内存抽象)之上,使得它可以以基本一致的方式应对不同的大数据处理场景。
- 高效快速:
- 提供Cache机制来支持需要反复迭代的计算或者多次数据共享,减少数据读取的IO开销。
- 与Hadoop的MapReduce相比,Spark基于内存的运算比MR要快100倍;而基于硬盘的运算也要快10倍!
- 易用:
- Spark提供广泛的数据集操作类型(20+种),不像Hadoop只提供了Map和Reduce两种操作。
- Spark可以支持Java,Scala,Python,R以及SQL多种语言。还支持超过80种高级算法,使得用户可以快速构建不同的应用。支持交互式的Python和Scala的shell。
- 通用(提供整体解决方案):
- 以其RDD模型的强大表现能力,逐渐形成了一套自己的生态圈,提供了full-stack的解决方案。
- 主要包括Spark内存中批处理,Spark SQL交互式查询,Spark Streaming流式计算, GraphX和MLlib提供的常用图计算和机器学习算法。
- 与Hadoop无缝衔接:
- Spark可以使用YARN作为它的集群管理器
- 读取HDFS,HBase等一切Hadoop的数据
3. Spark部署模式
分为local、Standalone、Spark on Yarn、apache mesos四种部署模式
- Standalone(Spark)集群模式(开发测试及生产环境使用):类似Hadoop Yarn架构,典型的Master/Slaves模式,使用Zookeeper搭建,避免Master单点故障。
- Hadoop YARN集群模式(生产环境使用):运行在Yarn集群之上,由Yarn负责资源管理,Spark负责任务调度和计算。好处是计算资源按需伸缩,集群利用率高,共享底层存储,避免数据跨集群迁移。
- Apache Mesos集群模式(国内使用较少):运行在mesos资源管理器框架之上,由mesos负责资源管理,Spark负责任务调度和计算。
4. RDD分布式弹性数据集
- RDD (resilient distributed dataset) 是Spark的核心概念,指的是一个只读的,可分区的分布式数据集(分布式弹性数据集),这个数据集的全部或部分可以缓存在内存中,在多次计算间重用。Spark的核心思路就是将数据集缓存在内存中加快读取速度,同时用RDD以较小的性能代价保证数据的鲁棒性。
- RDD特点如下:
- 一是数据全集被分割为多个数据子集,每一个数据子集被分发到集群中的任意节点进行处理;
- 二是RDD使得所有计算的中间结果被保存下来,出于可靠性的考虑,同一个计算结果也会在集群中的多个节点进行保存备份。这样如果其中的某一数据子集在计算过程中出现了问题,针对该数据子集的处理会被重新调度,进而完成容错机制。
- 三是RDD这一数据结构都是可序列化的,在内存不足的时候,可以自动降级为磁盘存储。
5. RDD基本操作
- Transformation(转换)
- 作用:通过Scala集合或者Hadoop数据集构造一个新的RDD/通过已有的RDD产生新的RDD
- 举例:map、filter、groupByKey、reduceByKey
- Action(行动)
- 作用:通过RDD计算得到一个或一组值
- 举例:count、collect、save
6. Spark运行架构体系
- 流程:
- Spark的Driver Program (简称Driver)包含用户的应用程序
- Driver完成task的解析和生成
- Driver向Cluster Manager(集群资源管理器)申请运行task需要的资源。
- 集群资源管理器为task分配满足要求的节点,并在节点按照要求创建Executor
- 创建的Executor向Driver注册。
- Driver将spark应用程序的代码和文件传送给分配的executor
- Executor运行task,运行完之后将结果返回给Driver或者写入HDFS或其他介质。
- Driver将spark应用程序的代码和文件传送给分配的executor
- Executor运行task,运行完之后将结果返回给Driver或者写入HDFS或其他介质。