Spark的基础知识

与Hadoop中的MapReduce计算模型差异

MapReduce:

  • 磁盘IO开销大
  • Map/Reduce表达能力有限,难以描述复杂的数据处理过程
  • 延迟高: 磁盘读写延迟;Map/Reduce分阶段执行导致的延迟
  • 不利于迭代式

Spark:

  • 内存计算(也不是完全在内存,比如shuffle;比如RDD默认存放在内存中,但内存不足时RDD将被写入磁盘)
  • 比Map/Reduce更多的操作模式,不仅实现了Map/Reduce的算子map函数和reduce函数及计算模型,还提供更为丰富的算子,如filter、 join、groupByKey等
  • 基于DAG的调度机制,优化

 

生态系统(the Berkeley Data Analytics Stack)

Spark Core:包含Spark基本功能

Spark SQL:允许开发人员直接处理RDD,同时也可以查询Hive、HBase等外部数据源

Spark Streaming:实时流数据处理,支持多种数据输入源,如Kafka、Flue、TCP套接字等

GraphX:图计算

MLlib

 

基本概念

RDD:

  • 将数据拆分为多个分区的集合,储存在集群中的worker node上的内存中,每个分区有计算函数,计算该分区的数据
  • RDD的操作: transformation (lazy),action (non-lazy);对于transformation,RDD不会直接计算结果,仅记录操作,只有遇到action时才进行计算
  • 只读
  • 分区数量可动态变化(数据集可大可小)
  • 可分布式地储存在多台机器的内存中

DAG:

  • 反应RDD间的依赖关系
  • DAGScheduler将DAG划分为多个stage,每个stage由一组并行的task组成
  • 计算向数据靠拢:优先把计算分发到数据所在的节点,减少数据的移动开销

Application:建立在Spark上的用户程序,包含一个driver program和集群上的executors

Driver program: 执行application中的main方法和创建SparkContext的进程

Cluster manager: 在集群上获取资源的外部服务(与Spark运行过程无关),可以是 Spark’s own standalone cluster manager, Apache Mesos,Hadoop YARN 或 Kubernetes,

Worker node:集群中可以运行applicaion的节点,每个worker node上有一个executor,每个executor派生多个线程,执行具体的task

Executor:工作在worker node上的执行task和存储RDD的进程,每个application有自己专属的executor进程

Task:被送到某个executor上的工作单元,一个task包含多个RDD及作用在相应RDD上的各种操作

Job:包含多个task的并行运行,往往由Spark action触发

Stage:每个job被分成相互依赖的多组tasks,每组tasks称为stage

 

运行架构

一个application由一个driver program和若干个job组成,一个job由多个stage组成,一个stage由多个task组成

  • 当一个application被提交时,首先为这个application构建基本的运行环境,即由driver program创建一个SparkContext,并在之后通过SparkContext主导application的运行
  • SparkContext连接cluster manager,并向其申请资源
  • 启动executor进程
  • SparkContext根据RDD依赖关系构建DAG,DAGScheduler解析成多个stage并计算出stage间依赖关系,然后发送给TaskScheduler
  • TaskScheduler将task分发给executor(计算将数据靠拢原则),同时SparkContext将application的代码发送给executor
  • executor运行task后,将结果反馈给TaskScheduler,然后反馈给DAGScheduler,运行完毕后写入数据并释放资源

 

部署模式

standalone

Spark on Mesos

Spark on YARN

 

Notes

分布式的两种典型架构模式:master-slave pattern / peer-to-peer pattern

 

Reference

常见的软件架构模式

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于学习Spark基础知识,我建议按照以下思路进行: 1. 理解分布式计算概念:Spark是一个分布式计算框架,因此了解分布式计算的基本概念是很重要的。你可以学习分布式计算的原理、架构和常用的算法。 2. 学习Spark的核心概念:掌握Spark的核心概念是学习Spark的首要任务。这包括理解RDD(弹性分布式数据集)、DataFrame和DataSet等数据抽象概念,以及Spark的运行架构和作业调度模型等。 3. 学习Spark编程模型:掌握Spark编程模型是使用Spark进行开发的基础。你可以学习Spark提供的编程接口,如Scala、Java和Python,以及使用这些接口来编写Spark应用程序。 4. 实践使用Spark:通过实际的项目或练习来巩固所学知识。可以选择一些小规模的数据集进行处理和分析,尝试使用Spark的各种功能和API来解决实际问题。 5. 深入学习Spark生态系统:除了核心的Spark框架外,还有很多与之配套的工具和库,如Spark SQL、Spark Streaming、MLlib和GraphX等。学习这些工具和库可以进一步扩展你的Spark技能。 6. 参考文档和学习资源:Spark官方文档是学习的重要参考资源,可以深入了解每个模块的详细信息。此外,还可以参考Spark的书籍、教程和在线课程等学习资源。 通过以上步骤,你应该能够建立起对Spark基础知识和编程能力。记得不断实践和探索,提升自己在Spark领域的技能。祝你学习顺利!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值