文章目录

  • spark 有哪些组件?
  • spark 工作机制?
  • shuffle优化?
    • 程序调优
    • 参数调优
  • spark 如何保证宕机迅速恢复?
  • Spark Streaming 和 Storm 有何区别?
  • Spark streaming 以及基本工作原理?
  • spark宽依赖和窄依赖?
  • spark 常用的计算框架?
  • spark 整体架构?
  • Spark 的特点是什么?
  • Spark 的三种提交模式是什么?
  • Spark内存溢出问题?
    • Spark内存模型
    • map执行后的内存溢出
    • shuffle后内存溢出
    • shuffle file not found
  • spark 支持故障恢复的方式?
  • Spark 提交的 job 的工作流程?

spark 有哪些组件?

  • master:管理集群和节点,不参与计算。
  • worker:计算节点,进程本身不参与计算,和 master 汇报。
  • Driver:运行程序的 main 方法,创建 spark context 对象。
  • spark context:控制整个 application 的生命周期,包括 dagsheduler 和 task scheduler 等组件。
  • client:用户提交程序的入口。

spark 工作机制?

  • 用户在 client 端提交作业后,会由 Driver 运行 main 方法并创建 spark context 上下文。
    执行 add 算子,形成 dag 图输入 dagscheduler,按照 add 之间的依赖关系划分 stage 输入 task
    scheduler。 task scheduler 会将 stage 划分为 task set 分发到各个节点的 executor 中执行。

shuffle优化?

程序调优

  • 首次尽量减少shuffle的次数:
    Rdd.map().repartition(3000).reduceByKey(+).
  • 必要时主动 shuffle,通常用于改变并行度,提高后续分布式运行速度:
    rdd.repartition(largerNumPartition).map()
  • 使用 treeReduce&treeAggregate 替换 reduce&aggregate:
    reduce&aggregate 一次性聚合,shuffle 量太大,而 treeReduce&treeAggregate
    是分批聚合,更为保险。

参数调优

  • spark.shuffle.file.buffer:map task 到 buffer 到磁盘
    默认值:32K
  • 调优建议:如果作业可用的内存资源较为充足的话,可以适当增加这个参数
    的大小(比如 64k),从而减少 shuffle write 过程中溢写磁盘文件的次数,也就可
    以减少磁盘 IO 次数,进而提升性能。在实践中发现,合理调节该参数,性能会
    有 1 到 5%的提升。
  • spark.reducer.maxSizeFlight:reduce task 去磁盘拉取数据
    默认值:48m
  • 调优建议:如果作业可用的内存资源较为充足的话,可以增加这个参数的大
    小(比如 96M),从而减少拉取数据的次数,也就可以减少网络传输的次数,进而
    提升性能。在实践中发现,合理调节该参数,性能会有 1 到 5%的提升。

spark 如何保证宕机迅速恢复?

  • 适当增加 spark standby master
  • 编写 shell 脚本,定期检测 master 状态,出现宕机后对 master 进行重启操作

Spark Streaming 和 Storm 有何区别?

  • Spark Streaming与Storm都可以用于进行实时流计算;
  • Storm 的优势:
    • Spark Streaming 是基于 RDD 的,因此需要将一小段时间内的,比如 1 秒内的数据,
      收集起来,作为一个 RDD,然后再针对这个 batch 的数据进行处理。而 Storm 却可以做到每
      来一条数据,都可以立即进行处理和计算
    • Storm 支持在分布式流式计算程
      序运行过程中,可以动态地调整并行度,从而动态提高并发处理能力。而 Spark Streaming
      是无法动态调整并行度的;
  • Spark Streaming 的优势:
    • 由于 Spark Streaming 是基于 batch 进行处理的,
      因此相较于 Storm 基于单条数据进行处理,具有数倍甚至数十倍的吞吐量
    • Spark
      Streaming 由于身处于 Spark 生态圈内,因此可以和 Spark Core、Spark SQL、Spark MLlib、
      Spark GraphX 进行无缝整合。流式处理完的数据,可以立即进行各种 map、reduce 转换操作,
      可以立即使用 sql 进行查询,甚至可以立即使用 machine learning 或者图计算算法进行处理。
      这种一站式的大数据处理功能和优势,
  • 通常在对实时性要求特别高,而且实时数据量不稳定,比如在白天有高
    峰期的情况下,可以选择使用 Storm。但是如果是对实时性要求一般,允许 1 秒的准实时处
    理,而且不要求动态调整并行度的话,选择 Spark Streaming 是更好的选择.

Spark streaming 以及基本工作原理?

  • 用于进行大规模、高吞吐量、容错
    的实时数据流的处理。它支持从多种数据源读取数据,比如 Kafka、Flume、Twitter 和 TCP
    Socket,并且能够使用算子比如 map、reduce、join 和 window 等来处理数据,处理后的数据
    可以保存到文件系统、数据库等存储中。
  • 工作原理是:接受实时输入数据流,然后将数据拆分成 batch,
    比如每收集一秒的数据封装成一个 batch,然后将每个 batch 交给 spark 的计算引擎进行处理,
    最后会生产处一个结果数据流,其中的数据也是一个一个的 batch 组成的。

