2021Hadoop&Spark学习记录

写在前面:2021年5月在林子雨老师的MOOC上简单地学习了一点HADOOP和SPARK的内容,整理一下当时记录的笔记。 所有图片来自于教案截图!

HADOOP架构

2021Hadoop&Spark学习记录
spark基于内存,速度比Hadoop快(os:但是内存不会炸吗,要硬件条件很好才行啊)2021Hadoop&Spark学习记录

基本概念和架构设计

2021Hadoop&Spark学习记录

  • RDD:Resillient Distributed Dataset,分布式内存的一个抽象概念,提供了高度受限的共享内存模型

  • DAG:Directed Acyclic Graph,反应RDD之间的依赖关系

  • Executor:运行在workNode的一个进程,负责运行task

  • application:用户编写的应用程序

  • task:运行在executor上的工作单元

  • Job:一个app包含多个job,一个job包含多个RDD

  • stage:一个job被分为多组task,被称为一个stage,不同stage间没有shuffle依赖关系

运行基本流程

1.构建运行环境,driver构建sparkContext,进行资源的申请、任务的分配和监控
与资源管理器交互
2.资源管理器为executor分配资源,启动进程
3.sparkcontext根据RDD依赖关系构建DAG图,被提交给DAGScheduler解析为Stage,把stage(中包含多个task)交给TaskScheduler管理.
Executor申请Task,TaskSchedule发放给Executor运行
4.Executor反馈运行结果给TaskScheduler,再返给DAGSchduler,结束后写入数据、释放资源

  • executor以多线程方式运行task
  • 运行过程与资源管理器无关,只要能与executor保持通信即可
    2021Hadoop&Spark学习记录

RDD

设计背景:
迭代式计算不同计算阶段之间会重用中间结果(MapReduce要写磁盘,磁盘IO、系列化开销大)
RDD提供了抽象数据架构,具体应用逻辑要转换(transformation)
不同RDD之间转换操作形成依赖关系(形成DAG),可实现管道化、避免中间数据存储

  • 管道化:一个RDD处理完,马上给下一个RDD作为输入

概念:
只读。一个RDD可能很大,分为多个分区,不同分区可能被保存在不同节点上,可以并行计算。
只有在创建的时候可以改,放进去后不能改;
转换操作可以改(map,join,group by ),此后形成新的RDD。
结点间变换就要通过RDD变换

  • Action
  • Transformation:粗粒度操作,map,filter,groupBy,join;

中间过程只能使用转换
p.s.spark用scala实现了许多RDD的API

典型执行过程:

  1. 外部读入数据创建RDD
  2. Transformation转换操作,产生不同RDD供给下一个转换操作使用
  3. 最后一个RDD通过“动作”进行转换,输出到外部数据源(生成结果)

不同RDD间的关系成为Lineage(血缘关系)
2021Hadoop&Spark学习记录
RDD的特性

  • 天生具有容错性
  • 中间结果持久化到内存,避免不必要的读写磁盘开销
  • 存放数据可以是JAVA对象,避免不必要的对象序列化和反序列化开销

RDD依赖关系:

  • 窄依赖;一个父亲分区对应一个孩子分区,或多个父亲分区对应一个孩子分区
  • 宽依赖:一个父亲分区对应孩子的多个分区
    2021Hadoop&Spark学习记录
    依赖关系涉及到stage的划分
    窄依赖放入一个stage,宽依赖要断开,有算法
    2021Hadoop&Spark学习记录

stage
可以分为shuffleMapStage和ResultStage

  • ShuffleMapStage不是最终的,遇到shuffle就断开,输出边界一定时shuffle;输入可能是shuffle,可能是数据源。本stage可能不存在
  • ResultStage,没有输出,直接产生结果、存储。输入可能是shuffle,可能是数据源。

一个job中至少有一个resultStage

流计算

数据的处理模型
数据分为:

  • 静态数据,如数据仓库中的数据,只读

  • 流数据stream:数据以大量、快速、时变的流形式持续到达;如PM2.5,点击流数据

流计算概念:
实时获取不同数据源的海量数据,进行实时分析,获得价值
基本理念:数据价值随时间的流逝而降低(如点击流)
【大数据:1s定律】
典型框架:IBM StreamBase(针对金融机构),Twitter Storm,Yahoo!S4,Spark Streaming
流计算处理流程

  • 数据采集:从多个数据源采集,实时性、低延迟、稳定可靠(如日志采集工具)
    分布式日志采集系统:scribe,kafka,linkedin,flume,chukwa
  • 数据采集基本架构:agent分布在不同数据源上,collector接受多个agent数据,有序可靠高性能转发,store存储(流计算一般不用存储,而是直接处理)
    2. 实时计算
    3. 实时查询:用户实时收到查询展示
    2021Hadoop&Spark学习记录

Spark Streaming

可以支持多种输入源、输出源
基本执行流程
以时间片为单位进行拆分,由spark引擎以类似批处理的方式处理每个时间片数据
2021Hadoop&Spark学习记录
DStream(Discretized Stream)
对DStream的操作被映射为RDD操作

  • 无法实现毫秒级流计算

  • 更容易做容错处理

  • 兼容批量和实时数据处理的逻辑和算法,对于需要历史数据和实时数据共同分析的场景非常适合

学了好久没复习,现在一整理发现自己都看不懂写的是什么orz希望以后能养成整理笔记的好习惯!

上一篇:Spark数据倾斜处理方案


下一篇:SparkMlib基础和基础统计