大数据系列第七课:RDD于Spark运行机制

第一阶段(1-3月):会从浅入深,基于大量案例实战,深度剖析和讲解Spark,并且会包含完全从企业真实复杂业务需求中抽取出的案例实战。课程会涵盖Scala编程详解、Spark核心编程、Spark SQLSpark StreamingSpark GraphXSparkRMachine LearningSpark内核以及源码剖析、性能调优、企业级案例实战等部分

第二阶段(Spark超大规模大数据案例实战):使用了Spark技术生态栈中的Spark CoreSpark SQLSpark StreamingSparkRMachine Learning,进行离线计算和实时计算业务模块的开发、数据的关联性分析、用户行为模式和特征的训练与应用、用户网络的社区发现、用户影响力、能量传播、标签传播、标签推理、人群划分、年龄段预测、商品交易时序跳转。

本课内容:

实战讲解Spark运行原理

2 RDD解密

RDD(弹性分布式数据集)

分布式基于内存特别适合于迭代计算,也可以基于磁盘计算,适合各种规模的集群的计算。

1、分布式:多态集群,整个Spark有一个提交程序的Driver端,提交给集群(多台)进行运行,不同的Node处理其中一部分内容,Node间各不影响

2、主要基于内存:data首先会考虑在MEM中运行,data太大可将部分data数据存放于disk上,

3、擅长迭代计算(多步骤计算)shuffle

RDD:rdd代表要处理的数据,分布式处理,data分成若干分片Partition,存储于不同的节点中,只进行rdd的处理,

1RDD弹性的特点:

1、弹性之一:自动的进行内存和磁盘数据存储的切换;

2、弹性之二:基于Lineage的高效容错(第n个节点出错,会从第n-1个节点恢复,血统容错);

3、弹性之三:Task如果失败会自动进行特定次数的重试(默认4次);

4、弹性之四:Stage如果失败会自动进行特定次数的重试(可以值运行计算失败的阶段);只计算失败的数据分片

2RDD写入缓存cache的几种情况:

1、计算步骤特别耗时会做Cache

2、计算链条很长,失败的时候会有很大代价,血统容错恢复;

3shuffle之后;

4checkPointTachyonCache不可靠)data放于文件系统中,保证数据安全

3)启动Spark后的测试:

./start-dfs.sh

多次检验

./spark-all.sh

启动history server

./start-history-server.sh

http://master:18080

>sc.textFile("hdfs://Master:9000/libary/wordcount/input/Data")

数据来源于HDFS

>val sc.textFile("library/wordcount/input/Data") 

//hdfs上读取了数据,这些数据是一系列分片的数据分布于不同的机器上

 

Partition size默认情况下 = hsfs上的 Block size128M

 

sc.textFile("错误路径") 不会报错,因为trasformation的时候采用了lazy的机制。

>val flatted=data.flatMap(_.split(" "))

//rdd有依赖关系

>val mapped =flatted.map(word =>(word,1))

>mapped.toDebugString

>val reduced = mapped.reduce(_+_)

//分布式处理shuffle过程,统计数据

>reduced.savaAsTextFile("http://...")

>reduced.toDebugString 

//显示rdd依赖关系


Spark架构设计

1、创建SparkContext:用户开发编写的逻辑与集群交互的接口,他会通过与Cluster Manager进行交互,以及通过Cluster Manager申请计算资源

2Cluster Manager:资源管理器,类似于Hadoopyarnmesos

3Worker Node:集群中具体中每台机器的存储和计算的支撑

4Executor:在Worker Node上为某个应用程序启动的进程,其内以线程池的方式负责Spark的任务运行,并负责将数据存储在Disk或者MEM

通常在Driver端发送的任务发送到Worker上的Executor上,让线程池进行计算,每个任务都有独立的Executor

所以Spark执行时线程级别的。

 

Spark运行机制:

首先用户创建SparkContext,新创建的SparkContext会根据编程时设置的参数或系统默认的配置连接到

ClusterManager上,ClusterManager会根据用户提交时的设置(如:占用CPUMEN等资源情况),来为用户程序分配计算资源,启动相应的Executor;而Driver根据用户程序调度的Stage的划分,即高层调度器(RDD的依赖关系),若有宽依赖,会划分成不同的Stage,每个Stage由一组完全相同的任务组成,该Stage分别作用于待处理的分区,待Stage划分完成和Task创建完成后,Driver端会向Executor发送具体的task,当Executor收到task后,会自动下载运行需要的库、包等,准备好运行环境后由线程池中的线程开始执行,所以Spark执行是线程级别的。

Hadoop运行比Spark代价大很多,因Hadoop中的MapReduce运行的JVM虚拟机不可以复用,而Spark运行的线

程池中的线程可以进行复用。

执行Task的过程中,Executor会将执行的Task汇报给DriverDriver收到Task的运行状态情况后,会根据

具体状况进行更新等。Task根据不同的Stage的划分,会被划分为两种类型:

1shuffleMapTask,在最后一个Stage前的其他Stage都进行shuffleMapTask,此时是对数据进行shuffle

shuffle的结果保存在Executor所在节点的本地文件系统中;

2)第二种TaskResultTask,负责生成结果数据;

Driver会不断发送TaskExecutor进行执行,所以Task都正确执行或者超过执行次数的限制,或者没有执

行时会停止,多正确执行会进入下一个stage,若没有正确执行成功,高层调度器DAGSchedular会进行一定次

数的重试,若还是执行不成功就意味着整个作业的失败。


DT大数据梦工厂

新浪微博:www.weibo.com/ilovepains/

微信公众号:DT_Spark

博客:http://.blog.sina.com.cn/ilovepains

TEL:18610086859

Email:[email protected]




你可能感兴趣的:(spark)