赞
踩
RDD的相关操作(creation, transformation, action)
在大数据的背景下,我们需要分布式数据存储和处理的工具,来解决一些现实问题(如:基础设施崩溃(hardware broken/network failure);data combination(处理来自多个源头的数据))(这些问题都是集中式系统面临的挑战)。因此Hadoop系统得到广泛应用。
Hadoop系统分为两部分,HDFS(hadoop distributed file system) 和 MapReduce(processing framework)。 HDFS是分布式文件系统,可以进行创建、删除、移动、重命名文件、读/写文件等操作。有一个NameNode和多个DataNode,NameNode负责管理文件系统的名字空间和控制外部客户机的访问;DataNode 提供存储块,存储在 HDFS 中的文件被分成块,然后将这些块复制到多个计算机中(DataNode)中。NameNode 决定是否将文件映射到 DataNode 上的复制块上。HDFS 的主要目的是支持以流的形式访问写入的大型文件。下图为HDFS的读,写操作过程。
MapReduce模型由Map,shuffle,reduce这三部分组成,原理如下图:
Split和Map环节的各块数据,在不同的计算机中处理;经过MapReduce的shuffle环节,再将不同单词的词频总计任务分配给不同的reducer(计算机);最后由reduce到output环节再merge到一台计算机上。最初的MapReduce模型可能效率跟不上大数据需求,但是这种编程思想是值得学习的。参考知乎问题:mapreduce为什么被淘汰了? - 知乎
这个文章写的很好:Spark: 基本架构及原理。接下来的内容很多选取自此文章。
Spark是在Hadoop系统上的改进产物。它是专为大规模数据处理而设计的快速通用的计算引擎,提供了一个全面、统一的框架用于管理各种有着**不同性质(文本数据、图表数据等)的数据集和数据源(批量数据或实时的流数据)**的大数据处理的需求。Spark本身并没有提供分布式文件系统,因此其分析大多依赖于Hadoop的分布式文件系统HDFS;Hadoop的MapReduce与spark都可以进行数据计算,而相比于Mapreduce,spark的速度更快并且提供的功能更加丰富。关系如下:
Spark有以下几个特点:
先看第一幅图,这些名字都是都是干什么的:
参考第二幅图:
creation: 创造RDD有两种方式:
parallize一个现有数据集
rdd = spark.sparkContext.parallelize(data)
从外部存储中读取
rdd = spark.read.text("datafilepath")
transformation: 有如下方法:
action:有如下方法:
这整个过程中,需要开发者编程的部分就是:Application: application program developed by user;Job:consist of RDD(s) and operations on RDD(s)。其他诸如将DAG划分为Stage,再分解成task,再传递给executor执行等操作都是spark系统的后续工作,不需要我们处理。
写在最后:
本文概述了Hadoop系统的构成(HDFS+MapReduce),Spark的原理,以及二者的关系。
由于数据规模越来越大,在传统的集中式架构基础上诞生了Hadoop分布式数据存储及处理系统;而随着实时处理海量数据的需求日益强烈,在原有HDFS+MapReduce基础上又诞生了Spark计算引擎。
Spark为什么可以比MapReduce更快更友好,主要是它利用内存计算(RDD),建立了一整套生态系统,包括RDD的操作,绘制DAG计算图,分解任务,中央调度,分配任务,执行任务,释放资源等等。在这个基础架构下,Spark可以支持不同语言的操作,还提供了很多不同的库,还可以访问各个云平台,就像我们最开始说的:它提供了一个全面、统一的框架用于管理各种有着不同性质(文本数据、图表数据等)的数据集和数据源(批量数据或实时的流数据)的大数据处理的需求。可以说是非常好用了。
但是会不免在想:这些系统/方法在短短十几年时间里,一直在更新,会不会再过几年,Spark又被某种新的方法取代了。很有可能啊,技术总是随着需求的改变而不停更新的啊,作为技术工作者,是要不停学习新的更新产物,但会不会产生这种感觉:时代一直在发展,人家一直在发明创造新的方法,而我们一直在学习新的方法,那过去对旧方法的学习的那段时间是不是就浪费了,反正以后也不用了,这样就会有自己跟不上时代的感觉?也许更重要的是学习每个方法背后的思想吧,就像是MapReduce这种思想,Spark利用RDD建立那种生态结构的思想…有时也要观其大略,不求甚解(也求甚解…)。
PS: 第一次接触Hadoop和Reduce,写的有偏差的地方请指教!!
下一篇描述:Spark在databricks上的具体操作
参考资源:Spark: 基本架构及原理,RDD(分布式内存的一个抽象概念)_百度百科,Apache Spark_百度百科,以及老师的ppt…
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。