万有斥力 发表于 2024-6-9 15:15:56

云盘算复习之Spark(Scala版)期末复习整理

声明: 
              1. 本文针对的是一个知识的梳理,自行整理以及方便记忆
              2. 如有错误不当之处, 请指出
Scala是一种针对JVM 将面向函数和面向对象技能组合在一起的编程语言。Scala编程语言近来捉住了很多开辟者的眼球。它看起来像是一种纯粹的面向对象编程语言,而又无缝地联合了下令式和函数式的编程风格。
https://img-blog.csdnimg.cn/direct/f4b5bfdca09848f8acbf4a45b113ff84.png
Scala官网6个特征:

1).Java和scala可以混编
2).范例推测(自动推测范例)
3).并发和分布式
4).特质,特征(类似java中interfaces 和 abstract联合)
5).模式匹配(类似java switch)
6).高阶函数
scala有个原则就是极简原则,不用写的东西一概不写。
https://img-blog.csdnimg.cn/direct/f9efe6d9ebab41dfadf65231bf49ab3f.pnghttps://img-blog.csdnimg.cn/direct/b922eada4db544578b2f8a9350ce414c.png

 
Scala的根本操纵具体参考:Scala快速入门(实用于学习Spark)_scala spark-CSDN博客
Spark的特点:快速,易用,通用,随处运行
https://img-blog.csdnimg.cn/direct/526dc8b2e5c64380a0713dd05ec59260.png

MapReduce和Spark的对比:

spark是内存盘算框架,mapreduce是磁盘盘算框架
这张图显而易见,性能高
https://img-blog.csdnimg.cn/direct/cc915a6d0661482f840780527b6c8931.png
https://img-blog.csdnimg.cn/direct/b7e5a101436e41d5b739e3559359bd3a.png
https://img-blog.csdnimg.cn/direct/6ebf5f3c3e8f4aca91d2265c0250bb8f.png
https://img-blog.csdnimg.cn/direct/5c57b04719004825b1ba9525e8acbd2a.png
https://img-blog.csdnimg.cn/direct/bd5398e8af704531ac472d435dab1253.png
https://img-blog.csdnimg.cn/direct/8b3b63b6057043d6bacac53e2256a500.pnghttps://img-blog.csdnimg.cn/direct/054a9fe336e448da9adc9058effb6e5e.png

Spark的生态体系良好,学习起来方便
https://img-blog.csdnimg.cn/direct/c81d29c863b9435b9c5fbba8915cdfc6.png
根本概念与架构

driver作为管家结点,当执行一个Application时,Driver会向集群管理器申请资源,启动Executor,并向Executor发送应用程序代码和文件,然后在Executor上执行Task,运行结束后,执行效果会返回给Driver,或者写到HDFS或者其他数据库中
https://img-blog.csdnimg.cn/direct/17a713da80ac4d728b0f1b41c302e341.png

简述Spark集群的根本运行流程

1)spark集群启动后,Worker向Master注册信息,spark-submit下令提交程序后,driver和application也会向Master注册信息,创建SparkContext对象:主要的对象包罗DAGScheduler和TaskScheduler
2)Driver把Application信息注册给Master后,Master会根据App信息去Worker节点启动Executor
3)Executor内部会创建运行task的线程池,然后把启动的Executor反向注册给Dirver
4)DAGScheduler:负责把Spark作业转换成Stage的DAG(Directed Acyclic Graph有向无环图),根据宽窄依赖切分Stage,然后把Stage封装成TaskSet的情势发送个TaskScheduler;同时DAGScheduler还会处理惩罚由于Shuffle数据丢失导致的失败;
5)TaskScheduler:维护所有TaskSet,分发Task给各个节点的Executor(根据数据当地化策略分发Task),监控task的运行状态,负责重试失败的task;
6)所有task运行完成后,SparkContext向Master注销,释放资源;
1.为应用构建起根本的运行环境,即由Driver创建一个SparkContext进行资源的申请、任务的分配和监控(SparkContext构建起应用和集群直接的接洽,连接集群的通道)
2.资源管理器为Executor分配资源,并启动Executor进程





https://img-blog.csdnimg.cn/direct/d79a82076b1f4699bbf498555e2010ca.png
写入RDD的缘故原由

https://img-blog.csdnimg.cn/direct/5185f4f52068481bbece023dd0f05355.png
RDD提供了一组丰富的操纵以支持常见的数据运算,分为“动作”(Action)和“”(Transformation)两种范例,RDD提供的转换接口都非常简单,都是类似map、filter、groupBy、join等粗粒度的数据转换操纵,而不是针对某个数据项的细粒度修改(不得当网页爬虫)

执行过程

