首页 > 其他分享 >大数据经典论文解读 - Spark

大数据经典论文解读 - Spark

时间:2023-04-04 22:55:46浏览次数:34  
标签:Map 论文 Reduce 解读 RDD Spark 数据 节点 硬盘

Spark

Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing

可看作一个支持多轮迭代的MapReduce模型,但是引入了 RDD 这样的函数式对象的数据集概念。Spark的多轮迭代中无需反复读写磁盘,而是直接在内存中操作

  • RDD 是什么,怎么优化分布式数据处理的,与什么观念比较像?

使用硬盘“容错”

MapReduce中Map的输出结果会存在硬盘,Reduce函数从Map所在节点拉取所需数据,再写入本地。再通过外部排序,将数据分组最后排序完成分组,通过Reduce处理。任何一个中间环节都要读写硬盘。

MapReduce之所以在硬盘暂存数据,为了设计的“简单”,和大规模集群下的“容错”能力。将Map的数据直接通过网络发送给Reduce,让Reduce在内存中处理数据,都可以加速。

直接使用网络传数据,Map或Reduce故障时怎么办?

因为Reduce对前面的Map函数有依赖关系,任何一个Map节点故障,意味Reduce只收到部分数据。那么Reduce只能失败,故障Map节点和其他Map节点都要重新运算一次。等于一个Map故障导致整个任务重来一遍。

传统的MPI分布式计算就是这样直接在节点间通过网络发数据,但是容错很差,集群规模也上不去。MapReduce的解决方案时将处理阶段拆开,将每个阶段的中间数据都落到硬盘上。

分布式系统的“函数式”数据集

新的方案:

  1. 将数据缓存在内存
  2. 记录我们运算数据生成的“拓扑图”
    记录数据计算依赖关系,一部分节点故障时只要根据拓扑图重新计算这一部分即可,即可解决容错问题,而不是每次都写入硬盘
  3. 通过检查点在特定环节将数据写入硬盘
    拓扑图层很深或迭代很多次时,拓扑图方式就很低效。采取折中方式,将一部分中间环节写入硬盘

例如在100轮迭代中没10次写入硬盘一次,一旦出现故障,只要重新读取一次日志数据。

// 论文中实现分布式逻辑回归的代码,输入数据通过 .persistent 缓存在内存,无需每个迭代都从硬盘读取
val points = spark.textFile(...).map(parsePoint).persist()
var w = //random initial vector
for (i<-1 to ITERATIONS){
    val gradient points.map{ p =>
        p.x * (1/(1+exp(-p.y*(w dot p.x)))-1) * p.y
    }.reduce((a,b) => a+b)
    w -= gradient
}

“函数式”的RDD

Spark 使用了新思路——RDD(Resilient Distributed Dataset,弹性分布式数据集),等于 弹性 + 分布式 + 数据集

对于“弹性”:RDD是只读的、已分区的记录集合,RDD只能通过明确的操作,以及两种数据创建:稳定存储系统的数据,其他RDD。这是为了将map、filter、join等操作和其他操作区分开来。

数据被抽象为一个RDD,任何数据集每次传唤就是一个新RDD,但无需输出到硬盘。只有调用 persistent 函数时才作为一个完整数据集缓存在内存。被缓存后这个RDD就能被下游其他数据转换反复使用。这个数据无需写入硬盘。下游其他转换也无需从硬盘读取。

lines = spark.textFile("hdfs://...")
errors = lines.filter(_.startsWith("ERROR"))
errors.persist()
    
// Count errors mentioning MySQL:
errors.filter(_.contains("MySQL")).count()
    
// Return the time fields of errors mentioning
// HDFS as an array (assuming time is field
// number 3 in a tab-separated format):
errors.filter(_.contains("HDFS")).map(_.split('\t')(3)).collect()

上方代码,从HDFS读取数据,按关键词过滤,调用 persistent 方法所以缓存到内存中。然后两个任务分别读取errors时就无需从硬盘读取,而是从内存读取。

  1. 惰性求值:没有调用 persistent 时就不对数据转化做计算,而是记录这个函数
  2. 数据库的视图功能:后续RDD的操作基于之前的RDD

宽窄依赖和检查点

