1、在maven里面添加引用,spark和hdfs的客户端的。
groupId = org.apache.spark artifactId = spark-core_2.9.3 version = 0.8.1-incubating
groupId = org.apache.hadoop artifactId = hadoop-client version = <your-hdfs-version>
2、把assembly/target/spark-assembly_2.9.3-0.8.1-incubating.jar添加到classpath里面,然后我们在程序里面要添加以下引用。
import org.apache.spark.SparkContext import org.apache.spark.SparkContext._
3、下面是官方的WorkCount的例子,可以参考一下。
/*** SimpleApp.scala ***/ import org.apache.spark.SparkContext import org.apache.spark.SparkContext._ object SimpleApp { def main(args: Array[String]) { val logFile = "$YOUR_SPARK_HOME/README.md" // Should be some file on your system val sc = new SparkContext("local", "Simple App", "YOUR_SPARK_HOME", List("target/scala-2.9.3/simple-project_2.9.3-1.0.jar")) val logData = sc.textFile(logFile, 2).cache() val numAs = logData.filter(line => line.contains("a")).count() val numBs = logData.filter(line => line.contains("b")).count() println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
} }
val sc = new SparkContext("local", "Simple App", "YOUR_SPARK_HOME", List("target/scala-2.9.3/simple-project_2.9.3-1.0.jar"))
SparkContext是SparkContext的上下文对象,是非常核心的一个类,它的实例化方法是new SparkContext(master, appName, [sparkHome], [jars])。master:master的地址。appName:应用的名称。sparkHome:spark的安装地址。jars:jar包的位置。 4、Spark总是围绕这个一个概念来进行 resilient distributed dataset (RDD),是可以并行操作的支持容错的元素集合。目前支持两种类型的RDDs,parallelized collections
和
Hadoop datasets。(1)Parallelized collections是scala中存在的集合类,并且支持并行操作。
scala> val data = Array(1, 2, 3, 4, 5) data: Array[Int] = Array(1, 2, 3, 4, 5) scala> val distData = sc.parallelize(data) distData: spark.RDD[Int] = spark.ParallelCollection@10d13e3e
正常情况之下,spark会自动设置并行任务所需要的cpu的分片,一般是每个cpu 2-4个分片,也可以自己手动设置,sc.parallelize(data, 10)。
(2)Spark支持hadoop上的任何数据集,比如text files, SequenceFiles,还有其它的InputFormat。
下面是text files的例子:
scala> val distFile = sc.textFile("data.txt") distFile: spark.RDD[String] = spark.HadoopRDD@1d4cee08
SequenceFiles则使用SparkContext’s sequenceFile[K, V]
,比如sequenceFile[Int, String],Int对应的是IntWritable,String对应的是Text。
别的数据格式使用SparkContext.hadoopRDD,之后再介绍,这个文档没有介绍。
正常情况之下,spark是一个block一个任务。
(3)RDDs只支持两种操作: transformations, 从一个数据集转换成另外一种; actions, 通过对一个数据集进行运算之后返回一个值。
Spark当中所有的transformations都是延迟执行的,等到真正使用的时候才会进行运算。
默认的,每一个经过transformed的RDD当有action作用于它的时候,它会重新计算一遍,除非我们进行persist
(or cache
) 操作。
最后附录一下RDD的API地址:http://spark.incubator.apache.org/docs/latest/api/core/index.html#org.apache.spark.rdd.RDD
(4)RDD Persistence
Spark最重要的一个功能就是可以把RDD持久化或者缓存,当你进行一个持久化操作的时候,Spark会在所有节点的内存当中保存这个RDD,第一个的时候计算,之后一直使用不需要再重新计算了。缓存是实现迭代式算法的关键。我们可以使用persist()
or cache()方法来持久化一个RDD,它是容错的,当这个RDD的任何分片
丢失之后,它会在之前计算它的机器上重新计算。另外每一个RDD,有它自己的存储Level,存储在硬盘或者存储在内存,但是序列化成Java对象(节省空间),或者在集群间复制。要设置它,我们需要传递一个StorageLevel给persist(),cache()是默认的了是
StorageLevel.MEMORY_ONLY
(存储为反序列化对象在内存当中)
当内存足够的时候,我们可以使用MEMORY_ONLY;当内存不太好的时候,我们可以采用MEMORY_ONLY_SER,在内存中存储为一个字节数组,速度还可以;当操作的数据集合足够大的时候,我们就把中间结果写到硬盘上;如果要支持容错,就使用备份到2个节点上的方式。如果要自己定义一个的话,要使用StorageLevel的apply()方法。
5、共享变量
Spark提供了两种限制的共享变量,Broadcast和Accumulators。
(1)Broadcast允许程序员持有一个只读的变量在各个节点之间,它一个常用的场景就是用它来存储一个很大的输入的数据集给每个节点使用,Spark会只用它独有的广播算法来减少通信损失。下面是例子:
scala> val broadcastVar = sc.broadcast(Array(1, 2, 3)) broadcastVar: spark.Broadcast[Array[Int]] = spark.Broadcast(b5c40191-a864-4c7d-b9bf-d87e1a4e787c) scala> broadcastVar.value res0: Array[Int] = Array(1, 2, 3)
(2)Accumulators是用来计数或者求总数的,使用SparkContext.accumulator(v)来给它一个初始化的值,然后用“+=”来进行操作,但是任务之间不能得到它的结果,只有驱动任务的程序可以得到它的结果。下面是例子:
scala> val accum = sc.accumulator(0) accum: spark.Accumulator[Int] = 0 scala> sc.parallelize(Array(1, 2, 3, 4)).foreach(x => accum += x) ... 10/09/29 18:41:08 INFO SparkContext: Tasks finished in 0.317106 s scala> accum.value res2: Int = 10
Spark编程指南的更多相关文章
-
Apache Spark 2.2.0 中文文档 - Spark 编程指南 | ApacheCN
Spark 编程指南 概述 Spark 依赖 初始化 Spark 使用 Shell 弹性分布式数据集 (RDDs) 并行集合 外部 Datasets(数据集) RDD 操作 基础 传递 Functio ...
-
SparkR(R on Spark)编程指南 含 dataframe操作 2.0
SparkR(R on Spark)编程指南 Spark 2015-06-09 28155 1评论 下载为PDF 为什么不允许复制 关注iteblog_hadoop公众号,并在这里评论区留言 ...
-
SparkR(R on Spark)编程指南 含 dataframe操作
SparkR(R on Spark)编程指南 Spark 2015-06-09 28155 1评论 下载为PDF 为什么不允许复制 关注iteblog_hadoop公众号,并在这里评论区留言 ...
-
Spark编程指南V1.4.0(翻译)
Spark编程指南V1.4.0 · 简单介绍 · 接入Spark · Spark初始化 · 使用Shell · 在集群上部署代码 ...
-
转-Spark编程指南
Spark 编程指南 概述 Spark 依赖 初始化 Spark 使用 Shell 弹性分布式数据集 (RDDs) 并行集合 外部 Datasets(数据集) RDD 操作 基础 传递 Functio ...
-
Spark官方2 ---------Spark 编程指南(1.5.0)
概述 在高层次上,每个Spark应用程序都由一个运行用户main方法的driver program组成,并在集群上执行各种 parallel operations.Spark提供的主要抽象是resil ...
-
【原】Spark 编程指南
尊重原创,注重版权,转贴请注明原文地址:http://www.cnblogs.com/vincent-hv/p/3322966.html 1.配置程序使用资源: System.setPropert ...
-
Spark编程指南分享
转载自:https://www.2cto.com/kf/201604/497083.html 1.概述 在高层的角度上看,每一个Spark应用都有一个驱动程序(driver program).驱动程序 ...
-
Apache Spark 2.2.0 中文文档 - Spark Streaming 编程指南 | ApacheCN
Spark Streaming 编程指南 概述 一个入门示例 基础概念 依赖 初始化 StreamingContext Discretized Streams (DStreams)(离散化流) Inp ...
随机推荐
-
国内外常用的DNS服务器
国内外常用的DNS服务器 DNS,全称Domain Name System,即域名解析系统,帮助用户在互联网上寻找路径,它在互联网的作用是把域名转换成为网络可以识别的IP地址. 国外DNS服务器地址: ...
-
(旧)子数涵数&#183;PS——水杯抠图
一.首先老规矩,下载所需要的素材. 二.打开Photoshop,并打开已下载好的素材. 三.使用"钢笔工具",快捷键为P,采用"路径"模式,将水杯抠出(例图左上 ...
-
List<;t>;中如何将指定元素的值放到第一位
public static List<GCountryExtend> GetList() { try { var result = new List<GCountryExtend&g ...
-
UVaLive4043 UVa1411 Ants 巨人与鬼
题意:给出平面上n个白点n个黑点,要求两两配对,且配对所连线段没有交点. 法一:暴力 随机一个初始方案,枚举任意两条线段如果有交点就改一下. 效率其实挺好的. 法二:二分图最佳完美匹配 显然没有交点的 ...
-
Yii整合ucenter实现单点登录
原文:http://www.php2.cc/article-1349-1.html 准备工作 1.下载ucenter源码,并安装好 2.下载ucenter开发源码,根据自己的项目下载对应版本(utf- ...
-
【C/C++】Dijkstra算法的简洁实现
Dijkstra的实现有很多种,下面给出一种较为简洁和高效的实现,可以作为模板快速使用. 1. 使用邻接表存储图: 2. 使用标准STL的vector存储每个点的所有邻接边: 3. 使用pair记录当 ...
-
Android插件化技术简介
https://blog.csdn.net/io_field/article/details/79084630 可以通过反射 事先定义统一接口的方式,访问插件中的类和方法 还可以在AndroidMan ...
-
利用cwRsync客户端将Windows下文件同步到Linux
这里不描述Linux服务端安装配置rsync服务的过程,有需要可以在网络上查找相关教程. 1.安装cwRsync客户端下载地址:http://itefix.no/cwrsync/下载文件cwRsync ...
-
Ansible--配置文件及系列命令
Ansible目录结构 安装完成ansible后要知道ansible主要安装的了什么,安装的目录结构是什么,每个目录做什么的 可以使用:rpm -ql ansible | less 来查看ansibl ...
-
ROW_NUMBER() OVER函数运用
语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) PARTITION BY:相当于数据库中的group by 说明:row_numbe ...