Spark1.0.0 编程模型
Spark Application能够在集群中并行执行,其关键是抽象出RDD的概念(详见RDD
细解),也使得Spark Application的开发变得简单明了。下图浓缩了Spark的编程模型。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYm9va19tbWlja3k=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
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。
- 原生数据,包括输入的数据和输出的数据
- 对于输入原生数据,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
- 对于输入原生数据,Spark眼下提供了两种:
- 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:例程示范
用户能够依据自己的喜好选择对应的编程语言和工具。
建议使用Scala和IntelliJ IDEA开发。
Spark1.0.0 编程模型的更多相关文章
- at91sam9x5 linux 4.1.0下dts驱动编程模型
测试环境: CPU: AT91SAM9X35 Linux: Atmel提供的linux-at91-linux4sam_5.3 (Linux-4.1.0) 转载请注明: 凌云物网智科嵌入式实 ...
- Spark1.0.0新特性
Spark1.0.0 release于2014-05-30日正式公布,标志Spark正式进入1.X的时代.Spark1.0.0带来了各种新的特性,并提供了更好的API支持:Spark1 ...
- Spark1.0.0 学习路径
2014-05-30 Spark1.0.0 Relaease 经过11次RC后最终公布.尽管还有不少bug,还是非常令人振奋. 作为一个骨灰级的老IT,经过非常成一段时间的消沉,再次被点燃 ...
- Apache Spark1.1.0部署与开发环境搭建
Spark是Apache公司推出的一种基于Hadoop Distributed File System(HDFS)的并行计算架构.与MapReduce不同,Spark并不局限于编写map和reduce ...
- Spark1.0.0 生态圈一览
Spark生态圈,也就是BDAS(伯克利数据分析栈),是伯克利APMLab实验室精心打造的,力图在算法(Algorithms).机器(Machines).人(People)之间通过大规模集 ...
- Spark1.0.0 学习路线指导
转自:http://www.aboutyun.com/thread-8421-1-1.html 问题导读1.什么是spark?2.spark编程模型是什么?3.spark运维需要具有什么知识?4.sp ...
- C#与C++的发展历程第三 - C#5.0异步编程巅峰
系列文章目录 1. C#与C++的发展历程第一 - 由C#3.0起 2. C#与C++的发展历程第二 - C#4.0再接再厉 3. C#与C++的发展历程第三 - C#5.0异步编程的巅峰 C#5.0 ...
- C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(上)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(上)),不对的地方欢迎指出与交流. 章节出自<Professional C# 6 ...
- C# 6 与 .NET Core 1.0 高级编程 - 40 ASP.NET Core(上)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 40 章 ASP.NET Core(上)),不对的地方欢迎指出与交流. 章节出自<Professiona ...
随机推荐
- Jmeter4.0启动闪退问题解决方案
jmeter:4.0 jdk版本:1.8 在Jmeter.bat的最后添加pause可以让Jmeter启动停止: 添加了pause进行强制停止在启动命令页面,查看到Jmeter报错信息如下: 第一次解 ...
- 使用echarts展示线状图信息的时候数据部分数据因为x轴的数据显示不全而隐藏的问题
在使用echarts来展示数据时,因为数据很多的原因导致x轴显示不全,然后有些数据也隐藏在图表中,所以这个时候我们要在 series 中设置一个属性,让所有的数据都能够展示出来,这里我们需要添加的属性 ...
- MATLAB求解方程与方程组
1. solve函数 ①求解单个一元方程的数值解 syms x; x0 = double(solve(x +2 - exp(x),x)); 求x+2 = exp(x)的解,结果用double ...
- 【转】SonarQube配置自定义的CheckStyle代码规则
原文地址:https://www.jianshu.com/p/ff1d800885ce 惯例第一步肯定是SonarQube的安装与运行配置了,但这部分不在本文主题内,网上一搜一大把,这里就不讲了,大家 ...
- poj2253 最短路变形
题目连接:http://poj.org/problem?id=2253 Description Freddy Frog is sitting on a stone in the middle of a ...
- 一个排好序的数组,找出两数之和为x的所有组合【双指针】
#include <bits/stdc++.h> using namespace std; const int N = 1e6,INF = 0x3f3f3f3f; int a[N]; in ...
- C - 你经历过绝望吗?两次! 【地图型BFS+优先队列(障碍物)】
4月16日,日本熊本地区强震后,受灾严重的阿苏市一养猪场倒塌,幸运的是,猪圈里很多头猪依然坚强存活.当地15名消防员耗时一天解救围困的“猪坚强”.不过与在废墟中靠吃木炭饮雨水存活36天的中国汶川“猪坚 ...
- 并查集【CF731C】Socks
Description 有\(n\)只袜子,\(k\)种颜色,在\(m\)天中,问最少修改几只袜子的颜色,可以使每天要穿的袜子颜色相同. Input 第一行\(n,m,k\)分别对应题目描述. 接下来 ...
- 树链剖分【p2568】[SDOI2011]染色
Description 给定一颗有\(n\)个节点的无根树和\(m\)个操作,操作有\(2\)类: 1.将节点\(a\)到节点\(b\)路径上所有点染成颜色\(c\) 2.询问节点\(a\)到节点\( ...
- 洛谷——P1689 方程求解
P1689 方程求解 题目描述 给一个方程,形如X+Y=Z或X-Y=Z.给出了其中两个未知数,请求出第三个数.未知数用‘?’表示,等式中也许会出现一些多余的空格. 输入输出格式 输入格式: 一行,方程 ...