本文转自http://mp.weixin.qq.com/s?__biz=MzA5MTcxOTk5Mg==&mid=208059053&idx=3&sn=1157ab5db7bc2783e812e3dc14a0b92e&scene=18#rd,所有权力归原作者所有。

在上一篇文章中,我们讲了Spark大数据处理的可扩展性和负载均衡,今天要讲的是更为重点的容错处理,这涉及到Spark的应用场景和RDD的设计来源。

Spark的应用场景

Spark主要针对两种场景:

  • 机器学习,数据挖掘,图应用中常用的迭代算法(每一次迭代对数据执行相似的函数)

  • 交互式数据挖掘工具(用户反复查询一个数据子集)

Spark在spark-submit外,还提供了spark-shell,它就是专门用来做交互数据挖掘的工具

MapReduce等框架并不明确支持迭代中间结果/数据子集的共享,所以需要将数据输出到磁盘,然后在每次查询时重新加载,这带来较大的开销。

既然反复写磁盘和从磁盘加载数据使得性能下降,那就把数据放到内存中,这就是Spark基于内存的弹性分布式数据集(RDD)的出发点。

自动容错

MapReduce是容错性非常好的系统。处理一步就放到磁盘,再处理一步又放到磁盘,一旦哪一步有问题,重做就好了,真可谓是一步一个脚印。Spark为了上述场景下的性能,把数据放在内存中,那整个系统的容错就成了最困难的地方。

一般来说,分布式数据集的容错性有两种方式:即数据检查点和记录数据的更新。由于面向的是大规模数据分析,数据检查点操作成本很高:需要通过数据中心的网络连接在机器之间复制庞大的数据集,而网络带宽往往比内存带宽低得多,同时还需要消耗更多的存储资源(在内存中复制数据可以减少需要缓存的数据量,而存储到磁盘则会拖慢应用程序)。所以选择记录更新的方式。但是,如果更新太多,那么记录更新成本也不低。因此,RDD只支持读操作,并且只支持粗粒度转换,即在大量记录上执行的单个操作。将创建RDD的一系列转换记录下来(即Lineage),以便恢复丢失的分区。

虽然只支持粗粒度转换限制了编程模型,但是RDD仍然可以很好地适用于很多应用,特别是支持数据并行的批量分析应用,包括数据挖掘、机器学习、图算法等,因为这些程序通常都会在很多记录上执行相同的操作。

RDD抽象

RDD是只读的、分区记录的集合。RDD只能基于在稳定物理存储中的数据集和其他已有的RDD上执行确定性操作来创建。这些确定性操作称之为转换,如map、filter、groupBy、join(转换不是程开发人员在RDD上执行的操作)。

RDD含有如何从其他RDD计算出本RDD的相关信息(即Lineage),据此可以从物理存储的数据计算出相应的RDD分区。

在需要反复使用的某个数据集时,使用RDD的持久化,即persist,这个持久化优先是放在内存中的。

再来看看WordCount

说了这么多,我们依然拿WordCount来说说,帮忙小伙伴们理解,还没有看本系列前两篇文章的童鞋抓紧去看看哈。

val file = "hdfs://127.0.0.1:9000/file.txt"val lines = sc.textFile(file)val words = lines.flatMap(line => line.split("\\s+"))val partialCountMap = words    .mapPartitions(convertWordsInPartitionToWordCountMap)val wordCount = distCountMap.reduce(mergeMaps)

WordCount一共涉及到三个RDD,用于承载文本行的lines,用于承载单词的words,用于承载每个文件块上部分单词计数的partialCountMap。Lineage关系:partialCountMap的父RDD为words,words的父RDD为lines,如下图:

有了Lineage和RDD的只读特性,就可以轻松完成容错了。

如果words在slave1上的一个分区出问题了,那么我们只需要加载slave1上对应的文件块,并重新计算其lines对应的分区,进而计算得到words的这个分区。

图中每个slave中只画了一个文件块,实际上可能有多个文件块。一定要注意的是哪个分区出问题了,只会重算这一个分区,也就只会重新加载这个分区关联的文件块。

上面讨论的是窄依赖的情况,如果像groupBy这种转换,一个RDD分区需要依赖父RDD的多个分区,那么一个分区挂了,就需要计算父RDD中的多个分区。

分布式系统的三个问题:可扩展性,负载均衡,容错处理,都解决了吧。

不知道看到这里的小伙伴,心里是否有个疑问,既然RDD的API只支持粗粒度的转换,它真的能够支持这么多千奇百怪的应用场景吗?下一篇,我们一起看RDD的API,以及它对其它大数据处理框架能够处理的应用场景的等效解决方案。

