Spark源码分析:第一章

前言

之前,一直在考虑,如何延续职业生涯.虽然刚入职,但是危机意识告诉我,不能当咸鱼.拒绝996的同时,也要自我学习,才不至于早早被扫地出门.哪怕考公务员也要学习[手动吃瓜].
受到我们部门leader的启发,我决定深入探讨一个工具,钻研源码,做到"精通"一个工具.
由Spark始吧.
本系列,主要参考了耿嘉安的深入理解Spark核心思想与源码分析.可以理解成我照猫画虎,更新了自己的一版本吧.
就从开头开始吧.

1 Spark设计理念和基本架构

1.1 初始Spark
	Spark vs Hadoop
		Hadoop是高吞吐,批量处理,离线计算;我部门就是跑批的形式,批量计算
		实时计算?No

		Spark通过内存计算,比磁盘快十倍以上,
		内存直接由CPU控制,也就是CPU内部集成的内存控制器,所以说内存是直接与CPU对接,享受与CPU通信的最优带宽,
		然而硬盘则是通过桥接芯片(在主板上)与CPU相连,所以说速度比较慢,SATA接口目前最高速度是6GB接口也就是实际传输速度550MB/s,这也是硬盘的最快速度,
		其次就是与CPU直连的m.2口和pcie口,这两种接口都是通过pcie通道与CPU直连,所以说速度都在1.2G/s左右,pcie接口速度随着pcie通道数量的提升而提升,2~4G/s的读写速度都是有的
		内存的读写速度随便可以上20GB/s(50GB/s)
		当然更快的还有CPU的那几级缓存,比如L1可以到400+GB/s的读取、200+GB/s的写入(3100+GB/s读、1600+GB/s写)。
		链接:https://www.zhihu.com/question/33272188

	Spark特点:
		快速处理
		Hadoop是将中间输出和结果存在HDFS中,读写HDFS->磁盘IO,成为速度瓶颈
		Spark可以利用内存,将中间输出和结果存在内存中,避免大量磁盘IO

		Spark本身的DAG,有向无环图,支持内存计算.

		容易使用.支持多种语言编写

		支持查询.SQL

		流式计算,SparkStreaming

		丰富数据库支持.HDFS,Cassandra,HBase,Hive等,都可以接入Spark体系中
1.2 Spark基础知识
	Spark的概念
		RDD, resillient distributed dataset, 弹性分布式数据集
		Task,任务,分为ShuffleMapTask和ResultMap,分别对应于Map和Reduce
		Job,提交的作业,一个Job可以由多个Task构成
		Stage,Job分成的阶段.一个Job可能由一个多个Stage构成
		Partition,分区,RDD的数据可以划分为几个分区
		NarrowDependency,窄依赖,子RDD依赖于父RDD中的固定RDD,不涉及shuffle过程(不涉及洗牌)
		ShuffleDependency,洗牌依赖,子RDD依赖父RDD的多个未知RDD,涉及洗牌过程
1.3 Spark设计思想
	Spark模块
		Spark Core = SparkContext初始化, 部署模式, 存储体系, 任务提交和执行, 计算引擎
		SparkSQL
		SparkStreaming,流式计算,支持Kafka,Flume等
		GraphX,图形计算能力
		MLib, 机器学习

	Spark核心功能 Spark Core
		SparkContext, context,顾名思义,环境,上下文.SparkContext = 网络通信+分布式部署+消息通信+存储+计算+缓存+测量系统+文件服务+Web服务
			因此sc的初始化极其重要
			开发人员只需要利用sc提供的api就可以完成功能开发.
			sc内置的DAGScheduler,有向无环图调度器,就可以创建job,将rdd划分到不同stage,提交stage.
			taskscheduler,任务调度器,可以申请资源,任务提交,请求集群对任务的调度

		存储体系
			spark优先利用内存作为存储.减少磁盘IO,提高效率.
			提供以内存为中信的高容错的分布式文件系统,Tachyon

		计算引擎
			DAGScheduler向无环图调度器,RDD,Executor一起,负责Map和Reduce的执行.
			DAGScheduler和RDD位于sc内部,但是任务正式提交与执行之前,会将Job中的RDSD组成DAG,然后划分stage,决定任务执行阶段,任务的数量,迭代计算,shuffle等过程

		部署模式
			Yarn,Mesos,Standalone

	Spark扩展功能
		SQL
		Streaming
		GraphX

	Spark模型设计
		通过sc提供的api编写driver
		使用sc提交的用户程序,先用blockmanager和broadcastmanager将任务的hadoop配置进行广播,然后DAGscheduler将任务转化为RDD,
		并组织成DAG,DAG还被划分为不同的stage;TaskScheduler借助ActorSystem将任务提交给集群管理器ClusterManager
		ClusterManager给任务分配资源,将具体任务分配给worker,worker创建executor来处理任务运行;有不同的集群管理器,standalone,yarn,mesos等

	RDD计算模型
		ClusterManager:yarn,mesos,standalone;负责worker上面的资源分配给应用程序;不负责对executor的资源分配;也就是将资源分给具体的worknode,工作节点,但是工作节点内部如何划分资源,属于work内政
		worker:干活的,工作节点
		executor:执行计算任务的一线进程.负责任务执行,worker和driverapp的信息同步
		driverapp:客户端驱动程序,将任务转成RDD和DAG,与ClusterManager通信和调度
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值