spark宽依赖和窄依赖?

  • 宽依赖:shuffle dependency,本质就是 shuffle。父 RDD 的每一个 partition 中的数据,
    都可能会传输一部分到下一个子 RDD 的每一个 partition 中,此时会出现父 RDD 和子 RDD
    的 partition 之间具有交互错综复杂的关系,这种情况就叫做两个 RDD 之间是宽依赖。
  • 窄依赖:narrow dependency,父 RDD 和子 RDD 的 partition 之间的对应关系是一对一的

spark 常用的计算框架?

  • Spark Core 用于离线计算
  • Spark SQL 用于交互式查询
  • Spark Streaming 用于实时流式计算.
  • Spark MLlib 用于机器学习
  • Spark GraphX 用于图计算

spark 整体架构?

SparkSQL SparkStreaming GraphX MLlib
Spark RDD
Spark Engine
Yarn,Mesos,AWS HDFS,S3,Cassandra

Spark 的特点是什么?

  • 速度快:Spark 基于内存进行计算(当然也有部分计算基于磁盘,比如 shuffle)。
  • 容易上手开发:Spark 的基于 RDD 的计算模型,比 Hadoop 的基于 Map-Reduce
    的计算模型要更加易于理解,更加易于上手开发,实现各种复杂功能,比如二次
    排序、topn 等复杂操作时,更加便捷
  • 超强的通用性:Spark 提供了 Spark RDD、Spark SQL、Spark Streaming、Spark
    MLlib、Spark GraphX 等技术组件,可以一站式地完成大数据领域的离线批处理、
    交互式查询、流式计算、机器学习、图计算等常见的任务。
  • 集成 Hadoop:Spark 并不是要成为一个大数据领域的“独裁者”,一个人霸占
    大数据领域所有的“地盘”,而是与 Hadoop 进行了高度的集成,两者可以完美
    的配合使用。Hadoop 的 HDFS、Hive、HBase 负责存储,YARN 负责资源调度;
    Spark 复杂大数据计算。实际上,Hadoop+Spark 的组合,是一种“double win”
    的组合。
  • 极高的活跃度:Spark 目前是 Apache 基金会的顶级项目,全世界有大量的优
    秀工程师是 Spark 的 committer。并且世界上很多顶级的 IT 公司都在大规模地使
    用 Spark。

Spark 的三种提交模式是什么?

  • Spark 内核架构,即 standalone 模式,基于 Spark 自己的 Master-Worker 集群;
  • 基于 Yarn 的 yarn-cluster 模式;
  • 基于 Yarn 的 yarn-client 模式。
  • 要切换到第二种和第三种模式,将之前提交 spark 应用程序的
    spark-submit 脚本,加上–master 参数,设置为 yarn-cluster,或 yarn-client 即可。
    如果没设置就是 standalone 模式。

Spark内存溢出问题?

Spark内存模型

  • 存储内存:用于在集群中持久化和广播内部数据
  • 执行内存:用于shuffle、join、排序、聚合等计算
  • 系统预留:用于存储数据结构,Spark中内部的元数据
  • 存储内存执行内存可以互相借用内存空间

map执行后的内存溢出

  • 场景:reduce task 去map一边拉取数据,一边聚合。reduce端有一块聚合内存,executor memeory * 0.2

  • 解决方案:

    • 增加reduce聚合内存的比例 Spark.shuffle.memory.fraction
    • 增加executor memory 的大小
    • 减少reduce task 每次拉取的数据量 spark.reducer.maxSizeFlight 24m

shuffle后内存溢出

  • 场景:reduce task 去map一边拉取数据,一边聚合。reduce端有一块聚合内存,executor memeory * 0.2

  • 解决方案:

    • 增加reduce聚合内存的比例 Spark.shuffle.memory.fraction
    • 增加executor memory 的大小
    • 减少reduce task 每次拉取的数据量 spark.reducer.maxSizeFlight 24m

    shuffle file not found

    • 产生这个报错的原因可能是最后一个stage的task 从 上一个stage所在的executor拉取数据,但是上一个stage正在执行GC,导致数据没有拉取到。
    • 解决办法:通过调整拉取的次数和时间间隔来避免此类事件的发生

spark 支持故障恢复的方式?

  • 主要包括两种方式:一种是通过血缘关系 lineage,当发生故障的时候通过血缘关系,再执行一遍来一层一层恢复数据;
  • 另一种方式是通过 checkpoint()机制,将数据存储到持久化存储中来恢复数据。