从WordCount看Spark大数据处理的核心机制(2)相关推荐

  1. 从WordCount看Spark大数据处理的核心机制(1)

    本文转自http://mp.weixin.qq.com/s?__biz=MzA5MTcxOTk5Mg==&mid=208059053&idx=2&sn=fc3a8d886630 ...

  2. 《Spark大数据分析:核心概念、技术及实践》大数据技术一览

    本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第1章,第1节,作者穆罕默德·古勒(Mohammed Guller)更多章节内容可以访问云栖社区"华章 ...

  3. 《Spark大数据分析:核心概念、技术及实践》一3.5 API

    本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第3章,第3.5节,作者[美] 穆罕默德·古勒(Mohammed Guller),更多章节内容可以访问云栖社区& ...

  4. 《Spark大数据分析:核心概念、技术及实践》一1.5 NoSQL

    本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第1章,第1.5节,作者[美] 穆罕默德·古勒(Mohammed Guller),更多章节内容可以访问云栖社区& ...

  5. 《Spark大数据分析:核心概念、技术及实践》一3.6 惰性操作

    本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第3章,第3.6节,作者[美] 穆罕默德·古勒(Mohammed Guller),更多章节内容可以访问云栖社区& ...

  6. Spark 大数据处理最佳实践

    开源大数据社区 & 阿里云 EMR 系列直播 第十一期 主题:Spark 大数据处理最佳实践 讲师:简锋,阿里云 EMR 数据开发平台 负责人 内容框架: 大数据概览 如何摆脱技术小白 Spa ...

  7. 【Spark大数据处理】动手写WordCount

    本文转自http://mp.weixin.qq.com/s?__biz=MzA5MTcxOTk5Mg==&mid=207906066&idx=1&sn=f9cc48a55343 ...

  8. Spark大数据处理讲课笔记2.1 初识Spark

    文章目录 零.本节学习目标 一.Spark的概述 (一)Spark的组件 1.Spark Core 2.Spark SQL 3.Spark Streaming 4.MLlib 5.Graph X 6. ...

  9. spark的数三角形算法_数据算法 Hadoop Spark大数据处理技巧 PDF 下载

    相关截图: 资料简介: 本书介绍了很多基本设计模式.优化技术和数据挖掘及机器学习解决方案,以解决生物信息学.基因组学.统计和社交网络分析等领域的很多问题.这本书还概要介绍了MapReduce.Hado ...

最新文章

  1. CCNA笔记-交换机安全
  2. swoole 异步系统文件IO
  3. TClientDataSet[28]: 读写其他格式的 XML 文件
  4. Flask的多app应用,多线程如何体现
  5. vs编译应用程序不依赖运行vs环境
  6. 如何用 J-Link 来串口调试?
  7. linux raw设备格式化,SUSE Linux 10配置裸设备(raw devices)
  8. java.lang.IllegalArgumentException: URLDecoder异常解决
  9. 95-290-240-源码-内存管理-StreamRecord-StreamRecord简介
  10. 《流畅的Python》读书笔记——Python文本和字节序列
  11. 去见你喜欢的人,去做你想做的事
  12. lte基站可以做ntp server吗?_你手机信号强吗?学会这几招快速提升你的手机信号...
  13. python实现黑客帝国动画效果
  14. Android腾讯微博开放平台入门(五)综合测试
  15. soc 设计soc设计 uml实务手册_芯片设计进阶之路——SOC电源管理系统
  16. 计算机绘图如何设置精度2007,excel2007饼图百分比精确度如何设置
  17. 自定义SmartRefreshLayout 下拉刷新Header(水浪+齿轮动画)
  18. X10 电阻屏tsc2007调试
  19. 模式识别技术漫谈(3)
  20. 上千家企业涌入蚂蚁开放联盟链:在区块链上抢先吃红利螃蟹

热门文章

  1. (DFS)zoj1008-Gnome Tetravex
  2. iOS常用的存储方式介绍
  3. [容易]在二叉查找树中插入节点
  4. Android Studio系列教程一--下载与安装
  5. 小端字节序和大端字节序
  6. 在ubuntu纯字符gdb界面下来开发调试嵌入式ARM
  7. 简单写一下选择排序算法
  8. memcache使用方法测试
  9. js添加事件、移除事件、阻止冒泡、阻止浏览器默认行为等写法(兼容IE/FF/CHROME) 转载...
  10. mysql安全性特点_MySQL数据库有哪些特点?为何能得到了广泛应用?