Spark RDD编程(一)——概览、链接Spark、初始化Spark

1 概览


从高层看,每个Spark应用都由驱动程序构成,驱动程序用来运行用户的main函数并且执行集群上的不同的并行操作。Spark提供的一个主要抽象是弹性分布式数据集(RDD),即可以并行操作的跨集群节点分区的元素集合。RDD可以由Hadoop文件系统(获取其他Hadoop支持的文件系统)中的一个文件创建而来,也可以由已存在的Scala集合转化而来。用户可能会令Spark在内存中保存RDD,令其在并行操作中可以被有效复用。最后,RDD可以从节点故障中恢复。

Spark中的另一个抽象是共享变量,共享变量用于并行操作。默认情况下,当Spark将函数其作为不同节点上的一组任务并行运行在不同的节点中时,它将函数中使用的每个变量的一份副本发往每个任务。有时,变量需要在任务间共享或在任务与驱动程序之间共享。Spark支持两种类型的共享变量:广播变量与与累加器。广播变量用于将一个值缓存在所有节点的内存中。累加器只用于添加,例如计数器或计算总和。

2 链接Spark


编写Spark应用,需要添加Spark的Maven依赖。

# Spark
groupId = org.apache.spark
artifactId = spark-core_2.11
version = 2.3.2

如果想要访问HDFS集群,需要添加hadoop-client的Maven依赖

# hadoop-client
groupId = org.apache.hadoop
artifactId = hadoop-client
version = <your-hdfs-version>

最后,需要将Spark类引入程序

import org.apache.spark.SparkContext
import org.apache.spark.SparkConf

在Spark1.3.0之前,需要显式声明import org.apache.spark.SparkContext._用以确保基本的隐式转换。

3 初始化Spark


Spark程序应当做的第一件事是创建SparkContext对象,此对象用于告知Spark如何访问集群。为了创建SparkContext,首先需要构建SparkConf对象,此对象包含应用的相关信息。

每个JVM只能激活一个SparkContext,在创建一个新的SparkContext之前,必须先stop()旧的SparkContext。

val conf = new SparkConf().setAppName(appName).setMaster(master)
new SparkContext(conf)

note:appName是显示在集群UI中的应用名称。
note:master是一个Spark、Mesos或YARN集群URL,或用于运行本地模式的特定"local"字符串。

实际上,当运行一个集群时,一般并不会将master硬编码进程序,而是通过spark-submit启动应用,并在此处接收。

使用Shell

在Spark Shell中,已经创建了一个特定的解释器可知的SparkContext,变量名为sc。使用Spark Shell需要确保自己的SparkContext没有运行。可以通过–master参数设置上下文连接的主服务器,并且可以通过将逗号分隔的列表传入–jars参数来将JARs添加到类路径。也可以通过将逗号分隔的Maven坐标列表传入–packages参数,来将依赖(例如,Spark Packages)添加到shell会话中。可能存在依赖的任何其他库(例如,Sonatype)可以传给–repositories参数中。

# 在四个核上运行spark shell
<spark-home>\bin\spark-shell.cmd --master local[4]

# 添加code.jar到classpath
<spark-home>\bin\spark-shell.cmd --master local[4] --jars code.jar

# 添加Maven坐标
<spark-home>\bin\spark-shell.cmd --master local[4] --packages "org.example:example:0.1"

翻译源:Spark 2.3.2 Guide

猜你喜欢

转载自blog.csdn.net/qq_32165041/article/details/83617824