Spark 提交的 job 的工作流程?

  • 用户提交一个任务。 入口是从 sc 开始的。 sc 会去创建一个 taskScheduler。根据不同的提
    交模式, 会根据相应的 taskchedulerImpl 进行任务调度。
  • 同时会去创建 Scheduler 和 DAGScheduler。DAGScheduler 会根据 RDD 的宽依赖或者窄依赖,
    进行阶段的划分。划分好后放入 taskset 中,交给 taskscheduler 。
  • appclient 会到 master 上注册。
    • 首先会去判断数据本地化,尽量选最好的本地化模式去执行。打 散 Executor 选 择 相 应 的 Executor 去 执 行 。
    • ExecutorRunner 会 去 创 建CoarseGrainerExecutorBackend 进程。 通过线程池的方式去执行任务。
  • 反向:
    • Executor 向 SchedulerBackend 反向注册
    • Spark On Yarn 模式下。 driver 负责计算调度。appmaster 负责资源的申请。

spark基础理论及优化思路相关推荐

  1. 完美日记的微服务实践和优化思路

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「阿里巴巴中间件」 如果你是一位程序媛, ...

  2. “国货之光” 完美日记的微服务实践和优化思路

    如果你是一位程序媛,你一定知道完美日记. 如果你是一位程序员,你的那个她一定知道完美日记. 今年双11,完美日记仅用28分钟就超过了2018年双11全天的销售额,成为第一个登上天猫双11彩妆榜首的国货 ...

  3. 优化思路千万种,基于下界函数的最优化效率如何?

    作者丨stephenDC 来源 | 大数据与人工智能(ID:ai-big-data) 导读:生活中我们处处面临最优化的问题,比如,怎么样一个月减掉的体重最高?怎么样学习效率最高?怎么样可以最大化实现个 ...

  4. 【算法笔记】一步一步推出来的同余最短路优化思路(千字长文,超详细)

    整理的算法模板合集: ACM模板 目录 同余最短路 例题1:luogu P3403 跳楼机 例题2:luogu P2371 [国家集训队]墨墨的等式 例题3:luogu P2662 牛场围栏 同余最短 ...

  5. 递增三元组蓝桥杯c语言,第九届蓝桥杯_递增三元组(枚举的优化思路)

    给定三个整数数组 A = [A1, A2, ... AN], B = [B1, B2, ... BN], C = [C1, C2, ... CN], 请你统计有多少个三元组(i, j, k) 满足: ...

  6. 秒杀系统架构优化思路

    本文曾在"架构师之路"上发布过,近期支援Qcon-AS大会,在微信群里分享了该话题,故对原文进行重新整理与发布. 架构师之路16年精选50篇 一.秒杀业务为什么难做 1)im系统, ...

  7. 2020年网站优化思路从哪着手?

    众所周知,网站在不断的进步中优化方式也在不断的升级,随着互联网发展的速度越来越快以及为了满足更多人们的需求,网站优化也要注意更多细节方面的技巧,那么今年的网站优化思路都有哪些呢? 一.关键词密度 首先 ...

  8. 阿里秒杀系统架构优化思路

    秒杀业务为什么难做 im系统,例如qq或者微博,每个人都读自己的数据(好友列表.群列表.个人信息) 微博系统,每个人读你关注的人的数据,一个人读多个人的数据 秒杀系统,库存只有一份,所有人会在集中的时 ...

  9. 使用RNN解决NLP中序列标注问题的通用优化思路

    /* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 (想更系统地学习深度学习知识?请参考:深度学习枕边书) 序列标注问题应该说是自然语言处理中最常见的问题 ...

最新文章

  1. php7-sapnwrfc
  2. WordPress前台后台出现一片空白的原因以及解决办法
  3. 数组小案例(求数组最大最小值、反转数组中元素、指定元素第一次出现的索引)
  4. Shiro学习(24)在线回话管理
  5. 微信小程序开发——小程序分享转发
  6. net core 2 读取appsettings.json
  7. 文本生成解码策略笔记-常见解码策略
  8. 怎样把百度图片设置成传统翻页 瀑布流与传统翻页的转换
  9. mysql 主从复制原理【转】
  10. WinSock IO模型五: 完成端口
  11. antd-select拼音首字母模糊查询
  12. linux改-文件夹名称,linux修改文件夹名字
  13. vue + elment ui打印表格数据
  14. 小程序关注微信公众号的方法
  15. MySql无法连接本地地址localhost
  16. python爬虫获取图片无法打开或已损坏_Python爬取小姐姐图片
  17. 互联网行业薪酬分析,快来看看做什么最赚钱!
  18. 如何高效进行大规模分类?
  19. poi获取段落位置_apache poi word提取段落
  20. 对数组名取地址赋值给数组指针与普通指针的区别

热门文章

  1. MPI多进程问题记录
  2. JavaScript - jQuery(一)
  3. 随机位置生成小方块案例
  4. JAVA+JDBC超级详解---从连接数据库到连接池
  5. PPT图片瘦身/图片提取
  6. oracle执行存储过程参数,Oracle定时任务执行存储过程带参数
  7. 多台Linux服务器时钟同步
  8. IT培训机构如何选择
  9. 企查查爬虫循环获取信息
  10. ubuntu16.04(虚拟机) 上MPD(Music Player Daemon)+MPC运行环境搭建