Spark简介

Spark简介

1 spark概念

​ Spark是基于内存计算的大数据并行计算框架。Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高伸缩性,允许用户将Spark部署在大量廉价的硬件之上,形成集群。

2 Spark之于Hadoop

​ Spark是一个计算框架,而Hadoop中包含计算框架MapReduce和分布式文件系统HDFS,Hadoop更广发地说,还包括在其生态系统上的其他系统,如Hbase、Hive等。

​ Spark是MapReduce的替代方案,而且兼容HDFS、Hive等分布式存储层,可融入Hadoop的生态系统,以弥补缺失MapReduce的不足。

​ Spark相比Hadoop MapReduce的优势如下:

​ (1) 中间件结果输出

​ 基于MapReduce的计算引擎通常会将中间结果输出到磁盘上,进行存储和容错。出于任务管道承接的考虑,当一些查询翻译到MapReduce任务时,往往会产生多个Stage,而这些串联的Stage又依赖于底层文件系统(如HDFS)来存储每一个Stage的输出结果。

​ Spark将执行模型抽象为通用的有向无环图执行计划(DAG),这可以将多Stage的任务串联或者并行执行,而无需将Stage中间结果输出到HDFS中。类似的引擎包括Dryad,Tez。

​ (2) 数据格式和内存布局

​ 由于MapReduce Schema on Read处理方式会引起比较大的处理开销,Spark抽象出分布式内存存储结构弹性分布式数据集RDD,进行数据的存储。RDD能支持粗粒度写操作,但对于读取操作,RDD可以精确到每条记录,这使得RDD可以用来作为分布式索引。Spark的特性是能够控制数据在不同节点上的分区,用户可以自定义分区策略,如Hash分区等。Shark和Spark SQL在Spark的基础之上实现了列存储和列存储压缩。

​ (3) 执行策略

​ MapReduce在数据Shuffle之前花费了大量的时间来排序,Spark则可减轻上述问题带来的开销。因为Spark任务在Shuffle中不是所有场景都需要排序,所以支持基于Hash的分布式聚合,调度中采用更为通用的任务执行技术图(DAG),每一轮次的输出结果在内存缓存。

​ (4) 任务调度的开销

​ 传统的MapReduce系统,如Hadoop,是为了运行长达数小时的批量作业而设计的,在某些极端的情况下,提交一个任务的延迟非常高。

​ Spark采用了事件驱动类库AKKA来启动任务,通过线程池复用线程来避免进程或线程启动和切换开销。

3 Spark的优点

(1) 打造全栈多计算范式的高效数据流水线

​ Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。这些不同类型的处理都可以在同一个应用中无缝使用。Spark统一的解决方案非常具有吸引力,毕竟任何公司都想用统一的平台去处理遇到的问题,减少开发和维护的人力成本和部署平台的物力成本。

(2) 轻量级快速处理

​ Spark 1.0核心代码只有4万行。这是由于Scala语言的简洁和丰富的表达力,以及Spark充分利用和集成Hadoop等其他第三方组件,同时着眼于大数据处理,数据处理速度是至关重要的,Spark通过将中间结果缓存在内存减少磁盘I/O来达到性能的提升。

(3)易于使用,Spark支持多语言

Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。而且Spark支持交互式的Python和Scala的shell,可以非常方便地在这些shell中使用Spark集群来验证解决问题的方法。

(4) 与HDFS等存储层兼容

​ Spark可以独立运行,除了可以运行在当下的yarn等集群管理系统之外,它还可以读取已有的任何Hadoop数据。这是个非常大的优势,它可以运行在任何Hadoop数据源上,如HDFS、Hive、HBase和Cassandra等。这个特性让用户可以轻易迁移已有的持久化层数据。Spark也可以不依赖于第三方的资源管理和调度器,它实现了Standalone作为其内置的资源管理和调度框架,这样进一步降低了Spark的使用门槛,使得所有人都可以非常容易地部署和使用Spark。此外,Spark还提供了在EC2上部署Standalone的Spark集群的工具。

(5) 社区活跃度高

​ 开源系统的发展不应只看一时之快,更重要的是支持一个活跃的社区和强大的生态系统。1

1.4 Spark生态系统BDAS

​ 目前,Spark已经发展成为包含众多子项目的大数据计算平台。伯克利将Spark的整个生态系统称为伯克利数据分析栈(BDAS)。其核心框架是Spark,同时BDAS涵盖支持结构化数据SQL查询与分析的查询引擎Spark SQL和Shark,提供机器学习的系统MLbase及底层的分布式机器学习库MLlib,并行图计算框架GraphX、流计算框架Spark Streaming、采样近似计算引擎BlinkDB、内存分布式文件系统Tachyon、资源管理框架Mesos等子项目。

​ 下面对BDAS的各个子项目进行介绍。

(1) Spark

​ Spark是整个BDAS的核心组件,是一个大数据分布式框架编程,不仅实现了MapReduce的算子map函数和reduce函数及计算模型,还提供了更为丰富的算子,如filter、join、groupByKey等。Spark将分布式数据抽象为弹性分布式数据集(RDD),实现了应用任务调度、RPC、系列化和压缩,并为运行在其上的上层组件提供API。其底层采用Scala这种函数式语言书写而成,并且所提供的API深度借鉴Scala函数式的编程思想,提供与Scala类似的编程接口。

​ Spark将数据在分布式环境下分区,然后将作业转化为有向无环图(DAG) , 并分阶段进行DAG的调度和任务的分布式并行处理。

(2) Shark