惰性机制,转换记载轨迹,到了动作的时候才会真正的盘算
https://img-blog.csdnimg.cn/direct/7be94b4244a3418d9cb232941e2af0a9.pnghttps://img-blog.csdnimg.cn/direct/5181822dbad3426f8cad6002b20923f4.png

RDD的依赖关系和分别

宽依赖和窄依赖
https://img-blog.csdnimg.cn/direct/b2c071c399d6409788fee43a9df98807.png
窄依赖
表现为一个父RDD的分区对应于一个子RDD的分区或多个父RDD的分区对应
于一个子RDD的分区(一对一,多对一)
宽依赖
表现为存在一个父RDD的一个分区对应一个子RDD的多个分区(多对一)

https://img-blog.csdnimg.cn/direct/8bdaee922b2e4530a0d37abb4f733e7a.png
https://img-blog.csdnimg.cn/direct/0fb7e6fbbe674a3da6334c31806ad7bc.png
碰到宽依赖断开,碰到窄依赖就把RDD加到阶段中,就可以生成多个阶段。每个阶段包罗很多任务,这些阶段派发给各个结点执行
看个例子:
先分别出stage2,然后碰到F到G断开,A-B断开...最终形成
https://img-blog.csdnimg.cn/direct/51fc269ab91148a9875ab365e5dbf41d.png
所以RDD的运行流程就是:
(1)创建RDD对象
(2)SparkContext负责盘算RDD之间的依赖关系,构建DAG
(3)DAGScheduler负责把DAG图分解成多个Stage每个Stage中包罗了多个Task每个Task会被TaskScheduler分发给各个WorkerNode上的Executor去执行
https://img-blog.csdnimg.cn/direct/fc80d8167db34c09a34eb091d4de3ebe.png
这张图能详细说明spark的核心原理
https://img-blog.csdnimg.cn/direct/d546450a51a4403590be32ee63bd748d.png
创建RDD的方式

1.文件体系创建
https://img-blog.csdnimg.cn/direct/7c898095f5b14c68a1241cfa959d4696.png
2.数组的方式创建
https://img-blog.csdnimg.cn/direct/b2a230613cf74b5e92c562b8ecb151de.png
看个例子:
从文件体系创建RDD
https://img-blog.csdnimg.cn/direct/d75f9d4faded4207aef970d935aa4f3f.png
https://img-blog.csdnimg.cn/direct/b753715195ab457cb8eb37f0b0f083c5.png
通过数组读取
通过parallelize生成每个RDD
https://img-blog.csdnimg.cn/direct/f035f9fd7c21450797f389379a8736a3.png
https://img-blog.csdnimg.cn/direct/a105e7555e894470ab125ca49afe09f1.png

转换操纵




举措操纵

举措(Action)操纵是真正触发盘算的地方。Spark程序执行到举措操纵时,才会执行真正的盘算,从文件中加载数据,完成一次又一次转换操纵,最终,盘算得到效果
https://img-blog.csdnimg.cn/direct/a769faeec96e415ab65aa347b3431370.png
前两行不会真正执行,只会记载这个举措,第三行reduce操纵才会举措,第二活动求每行的长度。
第三行执行的时候会先求每行长度,然后做一个汇总
https://img-blog.csdnimg.cn/direct/c6cc1a4eec154d4a97bcb6e405cded7e.png
再来个例子:
https://img-blog.csdnimg.cn/direct/70a6e288b74a46f0bf20ccb7aac6ed1b.png
切割每行,统计每行单词数,返回最大的
https://img-blog.csdnimg.cn/direct/dd1a12f2b34e4fa48f4e3746e30b8418.png

键值对RDD

pairRDD
https://img-blog.csdnimg.cn/direct/4e9f253e8e094588aa161b93156a4005.png

https://img-blog.csdnimg.cn/direct/1f57ec0bbad943868c3f5ece986a4265.png


文件数据读写

1.当地文件读写

https://img-blog.csdnimg.cn/direct/1a6f362d6e054cadabd528fdbc077c61.png
把文件写归去
https://img-blog.csdnimg.cn/direct/21f7c0c847a14b0a8501d863cda34c5e.png
JSON数据读写

https://img-blog.csdnimg.cn/direct/c16720c715194d8f9d493465f2456e4b.png
https://img-blog.csdnimg.cn/direct/c5ec20096da94ef1ae6af146b00906e1.png



SparkSql简介

shark直接从hive内里搬过来的,只有蓝色部分,转换成spark,提升性能
https://img-blog.csdnimg.cn/direct/87eeffe096b0450abe302593def8f35a.png
https://img-blog.csdnimg.cn/direct/24ab38f935544084b89c971d8e0229ed.png
https://img-blog.csdnimg.cn/direct/afb530fcc51e48238ea5432b90b5bdbc.png


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 云盘算复习之Spark(Scala版)期末复习整理