文档章节

Spark 入门小结(一)

o
 osc_z1hvg4cu
发布于 2018/04/24 20:56
字数 1476
阅读 0
收藏 0

精选30+云产品,助力企业轻松上云!>>>

Spark 使用小结(一)

spark 来源历史

Spark 是一种基于内存计算的大数据并行计算框架。Spark 最初是2009年加州大学伯克利分校开发,2010年开源、2013年成为Apache的开源项目,2014年成为顶级项目。目前使用的主要有2个大的版本1.6 和2.x版本。

Spark 定位

Spark 是一个统一的规模数据分析引擎,是一个基于内存计算的大数据并行计算框架。其主要用于大规模的数据分析运算中。

spark 与MapReduce 区别

在上一节,我们提到spark 是一个基于内存的计算框架。而传统的MR任务却是要将中间数据写入到磁盘的,对同一数据集的多个查询会分别读取数据,产生大量的磁盘读写,导致速度缓慢。关于Spark和MR 的差异,互联网上有很多这方面的比较,这里简单谈点自己的感觉:

  • 更加易用。MR 代码需要大量的样本代码。写代码的时候,必须严格按照map和reduce的思想对数据进行拆分,聚合。一个完整的计算任务,就需要多次重复地编写多个MR 作业来完成整个任务。

  • 性能。根据官网的视图。是传统的MR任务的100倍以上。

  • 迭代处理能力。 每个MR 作业都是把数据写到磁盘里,下一轮迭代再从磁盘里读取数据。而Spark 是在内存中处理了的,效率提高了一个数量级。这里除了内存读写速度更快,还有架构的原因。我们先看下MR框架:
    我们首先看MR 任务中的map操作。map 的主要目的是将原始数据转化为Key-value的样式;reduce主要是左聚合预算,两者都是在不同机器上独立且同步运行的,因此两者中间也必然就存在数据的移动,也就是shuffle。由于数据在不同的机器上,所以每次数据的移动都会涉及大量的网络传输,耗费大量的时间。但由于一个MR任务只能包含一次map和一次reduce,其中间数据只能写回到磁盘中供下次数据使用。如果是做随机梯度下降这样的迭代运算,那就将不断的产生新数据,读取新数据的过程,而每次的读写数据都将进行大量的数据移动,而这些读写实际上都是不太必要的。
    Spark正是基于这些不必要,进行了一些改进。本质上spark也是MR任务。但是,不同的是一个spakr 任务可以不止一个MR任务,而是一组。这样的话,计算的中间结果直接就通过内存的方式传递给了下一个MR任务,而不用再读写一次磁盘了,效率自然也就提高了。

  • 容错能力。spark容错性高,它通过弹性分布式数据集RDD来实现高效容错,RDD是一组分布式的存储在节点内存中的只读性质的数据集,这些集合是弹性的,某一部分丢失或者出错,可以通过整个数据集的计算流程的血缘关系来实现重建;mapreduce的话容错可能只能重新计算了,成本较高。

  • 运行时架构。MR为每个映射器(map)和化简器(reduce)创建单独的JVM,而启动JVM需要时间较长。 Spark的任务都是在一个预先分配的JVM里面运行,省去了启动JVM的过程时间。

  • 执行模式:MR只有批处理。Spark 还有流处理。

Spark 框架组成

Spark的数据分析栈主要包括:Spark(核心组件)、Spark SQL、SparkStreaming(类实时、流处理)、MLib(机器学习)、GraphX(图计算)。 针对这几个模块的介绍,网上有很多,这里就不再一一说明了。

spark 的几个组件

  • Application:Application是指用户编写的Spark应用程序,其中包含一个river功能的代码和分布在集群中多个节点上运行的Executor代码。
  • Driver: 运行Application的main()函数并且创建SparkContext。在Spark中有SparkContext负责与ClusterManager通信,进行资源申请、任务的分配和监控等,当Executor部分运行完毕后,Driver同时负责将SparkContext关闭,所以通常用SparkContext代表driver。
  • Client:用户提交作业的客户端。
  • Worker:集群中任何可以运行Application代码的节点,运行一个或多个Executor进程。(可以简单理解为Spark节点,当然这里的节点多数时候是受Yarn管理的)。
  • Executor:运行在Worker的Task执行器。Executor启动线程池运行Task,并且负责将数据存在内存或者磁盘上。每个Application都会申请各自的Executir来处理任务。
  • SparkContext:整个应用的上下文,控制应用的生命周期。
  • DAG Scheduler: 根据job构建基于Stage的DAG 工作流,并提交Stage给TaskScheduler。
  • Task:被送到某个Executor上的工作单元,多个task组成一个Stage。
  • TaskScheduler:将Task 分发给Executor执行。
  • Stage:每个job会被拆分成多组Task,作为一个TaskSet,其名称为Stage.Stage的边界就是发生shuffle的地方。
  • SparkEnv:线程级别的上下文。

Spark作业提交流程

Client 提交应用,Master(Stabdalone模式下)找到一个Worker启动Driver,Driver向Master或者资源管理器申请资源,之后将应用转化为RDD有向无环图,再由DAGScheduler将RDD有向无环图转化为Stage的有向无环图提交给TaskScheduler,再由TaskScheduler提交任务给Executor执行。 (TaskScheduler此时实际上又是通过Yarn的CluseterManager来执行的具体的分配)

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

百度技术沙龙第67期 百度开源专场

本文作者:HelloDeveloper 具体的产品案例,分享百度开源技术最新实践经验。目前这些项目都已经在 github/baidu 上开源。 什么是 PaddlePaddle 深度学习平台? 首先做个简单的介绍,PaddleP...

百度开发者中心
2019/07/23
11
0
Hacker News 简讯 2020-07-10

更新时间: 2020-07-10 01:15 US Supreme Court deems half of Oklahoma a Native American Reservation - (reuters.com) 美国最高法院认为俄克拉荷马州的一半是印第安人保留地 得分:131 | 评...

FalconChen
今天
26
0
OSChina 周五乱弹 —— 求求你吃了我吧,不要再玩弄食物的感情了

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @巴拉迪维 :张喆的单曲《陷阱 》 这首歌已经在网易找不到原唱了,不知道被哪家买了版权。#今日歌曲推荐# 《陷阱 》- 张喆 手机党少年们想听歌...

小小编辑
今天
32
1
清华陈文光教授:AI 超算基准测试的最新探索和实践。

道翰天琼认知智能平台为您揭秘新一代人工智能。 无规矩不成方圆。放在超级计算机的研发领域,没有一个大家普遍接受的算力评测指标,便难以推动超算迅猛发展。 而现在伴随着人工智能的发展,大...

jackli2020
今天
7
0
@RequestMapping, consumes 提交简单有意思的测试

getParm @GetMapping("getParm")public Result getParm(String id){ System.out.println(); return ResultFactory.success(id);} 等同于 == bodyParm @PostMapping("bodyParm......

莫库什勒
今天
25
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部