​ Shark是构建在Spark和Hive基础之上的数据仓库。目前,Shark已经完成学术使命,终止开发,但其架构和原理仍具有借鉴意义。它提供了能够查询Hive中所存储数据的一套SQL接口,兼容现有的Hive SQL语法。这样,熟悉Hive SQL或者SQL的用户可以基于Shark进行快速的Ad-Hoc、Reporting等类型的SQL查询。Shark底层复用Hive的解析器、优化器以及元数据存储和序列化接口。Shark会将Hive SQL编译转化为一组Spark任务,进行分布式运算。

(3) Spark SQL

​ Spark SQL提供在大数据上的SQL查询功能,类似于Shark在整个生态系统的角色,它们可以统称为SQL on Spark。之前,Shark的查询编译和优化器依赖于Hive,使得Shark不得不维护一套Hive分支,而Spark SQL使用Catalyst做查询解析和优化器,并在底层使用Spark作为执行引擎实现SQL的Operator。用户可以在Spark上直接书写SQL,相当于为Spark扩充了一套SQL算子,这无疑更加丰富了Spark的算子和功能,同时,Spark SQL不断兼容不同的持久化存储(如HDFS、Hive等) , 为其发展奠定了广阔的空间。

(4) Spark Streaming

​ Spark Streaming通过将流数据按指定时间片累积为RDD,然后将每个RDD进行批处理,进而实现大规模的流数据处理。其吞吐量能够超越现有主流流处理框架Storm,并提供丰富的API用于流数据计算。

(5) GraphX

​ GraphX基于BSP模型,在Spark之上封装类似Pregel的接口,进行大规模同步全局的图计算,尤其是当用户进行多轮迭代时,基于Spark内存计算的优势尤为明显。

(6) Tachyon

​ Tachyon是一个分布式内存文件系统,可以理解为内存中的HDFS。为了提供更高的性能,将数据存储剥离 Java Heap。用户可以基于Tachyon实现RDD或者文件的跨应用共享,并提供高容错机制,保证数据的可靠性。

(7) Mesos

​ Mesos是一个资源管理框架(Spark自带的资源管理框架是Standalone) ,提供了类似于YARN的功能。用户可以再其中插件式地运行Spark、MapReduce、Tez等计算框架的任务。Mesos会对资源和任务进行隔离,并实现高效的资源任务调度。

(8) BlinkDB

​ BlinkDB是一个用于在海量数据上进行交互式SQL的近似查询引擎。它允许用户通过在查询准确性和查询相应时间做出权衡,完成近似查询。其数据的精度被控制在允许的的误差范围内。为了达到这个目标,BlinkDB的核心思想是:通过一个自适应优化框架,随着时间的推移,从原始数据简历并维护一组多维样本;通过一个动态样本选择策略,选择一个适当大小的示例,然后基于查询的准确性和响应时间满足用户查询需求。

1.5 Spark的架构

​ Spark架构采用了分布式计算中的Master-Slave模型。Master是对应集群中的含有Master进程的节点,Slave是集群中含有Worker进程的节点。Master作为整个集群的控制器,负责整个集群的正常运行;Worker相当于是计算节点,接收主节点命令与进行状态汇报;Executor负责任务的执行;Client作为用户的客户端负责提交应用,Driver负责控制一个应用的执行。

​ 下面详细介绍Spark的架构中的基础组件。

​ ClusterManager:在Standalone模式中即为Master(主节点) ,控制整个集群,监控Worker。在YARN模式中为资源管理器。

​ Worker:从节点,负责控制计算节点,启动Executor或Driver。在YARN模式中为NodeManager,负责计算节点的控制。

​ Driver:运行Application的main()函数并创建SparkContext。

​ Executor:执行器,在worker node上执行任务的组件、用于启动线程池运行任务。每个Application拥有独立一组的Executors。

​ SparkContext:整个应用的上下文,控制应用的生命周期。

​ RDD:Spark的基本计算单元,一组RDD可形成执行的有向无环图RDD Graph。

​ DAG Scheduler:根据作业(Job) 构建基于Stage的DAG,并提交Stage给TaskScheduler。

​ TaskScheduler:将任务(Task) 分发给Executor执行。

​ SparkEnv:线程级别的上下文,存储运行时的重要组件的应用。

​ SparkEnv内创建并包含如下一些重要组件的引用。

​ MapOutPutTracker:负责Shuffle元信息的存储。

​ BroadcastManager:负责广播变量的控制与元信息的存储。

​ BlockManager:负责存储管理、创建和查找块。

​ MetricsSystem:监控运行时性能指标信息。

​ SparkConf:负责存储配置信息。

​ Spark的整体流程为:Client提交应用,Master找到一个Worker启动Driver,Driver想Master或者资源管理器申请资源,之后将应用转化为RDD Graph ,再由DAGScheduler将RDD Graph转化为Stage的有向无环图提交给TaskScheduler,由TaskScheduler提交任务给Executor执行。在任务执行的过程中,其他组件协同工作,确保整个应用顺利执行。

1.6 注释

  1. RPC(Remote Procedure Call Protocol)–远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
  2. Ad-Hoc(点对点))模式:ad-hoc模式就和以前的直连双绞线概念一样,是P2P的连接,所以也就无法与其它网络沟通了。一般无线终端设备像PMP、PSP、DMA等用的就是ad-hoc模式。 在家庭无线局域网的组建,我想大家都知道最简单的莫过于两台安装有无线网卡的计算机实施无线互联,其中一台计算机连接Internet就可以共享带宽。如右图所示,一个基于Ad-Hoc结构的无线局域网便完成了组建。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值