目录
1.什么是spark
spark特点
Spark是一种快速、通用、可扩展的大数据分析引擎
Spark的最大特点:基于内存
Spark是MapReduce的替代方案,而且兼容HDFS、Hive,可融入Hadoop的生态系统,以弥补MapReduce的不足。
Spark的特点:快、易用、通用、兼容性
2.MapReduce和spark的区别?
1.处理数据模式不同
Spark 在内存中处理数据,而 Hadoop MapReduce 是通过 map 和 reduce 操作在磁盘中处理数据。因此从这个角度上讲 Spark 的性能应该是超过 Hadoop MapReduce 的。
当数据大小适于读入内存,尤其是在专用集群上时,Spark 表现更好;Hadoop MapReduce 适用于那些数据不能全部读入内存的情况,同时它还可以与其它服务同时运行。
2 使用难度
Spark 更易于编程,同时也包含交互式模式;Hadoop MapReduce 不易编程但是现有的很多工具使其更易于使用。
3.成本
根据基准要求, Spark 更加合算, 尽管人工成本会很高。依靠着更多熟练的技术人员和 Hadoop 即服务的供给, Hadoop MapReduce 可能更便宜。
4.兼容性
Spark 和 Hadoop MapReduce 具有相同的数据类型和数据源的兼容性。
5.数据处理
除了平常的数据处理,Spark 可以做的远不止这点:它还可以处理图和利用现有的机器学习库。
Hadoop MapReduce 在批处理上表现卓越
6.容错
和 MapReduce 一样, Spark 会重试每个任务并进行预测执行。然而,MapReduce 是依赖于硬盘驱动器的,所以如果一项处理中途失败,它可以从失败处继续执行,而 Spark 则必须从头开始执行,所以 MapReduce 这样节省了时间。
7.安全性
Spark 的安全机制仍处在发展期。 Hadoop MapReduce 拥有更多安全控制机制和项目。
8.处理速度
比如实时的市场活动,在线产品推荐等需要对流数据进行分析场景就要使用Spark。
Spark 的安全机制仍处在发展期。 Hadoop MapReduce 拥有更多安全控制机制和项目。
3.结构化数据和非结构化数据
结构化数据
结构化数据也称为行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。
结构化数据也被成为定量数据,是能够用数据或统一的结构加以表示的信息,如数字、符号。在项目中,保存和管理这些的数据一般为关系数据库,当使用结构化查询语言或SQL时,计算机程序很容易搜索这些术语。结构化数据具有的明确的关系使得这些数据运用起来十分方便,不过在商业上的可挖掘价值方面就比较差。
典型的结构化数据包括:信用卡号码、日期、财务金额、电话号码、地址、产品名称等。
非结构数据
(2)非结构化数据本质上是结构化数据之外的一切数据。它不符合任何预定义的模型,因此它存储在非关系数据库中,并使用NoSQL进行查询。它可能是文本的或非文本的,也可能是人为的或机器生成的。简单的说,非结构化数据就是字段可变的的数据。
非结构化数据不是那么容易组织或格式化的。收集,处理和分析非结构化数据也是一项重大挑战。这产生了一些问题,因为非结构化数据构成了网络上绝大多数可用数据,并且它每年都在增长。随着更多信息在网络上可用,并且大部分信息都是非结构化的,找到使用它的方法已成为许多企业的重要战略。更传统的数据分析工具和方法还不足以完成工作。
典型的人为生成的非结构化数据包括:
文本文件:文字处理、电子表格、演示文稿、电子邮件、日志。
电子邮件:电子邮件由于其元数据而具有一些内部结构,我们有时将其称为半结构化。但是,消息字段是非结构化的,传统的分析工具无法解析它。
社交媒体:来自新浪微博、微信、QQ、Facebook,Twitter,LinkedIn等平台的数据。
网站: YouTube,Instagram,照片共享网站。
移动数据:短信、位置等。
典型的机器生成的非结构化数据包括:
卫星图像:天气数据、地形、军事活动。
科学数据:石油和天然气勘探、空间勘探、地震图像、大气数据。
数字监控:监控照片和视频。
结构化数据和非结构化数据区别
从上文的解释中,结构化和非结构化数据之间的差异逐渐变得清晰。除了存储在关系数据库和存储非关系数据库之外的明显区别之外,最大的区别在于分析结构化数据与非结构化数据的便利性。针对结构化数据存在成熟的分析工具,但用于挖掘非结构化数据的分析工具正处于萌芽和发展阶段。
并且非结构化数据要比结构化数据多得多。非结构化数据占企业数据的80%以上,并且以每年55%~65%的速度增长。如果没有工具来分析这些海量数据,企业数据的巨大价值都将无法发挥。随着储存成本的下降,以及新兴技术的发展,行业对非结构化数据的重视程度得到提高。比如物联网、工业4.0、视频直播产生了更多的非结构化数据,而人工智能、机器学习、语义分析、图像识别等技术方向则更需要大量的非结构化数据来开展工作。
spark三种模式:
standalone yarn mesos
standalone模式是一个独立模式,是单节点模式
spark核心数据集rdd
3.MapReduce核心环节-Shuffle过程(洗牌)
什么是shuffle
Shuffle 的本意是扑克的“洗牌,打乱次序”,在分布式计算场景中,它被引申为集群范围内跨节点、跨进程的数据分发。
所谓Shuffle,是指对Map输出结果进行分区、排序、合并等处理并交给Reduce的过程。因此,Shuffle过程分为Map端的操作和Reduce端的操作,主要执行以下操作。
2shuffle的中间文件
如果用一句来概括的话,那就是,Map 阶段与 Reduce 阶段,通过生产与消费 Shuffle 中间文件的方式,来完成集群范围内的数据交换。换句话说,Map 阶段生产 Shuffle 中间文件,Reduce 阶段消费 Shuffle 中间文件,二者以中间文件为媒介,完成数据交换。
spark的运用场景
复杂的批量数据处理
基于历史数据的交互式查询
基于实时数据流的数据处理
基于历史数据的数据挖掘
图结构数据的处理
spark的运行架构和原理
spark基本运行流程
1.Drive创建一个sparkcontext进行资源的申请,任务的分配和监控
2.资源管理器为execulor分配资源,并启动executor进程
3. SparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAGScheduler解析成Stage,然后把一个个TaskSet提交给底层调度器TaskScheduler处理。
4.Executor向SparkContext申请Task,TaskScheduler将Task发放给Executor运行并提供应用程序代码。
5.Task在Executor上运行把执行结果反馈给TaskScheduler,然后反馈给DAGScheduler,运行完毕后写入数据并释放所有资源。
① RDD:是弹性分布式数据集的英文缩写,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型。
② DAG:是有向无环图的英文缩写,反映RDD之间的依赖关系。
③ Executor:是运行在工作节点上的一个进程,负责运行任务,并为应用程序存储数据。
④ 应用:用户编写的Spark应用程序。
⑤ 任务:运行在Executor上的工作单元。
⑥ 作业:一个作业包含多个RDD及作用于相应RDD上的各种操作。
⑦ 阶段:是作业的基本调度单位,一个作业会分为多组任务,每组任务被称为“阶段”,或者也被称为“任务集”
spark运行架构的特点
spark的运行架构包括集群资源管理器,运行作业任务的工作节点每个应用的任务控制节点(Driver)和每个工作节点上负责具体任务的执行进程(Executor)其中,集群资源管理器可以是Spark自带的资源管理器,也可以是YARN或Mesos等资源管理框架。
与Hadoop MapReduce计算框架相比,Spark所采用的Executor有两个优点:一是利用多线程来执行具体的任务(Hadoop MapReduce采用的是进程模型),减少任务的启动开销;二是Executor中有一个BlockManager存储模块,会将内存和磁盘共同作为存储设备,当需要多轮迭代计算时,可以将中间结果存储到这个存储模块里,下次需要时,就可以直接读该存储模块里的数据,而不需要读写到HDFS等文件系统里,因而有效减少了IO开销;或者在交互式查询场景下,预先将表缓存到该存储系统上,从而可以提高读写IO性能
每个Application都有自己专属的Executor进程,并且该进程在Application运行期间一直驻留。Executor进程以多线程的方式运行Task。
Spark运行过程与资源管理器无关,只要能够获取Executor进程并保存通信即可。
Task采用数据本地性和推测执行等优化机制。
Spark Stage划分依据
首先,需要明确的关键点是Spark Stage划分依据主要是基于Shuffle。宽依赖和窄依赖
spark中task的定义
一个供Executor执行的可执行的逻辑单元,
一个Stage内只会存在同一种TaskTask数量与Stage的Partition数量保持一致(运行的Task数量可能会大于Partition数量)
每个作业被划分为更小的任务集,称为相互依赖的阶段
Stage个数:1+shuffle依赖的数量(resultStage+shuffleMapStage)反向推导,每进行一次宽依赖(也就是每进行一个shuffle)前面的RDD就被分到一个Stage里。
Eg:下面进行两个宽依赖(两次shuffle)