将数据缓存到内存,减少了硬盘读写,但仍面临节点失效导致RDD重新计算的情况。所以,如果一个节点失效导致数据重新计算,影响节点太多就将结果输出到硬盘;影响节点少,将单独重新计算被响应到的节点。Spark 中对数据计算的拓扑图的依赖关系做了一个分类:

  • 窄依赖:一个RDD分区只影响下游一个节点,重算一遍也只影响一条线上少数节点,对应中间结果无需输出到硬盘
  • 宽依赖:一个RDD分区影响下游多个节点,上游一个节点失效要重新计算,对应的多个下游节点都要从这个节点拉取数据并重新计算,要占用更多资源,对下游影响扩大,将结果输出到硬盘

Spark 在 persistent 时添加一个 REPLICATE 参数,将当前结果作为检查点存在硬盘。可见 persistent、持久化存储、允许用户自己通过检查点存储中间结果,都为了在容错和性能间做一个平衡。

RDD与其他分布式系统最大差异在弹性:

  1. 数据存储:缓存、持久化
  2. 选择什么数据输出到硬盘:更加宽窄依赖进行,可自设定检查点

标签:Map,论文,Reduce,解读,RDD,Spark,数据,节点,硬盘
From: https://www.cnblogs.com/zhh567/p/17288044.html

相关文章

  • A7--Spark部署
    一、版本信息  JDK1.8spark3.2.1二、安装部署1)上传解压缩文件tar-zxvfspark-3.2.1-bin-hadoop3.2.tgz 2)配置环境变量vim/etc/profile #SparkexportSPARK_HOME=/opt/spark-3.2.1exportPATH=$SPARK_HOME/b......
  • 毕业论文格式问题汇总
    1.制作自定义目录已经将致谢设置成为“标题1”在开头插入新的一页,将光标放在首页,  点击引用----目录----自定义目录    点击确定   即可获得目录     2.致谢和参考文献部分没有点   解决办法就是将光标放在文献后,点击Tab键......
  • 英文论文写作尽量避免使用偏见色彩词语
    在英文论文写作过程中,偏见色彩词语可能会让读者产生负面印象。为了避免这种情况,我们需要学会如何撰写中立、客观的论文。本文将为你提供一些建议,帮助你在写作过程中避免偏见,同时让论文更具吸引力。确保客观性在写作过程中,我们需要保持客观,尊重事实。避免在描述研究对象时使用贬义......
  • [重读经典论文]ResNet
    1.前言ResNet由微软亚洲研究院在论文《DeepResidualLearningforImageRecognition》中提出,获得2015年ImageNet图像分类、定位、检测,MSCOCO竞赛检测、分割五条赛道的冠军,通过引入残差连接,有效解决深层网络训练时的退化问题,可以通过加深网络大大提升性能。ResNet在ILSVRC-20......
  • day07 sparksql 生成Physical Plan
     1.案例sqlselectA,Bfromtestdata2whereA>2 对应的执行计划:==AnalyzedLogicalPlan==Project[A#23,B#24]+-Filter(A#23>2)+-SubqueryAliastestdata2+-View(`testData2`,[a#23,b#24])+-SerializeFromObject[knownnotnull(a......
  • 004-spark local模式
    sparklocal模式 在window或者linux下都一样,都是启动一个节点,只能用于测试。1、下载Spark官方地址:http://spark.apache.org/downloads.html2、window7下解压,然后点击“”启动spark3、spark验证是否启动成功4、spark计算......
  • 005-spark standalone模式安装
    sparkstandalone模式不同于单节点本地模式,它有主从节点,分别为Master和workerSparkstandlone规划Master节点: 192.168.2.20Worker节点:192.168.2.20,192.168.2.33其中:地址和域名的映射关系为192.168.2.20mycluster192.168.2.33clo......
  • 012-01Spark On YARN 环境搭建
    1、Scala安装http://www.scala-lang.org/files/archive/scala-2.10.4.tgztar-zxvfscala-2.10.4.tgz-Capp/cd appln-sscala-2.10.4scala2、Spark安装tar-zxvf spark-1.4.0-bin-hadoop2.6.tgz-Cappln-sspark-1.4.0-bin-hadoop2.6spark#vimspark-......
  • 003-spark名词和架构介绍
    1、Spark名词1、RDD:数据集合2、Application:Spark用户程序3、DriverProgram:运行main函数并且新建SparkContext的程序4、ClusterManager:Spark集群资源调度服务(standlone,mesos,yarn)5、Executor:workernode的一个进程,负责运行任务6、Task:被送到某个e......
  • 001-spark生态系统介绍
    1、Spark简介-概念Spark是基于内存计算的大数据分布式计算框架。Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量廉价硬件之上,形成集群。主要特点:分布式计算内存计算容错多计算......