Spark修炼之道(进阶篇)——Spark入门到精通:第四节 Spark编程模型(一)

  • 时间:
  • 浏览:0
  • 来源:大发彩神苹果下载app—大发彩神官方下载

使用示例:

RDD在Spark中是另有一个多多多只读的(val类型)、经过分区的记录集合。RDD在Spark中非要并不是创建依据 :(1)从存储系统中创建;(2)从其它RDD中创建。从存储中创建有多种依据 ,还还不能是本地文件系统,也还还不能是分布式文件系统,还还还不能是内存中的数据。

下面的代码演示的是从HDFS中创建RDD

作者:周志湖

网名:摇摆少年梦

微信号:zhouzhihubeyond

下面给出的是在spark-shell中怎么才能 才能 查看RDD的Lineage

(5)mapPartitionsWithIndex

(2)filter

依据 参数:

下面的代码演示的是从其它RDD创建新的RDD

mapPartitionsWithIndex函数是mapPartitions函数的另有一个多多多变种,它的函数参数如下:

本节每段内容源自官方文档:http://spark.apache.org/docs/latest/cluster-overview.html

(1)map

map函数依据 参数:

Spark 1.5.0支持的transformation包括:

def mapPartitionsWithIndex[U: ClassTag](

f: (Int, Iterator[T]) => Iterator[U],

preservesPartitioning: Boolean = false): RDD[U]

(6)sample

依据 参数:

f即为输入函数,它处理每个分区后边的内容。每个分区中的内容将以Iterator[T]传递给输入函数f,f的输出结果是Iterator[U]。最终的RDD由所有分区经过输入函数处理后的结果合并起来的。

使用示例

另有一个多多多全版的Spark程序运行运行,如前一节当中SparkWordCount程序运行,在提交集群运行时,它涉及到如下图所示的组件:

从transformation的介绍中亲们知道,action是处理程序运行最终执行的诱因,action操作会返回程序运行执行结果如collect操作或将运行结果保存,类式SparkWordCount中的saveAsTextFile依据 。

在前面的例子中,亲们前一天接触过到怎么才能 才能 利用RDD进行编程,前面亲们提到的

transformations操作会将另有一个多多多RDD转加进另有一个多多多新的RDD,还不能很重注意的是所有的transformation都不 lazy的,前一天对scala中的lazy了解的人都知道,transformation前一天它不用立马执行,而却说我会记住对相应数据集的transformation,而到真正被使用的前一天才会执行,类式distData.filter(e=>e>2) transformation后,它不用立即执行,却说我等到distDataFiltered.collect依据 执行时才被执行,如下图所示



从上图还还不能看到,在distDataFiltered.collect依据 执行前一天,才会触发最终的transformation执行。

RDD用于支持在并行计算时不能高效地利用后边结果,支持更简单的编程模型,共同也具有像MapReduce等并行计算框架的高容错性、不能高效地进行调度及可扩展性。RDD的容错通过记录RDD转换操作的lineage关系来进行,lineage记录了RDD的家族关系,当出显错误的前一天,直接通过lineage进行恢复。RDD最合数据挖掘, 机器学习及图计算,但会 什么应用涉及到亲们的迭代计算,基于内存不能极大地提升其在分布式环境下的执行传输速率;RDD不适用于诸如分布式爬虫等还不能频繁更新共享情形的任务。

(4)mapPartitions(func)

本mapPartitions例子来源于:https://www.zybuluo.com/jewes/note/310032

mapPartitions是map的另有一个多多多变种。map的输入函数是应用于RDD中每个元素,而mapPartitions的输入函数是应用于每个分区,也却说我把每个分区中的内容作为整体来处理的。它的函数定义为:

def mapPartitions[U: ClassTag](f: Iterator[T] => Iterator[U], preservesPartitioning: Boolean = false): RDD[U]

这段代码它前一天给亲们解释了RDD编程模型的核心思想:“filter函数将distData RDD转加进新的RDD”,“触发action操作”。也却说我说RDD的操作包括Transformations(转换)、Actions并不是。

加进公众微信号,还非要解更多最新Spark、Scala相关技术资讯

目前最为常用的Spark运行模式有:

- local:本地程序运行依据 运行,主要用于开发调试Spark程序运行运行

- Standalone:利用Spark自带的资源管理与调度器运行Spark集群,采用Master/Slave行态,为处理单点故障,还还不能采用ZooKeeper实现高可靠(High Availability,HA)

- Apache Mesos :运行在著名的Mesos资源管理框架基础之上,该集群运行模式将资源管理交给Mesos,Spark只负责进行任务调度和计算

- Hadoop YARN : 集群运行在Yarn资源管理器上,资源管理交给Yarn,Spark只负责进行任务调度和计算

Spark运行模式中Hadoop YARN的集群运行依据 最为常用,本课程中的第一节便是采用Hadoop YARN的依据 进行Spark集群搭建。不出Spark便与Hadoop生态圈完美搭配,组成强大的集群,可谓无所非要。

上述例子中的函数myfunc是把分区中另有一个多多多元素和它的下另有一个多多多元素组成另有一个多多多Tuple。前一天分区中最后另有一个多多多元素不出下另有一个多多多元素了,什么都(3,4)和(6,7)不出结果中。

mapPartitions还或多或少变种,比如mapPartitionsWithContext,它能把处理过程中的或多或少情形信息传递给用户指定的输入函数。还有mapPartitionsWithIndex,它能把分区的index传递给用户指定的输入函数。

(3)flatMap

依据 参数:

弹性分布式数据集(RDD,Resilient Distributed Datasets),由Berkeley实验室于2011年提出,原始论文名字:Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing 原始论文非常值得一读,是研究RDD的一手资料,本节内容大每段将基于该论文。

下面的代码演示的是从内存中创建RDD

//使用示例

各Spark程序运行运行以相互独立的程序运行集合运行于集群之上,由SparkContext对象进行协调,SparkContext对象还还不能视为Spark程序运行运行的入口,被称为driver program,SparkContext还还不能与不同种类的集群资源管理器(Cluster Manager),类式Hadoop Yarn、Mesos等 进行通信,从而分配到程序运行运行所需的资源,获取到集群运行所需的资源后,SparkContext将得到集群中其它工作节点(Worker Node) 上对应的Executors (不同的Spark程序运行运行有不同的Executor,它们之间也是独立的程序运行,Executor为程序运行运行提供分布式计算及数据存储功能),前一天SparkContext将程序运行运行代码采集到各Executors,最后将任务(Task)分配给executors执行。

使用示例: