Spark1.0.0 编程模型

Spark Application可以在集群中并行运行,其关键是抽象出RDD的概念(详见RDD
细解
),也使得Spark Application的开发变得简单明了。下图浓缩了Spark的编程模型。

1:Spark应用程序的结构

Spark应用程序可分两部分:driver部分和executor部分初始化SparkContext和主体程序

A:driver部分

driver部分主要是对SparkContext进行配置、初始化以及关闭。初始化SparkContext是为了构建Spark应用程序的运行环境,在初始化SparkContext,要先导入一些Spark的类和隐式转换;在executor部分运行完毕后,需要将SparkContext关闭。driver部分的基本代码框架如下:

package week2

import org.apache.spark.{SparkContext, SparkConf}
import org.apache.spark.SparkContext._

object WordCount1 {
  def main(args: Array[String]) {
    if (args.length == 0) {
      System.err.println("Usage: bin/spark-submit [options] --class week2.WordCount1 WordCount.jar <file1> ")
      System.exit(1)
    }

    val conf = new SparkConf().setAppName("WordCount1")
    val sc = new SparkContext(conf)

    。。。//executor部分

    sc.stop()
  }
}

要注意的是,Spark1.0.0由于采用了spark-submit统一的应用程序提交工具,代码上有所改变:

  • 不需要在代码里将应用程序本身通过addJars上传给资源管理器
  • 增加了history server,需要在代码末尾关闭SparkContext,才能将完整的运行信息发布到history server。

B:executor部分

Spark应用程序的executor部分是对数据的处理,数据分三种:

  • 原生数据,包含输入的数据和输出的数据

    • 对于输入原生数据,Spark目前提供了两种:

      • scala集合数据集,如Array(1,2,3,4,5),Spark使用parallelize方法转换成RDD。
      • hadoop数据集,Spark支持存储在hadoop上的文件和hadoop支持的其他文件系统,如本地文件、HBase、SequenceFile和Hadoop的输入格式。例如Spark使用txtFile方法可以将本地文件或HDFS文件转换成RDD。
    • 对于输出数据,Spark除了支持以上两种数据,还支持scala标量
      • 生成Scala标量数据,如count(返回RDD中元素的个数)、reduce、fold/aggregate;返回几个标量,如take(返回前几个元素)。
      • 生成Scala集合数据集,如collect(把RDD中的所有元素倒入 Scala集合类型)、lookup(查找对应key的所有值)。
      • 生成hadoop数据集,如saveAsTextFile、saveAsSequenceFile
  • RDD,Spark进行并行运算的基本单位,其细节参见RDD 细解。RDD提供了四种算子:
    • 输入算子,将原生数据转换成RDD,如parallelize、txtFile等
    • 转换算子,最主要的算子,是Spark生成DAG图的对象,转换算子并不立即执行,在触发行动算子后再提交给driver处理,生成DAG图 -->  Stage --> Task  --> Worker执行。按转化算子在DAG图中作用,可以分成两种:
      • 窄依赖算子

        • 输入输出一对一的算子,且结果RDD的分区结构不变,主要是map、flatMap;
        • 输入输出一对一,但结果RDD的分区结构发生了变化,如union、coalesce;
        • 从输入中选择部分元素的算子,如filter、distinct、subtract、sample。
      • 宽依赖算子,宽依赖会涉及shuffle类,在DAG图解析时以此为边界产生Stage,如图所示。
        • 对单个RDD基于key进行重组和reduce,如groupByKey、reduceByKey;
        • 对两个RDD基于key进行join和重组,如join、cogroup。
    • 缓存算子,对于要多次使用的RDD,可以缓冲加快运行速度,对重要数据可以采用多备份缓存。
    • 行动算子,将运算结果RDD转换成原生数据,如count、reduce、collect、saveAsTextFile等。
  • 共享变量,在Spark运行时,一个函数传递给RDD内的patition操作时,该函数所用到的变量在每个运算节点上都复制并维护了一份,并且各个节点之间不会相互影响。但是在Spark Application中,可能需要共享一些变量,提供Task或驱动程序使用。Spark提供了两种共享变量:
    • 广播变量,可以缓存到各个节点的共享变量,通常为只读,使用方法:
scala> val broadcastVar = sc.broadcast(Array(1, 2, 3))
scala> broadcastVar.value
  • 累计器,只支持加法操作的变量,可以实现计数器和变量求和。用户可以调用SparkContext.accumulator(v)创建一个初始值为v的累加器,而运行在集群上的Task可以使用“+=”操作,但这些任务却不能读取;只有驱动程序才能获取累加器的值。使用方法:
cala> val accum = sc.accumulator(0)
scala> sc.parallelize(Array(1, 2, 3, 4)).foreach(x => accum += x)

2:例程示范

下面拿一个简单的例子WorCount来示例:

3:Spark应用程序的多语言编程

Spark提供了Scala、Python、Java开发API。用户可以根据自己的喜好选择相应的编程语言和工具。建议使用Scala和IntelliJ IDEA开发。

关于多语言开发可以参考:Spark1.0.0 多语言编程

关于Spark应用程序的部署可以参考:Spark1.0.0 应用程序部署工具spark-submit

关于Spark应用程序的运行架构可以参考:Spark1.0.0 运行架构基本概念

Spark1.0.0 编程模型

时间: 2024-10-19 14:01:34

Spark1.0.0 编程模型的相关文章

at91 linux 4.1.0下dts驱动编程模型

下面的这个驱动文件at91_keyled.c在Atmel提供的linux-at91-linux4sam_5.3下实现了按键控制LED的亮灭过程,通过这个简单的驱动描述了基于DTS的驱动开发模型以及Linux内核里的GPIO相关的操作函数. 1 /********************************************************************************* 2 * Copyright: (C) 2016 Guo Wenxue<[email pro

Spark1.0.0 生态圈一览

Spark生态圈,也就是BDAS(伯克利数据分析栈),是伯克利APMLab实验室精心打造的,力图在算法(Algorithms).机器(Machines).人(People)之间通过大规模集成,来展现大数据应用的一个平台,其核心引擎就是Spark,其计算基础是弹性分布式数据集,也就是RDD. 通过Spark生态圈,AMPLab运用大数据.云计算.通信等各种资源,以及各种灵活的技术方案,对海量不透明的数据进行甄别并转化为实用的信息.以供人们更好的理解世界.Spark生态圈已经涉及到机器学习.数据挖掘

Spark1.0.0新特性

Spark1.0.0 release于2014-05-30日正式公布,标志Spark正式进入1.X的时代.Spark1.0.0带来了各种新的特性,并提供了更好的API支持:Spark1.0.0添加了Spark SQL这一个新的重要组件,用于载入和操作Spark的结构化数据:Spark1.0.0增强了现有的标准库(ML,streaming,GraphX),同一时候还增强了Java和Python语言的支持:最后,Spark1.0.0在运维上做了非常大的改进,包含支持Hadoop/YARN安全机制.使

Apache Spark1.1.0部署与开发环境搭建

Spark是Apache公司推出的一种基于Hadoop Distributed File System(HDFS)的并行计算架构.与MapReduce不同,Spark并不局限于编写map和reduce两个方法,其提供了更为强大的内存计算(in-memory computing)模型,使得用户可以通过编程将数据读取到集群的内存当中,并且可以方便用户快速地重复查询,非常适合用于实现机器学习算法.本文将介绍Apache Spark1.1.0的部署与开发环境搭建. 0. 准备 出于学习目的,本文将Spa

Spark1.0.0 学习路线

接触了Spark也快有半年了,版本从0.8.0到现在的1.0.0SNAPSHOT,从头到尾被spark这个优秀的框架深深吸引,也为scala的优雅所折服.4.19日"2014 中国Spark技术峰会"召开,可以看出随着Spark技术的完善,越来越多的企业已经开始使用或开始关注Spark的发展了.回顾学习过程,觉得很有必要整理一份学习路线,对所学的内容加以沉淀,同时也为同行作为参考. 因为Spark1.0.0即将发布,增加了很多特性,所以决定修改以前的博文,全都采用Spark1.0.0,

C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(上)

译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(上)),不对的地方欢迎指出与交流. 章节出自<Professional C# 6 and .NET Core 1.0>.水平有限,各位阅读时仔细分辨,唯望莫误人子弟. 附英文版原文:Professional C# 6 and .NET Core 1.0 - 38 Entity Framework Core ------------------------------- 本章内容 En

C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(上)

译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(上)),不对的地方欢迎指出与交流. 章节出自<Professional C# 6 and .NET Core 1.0>.水平有限,各位阅读时仔细分辨,唯望莫误人子弟. 附英文版原文:Professional C# 6 and .NET Core 1.0 - Chapter 41 ASP.NET MVC ------------------------------------ 本

Lakes.AERMOD.View.v8.9.0 1CD大气扩散模型软件包

Lakes.AERMOD.View.v8.9.0 1CD大气扩散模型软件包Lakes Environmental ARTM View v1.4.2 1CD放射物扩散模拟模型Aermod View是一套完整的.功能强大的大气扩散模型软件包,并将美国EPA指定的大气扩散模型(如下)完美的集成成为一个综合的操作平 台: - AERMOD - ISCST3 - ISC-PRIME 美国EPA体系的大气扩散模型普遍应用于评估各类污染源所排放的污染物的浓度和沉降. AMS/EPA的法规模型Aermod是最新

Spark1.0.0伪分布安装指南

?一.下载须知 软件准备: spark-1.0.0-bin-hadoop1.tgz   下载地址:spark1.0.0 scala-2.10.4.tgz    下载下载:Scala 2.10.4 hadoop-1.2.1-bin.tar.gz   下载地址:hadoop-1.2.1-bin.tar.gz jdk-7u60-linux-i586.tar.gz  下载地址:去官网下载就行,这个1.7.x都行 二.安装步骤 hadoop-1.2.1安装步骤,请看: http://my.oschina.