Spark运行原理和RDD解析(DT大数据梦工厂)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark运行原理和RDD解析(DT大数据梦工厂)相关的知识,希望对你有一定的参考价值。

Spark一般基于内存,一些情况下也会基于磁盘

Spark优先会把数据放到内存中,如果内存实在放不下,也会放到磁盘里面的

不单能计算内存放的下的数据,也能计算内存放不下的数据

实际如果数据大于内存,则要考虑数据放置策略和优化算法,因为Spark初衷是一寨式处理

小到5~10台的分布式大到8000台的规模,Spark都能运行

大数据计算问题:交互式查询(基于shell、sparkSQL)、批处理、机器学习和计算等等

底层基于RDD,分布式弹性数据级,支持各种各样的比如流处理、SQL、SparkR等等范式

==========Spark特点============

要理解Spark,从以下方面理解

1、分布式多台机器运行

     不同节点会处理其中一部分数据,各个节点数据处理互不干扰,分布式做并行化

     Cluster Manager负责分配资源到各个节点中,各节点算完之后,再汇总到Cluster Manager再统一输出

     

技术分享

2、内存式+磁盘计算

     例如:300万条数据,分配到3台机器,比如每台机器100万(也可能不是平均),一台机器100万条内存放的下放内存,放不下就内存

3、迭代式计算是Spark真正的精髓

     将计算分成N个过程,一个过程结束再下一个 

     shuffle是一个节点到另外一个节点

==========开发============

我们写好程序通过Driver到各个机器

技术分享

为什么大部分大部分用JAVA写程序

因为JAVA的人比较多,Scala的人比较少

JAVA和J2EE融合比较方便

后续维护比较方便

缺点:JAVA开发Spark太繁琐了

后面的例子同时使用Scala和JAVA实现

开发是单独的机器,提交机器是在另外的机器上

可以处理的数据来源:SparkWorker可以从各种数据,除了HDFS、HBase,还可以从Hive,oracle,mysql

                                 注:Hive数据仓库,数据引擎,SparkSQL可以实现这个,但是不能完全取代Hive

处理数据输出:HDFS、HBase、Hive、oracle、s3或者直接返回到客户端等等

技术分享

==========运行============

一切基于RDD(弹性分布式数据集),

弹性之一:

进行数据分片,默认放在内存中的,如果内存放不下,一部分会放在磁盘上进行保存,对用户来说完全不需要关心它数据是在哪里的,RDD会自动进行内存和磁盘的切换

弹性之二:

基于Lineage的高效容错,假设一个作业步骤有1000个步骤,假设在901步骤的时候出错,它会自动从900个步骤进行纠错回复重新计算

弹性之三:

Task如果失败,会自动进行特定次数的重试,假设一个Task有1000个步骤,假设901步骤出错,如果从900个步骤开始重试,会有一定次数的重试,还是失败就真失败

弹性之四:

Stage如果失败,会自动特定次数的重试,而且只会计算失败的分片

注:Stage,其实就是阶段

技术分享

==========做缓存时机 ============

1、特别耗时

2、计算链条很长

3、Shuffle之后,如果这之后失败做过缓存,就不用再做shuffle了

4、checkpoint之前,前面的步骤都缓存过了之后,如果checkpoint断了,之前的就保存了

==========RDD例子 ============

除了hadoop、spark的start-all

hadoop应该启动./start-df.sh

spark应该启动./start-

http://master:18080  看曾经运行的作业的信息

spark的bin下面./spark-shell --master spark://Master:7077

val data = sc.textFile("/library/wordcount/input/Data")或者sc.textFile("hdfs//Master:9000/library/wordcount/input/Data")

技术分享

Spark自己会创建RDD

技术分享

data.roDebugString看数据依赖关系

可以看出是MapPartitionnsRDD是分片方式,分布在不同机器上的

data.count看数据

http://Master:4040看job

技术分享

数据不动,代码动,数据都分布在各个机器上的。

一个Block Size一般是128M,实际Partition和Block Size可能会有出入

val flatted = data.flatMap(_.spilit(" "))

又产生的了新的MapPartitionnsRDD

技术分享

技术分享

val mapped = flatted.map(word=>(word,1))//每个单词计数为1

技术分享

技术分享

val reduced = mapped.reduceByKey(_+_)

key相同的相加,产生shuffle

技术分享

技术分享

reduced .saveAsTextFIle("/library/wordcount/input/Data/output/onclick4")

技术分享

另外:

技术分享

Data2222不存在,开始加载是lazy的,所以不会报错,只有data.count就会报错

下一讲:eclipse开发JAVA和scala角度开发测试和运行程序

作业:写一篇博客,写你理解的Spark的基本理解

王家林老师名片:

中国Spark第一人

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

微信公众号:DT_Spark

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

手机:18610086859

QQ:1740415547

邮箱:[email protected]


本文出自 “一枝花傲寒” 博客,谢绝转载!

以上是关于Spark运行原理和RDD解析(DT大数据梦工厂)的主要内容,如果未能解决你的问题,请参考以下文章

CacheManager彻底解密:CacheManager运行原理流程图和源码详解(DT大数据梦工厂)

SparkRDD解密(DT大数据梦工厂)

Spark分区详解!DT大数据梦工厂王家林老师亲自讲解!

Spark 1.6 RPC内幕解密:运行机制源码详解Netty与Akka等(DT大数据梦工厂)

DT大数据梦工厂第三十五课 Spark系统运行循环流程

彻底解密WordCount运行原理(DT大数据梦工厂)