Spark介绍

来源:互联网 发布:支持双系统备份软件 编辑:程序博客网 时间:2024/05/16 05:00
Spark是一个通用的大规模数据快速处理引擎。Spark提供的基于RDD的一体化解决方案,将MapReduce、Streaming、SQL、Machine Learing、Graph Processing等模型统一到一个平台下,并将一致的API公开且提供相同的部署方案,使得Spark的工程应用领域变得更加广泛。
由于Hadoop的MapReduce具有高延迟的致命弱点,导致Hadoop无力处理很多对时间有要求的场景。Hadoop本身的计算模型决定了Hadoop上所有的工作都要转化成Map、Shuffle和Reduce等核心阶段,由于每次计算都要从磁盘读或者写数据,同时整个计算模型需要网络传输,这就导致了越来越多不能忍受的延迟性,同时在前一个任务运行完之前,任何一个任务都不可以运行,这直接导致了无力支持交互式应用。

Spark特征:
快速
基于Spark内存的计算速度比Hadoop MapReduce快100倍以上,基于磁盘的计算速度也要快10倍以上。原因是Spark有个一Directed Acyclic Graph(DAG有向无环图)执行引擎,支持循环数据流和内存计算。
易用
提供多语言(包括Scala、Java、Python)API,能够快速实现应用,相比MapReduce有更简洁的代码,安装部署也无需复杂的配置。使用API可以轻松地构建分布式应用程序,当然也可以使用Scala和Python脚本进行交互式编程。
通用
提供了一个强大的技术栈,包括查询语言Spark SQL、机器学习工具MLlib、图计算工具GraphX、实时流处理工具Spark Streaming,在同一个应用程序中可以无缝地连接使用这些框架,而Hadoop的技术栈则相对独立也较为复杂,各个框架都是独立的系统,给集成带来了很大的复杂性和不确定性,Spark的目的在于构建一个结构上一体化、功能上多元化的高效数据流水线技术栈。
集成Hadoop
Spark可以运行在第二代Hadoop集群管理Yarn上,这使得Spark可以读取Hadoop的任何数据,它能读取HDFS、HBase、Cassandra以及任何Hadoop数据源。

Spark术语
Spark有多种运行模式,最简单的是单机本地模式,还有单机伪分布式模式,复杂的则运行在集群中,还有自带的Standalone模式。
Spark的几种运行模式
local本地模式常用于本地测试开发,分为local和local-cluster
local-cluster是多线程,能够在单机上处理一定的并发standalone集群模式典型的Master/Slava模式,Master有单点故障,可以通过ZooKeeper来实现HAon yarn集群模式运行在Yarn资源管理器框架之上,由Yarn负责资源管理,Spark负责任务调度和计算on mesos集群模式运行在mesos资源管理器框架之上,由mesos负责资源管理,Spark负责任务调度和计算on cloud集群模式比如AWS的EC2,使用这个模式能很方便的访问Amazon的S3
Spark支持多种分布式存储系统:HDFS和S3

常见术语
ApplicationSpark 的应用程序,包含一个 Driver program 和若干个 ExecutorSparkContextSpark 应用程序的入口,负责调度各个运算资源,协调各个 Worker Node 上的 ExecutorDriver Program运行Application的main()函数并且创建SparkContextExecutor是Application运行在Worker node上的一个进程,该进程负责运行Task,并且负责将数据存储在内存或者磁盘上
每个Application都会申请各自的Executor来处理任务Cluster Manager在集群上获取资源的外部服务(例如:Standalone、Mesos、Yarn)Worker Node集群中任何可以运行Application代码的节点,运行一个或多个Executor进程Task运行在Executor上的工作单元JobSparkContext提交的具体Action操作,常和Action对应Stage每个Job会被拆分很多组任务(task),每组任务被称为Stage,也称TaskSetRDDResilient distributed datasets的简称,中文为弹性分布式数据集,是Spark最核心的模块和类DAGScheduler根据Job构建基于Stage的DAG,并提交Stage给TaskScheduler

1、接收用户提交的job;
2、将job根据类型划分为不同的stage,记录哪些RDD、Stage被物化,并在每一个stage内产生一系列的task,并封装成TaskSet;
3、决定每个Task的最佳位置(任务在数据所在的节点上运行),并结合当前的缓存情况;将TaskSet提交给TaskScheduler;
4、重新提交Shuffle输出丢失的Stage给TaskScheduler;
  注:一个Stage内部的错误不是由shuffle输出丢失造成的,DAGScheduler是不管的,由TaskScheduler负责尝试重新提交task执行;TaskScheduler将Taskset提交给Worker Node集群运行并返回结果Transformations/ActionSpark API 的两种类型
Transformation返回值还是一个 RDD
Action返回值不是一个RDD,而是一个Scala集合
所有的Transformation都是采用懒策略,如果只是将Transformation提交是不会执行计算的,计算只有在Action被提交时才被触发DAG在Spark里每一个操作生成一个RDD,RDD之间连一条边,最后这些RDD和他们之间的边组成一个有向无环图,这个就是DAG。


0 0
原创粉丝点击