spark 基础

HDFS

HDFS 是 Hadoop Distributed File System 的简称,顾名思义这是一个分布式的文件系统。HDFS可以将文件存储在不同的服务器上。其组成架构如下:

image.png

HDFS 主要分为一个Namenode和多个Datanode,其作用分别是:

  • Namenode: 维护整个文件的目录树,以及每个文件对应的数据块列表(在HDFS中每个文件会被分块放在不同的服务器上)
  • Datanode: 文件真实的存储位置

写文件流程

在HDFS中,文件会分成许多个 block(一个128M,可以通过 hdfs-site.xml 修改), 每一个 block 都会被复制多份放在不同的 datanode 上。当写入文件的时候,首先会向 namenode 发出写申请。 namenode 会选择一些 datanode 来存放 block。Client会选择最近的那一个datanode进行传输,其余的会和这个datanode形成pipline. 这样虽然复制了多份,但是对于client来说网络带宽并不需要增大。示意图如下:



这个过程是同时进行的。 这过程完成后,会接着传输第二个,第三个block。直到传输完成。

读文件流程

  1. client访问NameNode,查询元数据信息,获得这个文件的数据块位置列表,返回输入流对象。
  2. 就近挑选一台datanode服务器,请求建立输入流 。
  3. DataNode向输入流中中写数据,以packet为单位来校验。
  4. 关闭输入流

写文件出错

在写文件时,一个block会被分为许多个packet。当节点收到某个packet时,会将该packet继续写往另一个节点。并且client会维持一个 dataqueen 以及一个 ackqueen。当所有的节点收到某个数据包时,才会将 ackqueen 中的数据删除。当其中一个节点错误时,会将ackqueen中的数据重新写入dataqueen。并将正常节点上当前packet指定一个新的标识,以便完成后删除。例如,最开始 dataqueen = [1, 2, 3, 4, 5], 一共3个节点,当写入第3个包时节点2出错,此时dataqueen = [4, 5], ackqueen=[3]. 因此将 ackqueen 放入到 dataqueen 后, dataqueen=[3, 4, 5] 因此能避免丢失任意一个数据包。

任务执行流程

不同的任务调度框架下不同。但是基本可以分为以下几个部分:

  1. application 用户编写的应用,这是一个虚拟的概念。
  2. driver 用户写的代码所在的线程。
  3. worker 工作节点,负责资源的存储和计算。
  4. executor 工作进程池,可以并行计算多个 task
  5. master 负责计算资源的分配,协同 driver 与 executor

Standalone模式

Standalone是spark自带的资源调度模式,其运行模式为:

  1. 启动应用程序,启动 SparkContext,这个过程中会启动 DAGScheduler 和 Taskcheduler。
  2. Driver 向 Master 注册 Application,Master 将该应用加入到应用队列中。并分配Worker。
  3. 当 Driver 获得 Worker 后,会再 Worker 上创建 Executor,创建完成后将 Executor 注册到SparkContext。然后 SparkContext 分配任务给 Executor 执行。
  4. 任务执行的过程中不断的像 Driver 返回执行情况,执行完毕后 SparkContext 会回收资源。

Yarn模式

Yarn 是通过 ResourceManager 管理资源,每一个节点称为NodeManager。在 NodeManager 中会有多个Container。Executor 会在 Container 中运行。与 Standalone 不同的是,Yarn 通过 ApplicationMaster 来申请任务并与 Driver 联系。流程如下:

  1. 向 ResourceManager 申请一个 NodeManager 中的一个 Container 用于执行 ApplicationMaster。
  2. SparkContext 初始化完成后像 ApplicationMaster 通信,注册到 ResourceManager 并 申请资源。
  3. 资源申请成功后,便与 NodeManager 通信申请创建 Container。 SparkContext 再向NodeManager 分配任务。
  4. 任务完成后,SparkContext 向 ResourceManager 申请注销,并释放资源。

yarn 有两种提交模式: client 以及 cluster。client 的 driver 是运行在本地的,也就是可以实时的观察计算的输出结果。cluster 的 driver 是运行在 NodeManager 上,也就是可以关闭本地的client后也可以继续运行,适合不需要交互的场景。

Mesos

Mesos 分为两种运行模型: 粗粒度以及细粒度模式。 粗粒度模式可以一开始就分配好资源,这个资源在整个 application 的执行中是不会变化的。而细粒度是随着任务的变化,Mesos动态的分配资源。因此在细粒度的执行过程中,Driver是不直接与 Executor 交互,而是将任务交给 Mesos Master 进行分配,这样在分配任务的同时可以动态的分配资源。

调优

代码调优

  1. 重用RDD
  2. 预清洗
  3. 设置缓存

配置调优

  1. --total-executor-cores 100: 调整可使用的核心数
  2. --executor-memory 20G: 调整 executor 内存
  3. spark.shuffe.memoryFraction: 调整 shuffle buffer 大小
  4. 使用repartitioncoalesce 调整分区数

数据倾斜调优

  1. 增加任务数量
  2. 二阶段聚合

JOIN 调优

  1. 如果倾斜的key只占少部分,可以先筛选出这两个key,对大表进行随机前缀,小表进行扩容(同样打上随机浅醉)
  2. 如果倾斜的key占大部分,可以直接不过滤,然后扩容
  3. 广播小表

shuffle调优

  1. 增加 shuffle 内存
  2. 使用预聚合算子

yarn

调度的三种模式

  1. FIFO模式: 任务先提交则一直独占资源,小任务需要一直等待
  2. 容量调度: 容量调度使用独立的专门队列为小队列分配资源,但是不能抢占资源
  3. 公平调度: 可以公平的分配资源,并且可以抢占资源

存储模型

spark 存储同样采用 master-slave 方式进行管理。Master 维护元数据,包括 Block 所在位置,所占空间大小。在 spark 中,每一个 partition 都对应一个 block,blockid=rdd_+rddid+_+partitionid

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容