SparkContext

SparkContext

SparkContext是应用启动时创建的Spark上下文对象,是进行Spark应用开发的主要接口,是Spark上层应用与底层实现的中转站。我们俗称上下文,上接机群环境,下接Spark 内核,就是给我们提供的一个入口。

SparkContext是什么

SparkContext是Spark应用程序执行的入口,任何Spark应用程序最重要的一个步骤就是生成SparkContext对象。SparkContext允许Spark应用程序通过资源管理器(Resource Manager)访问Spark集群。其中资源管理器可以是Spark Standalone,Yarn或者Apache Mesos。

如何创建SparkContext类

要创建SparkContext,首先应该创建SparkConf。 SparkConf有一个配置参数,Spark驱动程序(Driver)会将这些参数,传递给SparkContext。

这些参数,指导了spark如何在集群上去请求资源,同时也控制了每个work node的上的container的数目、内存大小和core的数量。

在创建 SparkContext 对象之后,就可以通过它来调用spark函数,比如textFile, sequenceFile, parallelize等。

同时它就可以用来创建RDD,广播变量和作为累加器,进入Spark服务和运行作业。所有这些都可以在SparkContext停止之前执行。

关闭SparkContext

一个JVM只能运行一个SparkContext,如果想新建SparkContext,必须把旧的停掉。调用SparkContext的stop()函数即可:
stop():Unit

Spark停止成功后,Spark会打印出类似下面的日志:
INFO SparkContext: Successfully stopped SparkContext

WorkCount例子

可以利用前面的wordcount例子看看怎么创建SparkContext。

复制代码
package batch.base
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD

object WordCount {

  //创建sparkConf
  val sparkConf = new SparkConf().setAppName("WordCount").setMaster("local[2]")
  val sc=new SparkContext(sparkConf)
  def main(args: Array[String]): Unit = {
    val rootPath: String = "data/spark"
    val file: String = s"${rootPath}/words.txt"

    // 读取文件内容
    val lineRDD: RDD[String] = sc.textFile(file)
    // 以行为单位做分词
    val wordRDD: RDD[String] = lineRDD.flatMap(line => line.split(" "))
    val cleanWordRDD: RDD[String] = wordRDD.filter(word => !word.equals(""))

    // 把RDD元素转换为(Key,Value)的形式
    val kvRDD: RDD[(String, Int)] = cleanWordRDD.map(word => (word, 1))
    // 按照单词做分组计数
    val wordCounts: RDD[(String, Int)] = kvRDD.reduceByKey((x, y) => x + y)

    // 打印词频最高的5个词汇
    wordCounts.map{case (k, v) => (v, k)}.sortByKey(false).take(5).foreach(println)
  }
}

SparkContext在Spark中的功能

获取Spark应用程序的当前状态

SpkEnv

它是Spark公共服务的运行时环境。它与其他部件互相交互,为Spark应用程序建立分布式计算平台。它为正在运行的spark 应用保留其所需要的服务,服务其中包括记录驱动程序和执行程序的不同环境,从而可以通过SpkEnv来标识 Spark的运行环境。

SparkConf

SparkConf 可以设置spark能处理的最大应用程序数量,并可针对每个应用程序分别进行个性化配置。它的使用也很简单,一些常见的属性,如主URL和应用程序名称,都可以通过set()方法来配置任意的键、值对。

部署环境(即master URL)

Spark部署环境有两种类型,即本地和集群。

本地模式是非分布式单JVM部署模式。所有执行组件(driver,executor,LocalSchedulerBackend和master)都存在于同一个JVM中。 这是唯一一个driver可以对执行起作用的模式。 为了测试,调试或演示目的,本地模式是合适的,因为它不需要提前设置来启动火花应用程序。

在集群模式下,Spark以分布模式运行。

设置配置

Master URL

master方法返回部署环境正在使用的spark.master当前值。

本地属性 - 创建逻辑作业组

本地属性概念的目的是通过属性创建逻辑作业组,这些属性使从不同线程启动的独立作业可以属于单个逻辑组。你可以设置一个本地属性,用来影响从线程提交的Spark作业。

默认日志记录级别

它允许您在Spark应用程序中设置根登录级别,例如Spark Shell。

访问各种服务

它还有助于访问TaskScheduler,LiveListenBus,BlockManager,SchedulerBackend,ShuffelManager和可选的ContextCleaner等服务。

取消 Job

取消Job只是简单地要求DAGScheduler放弃一个Spark作业。

取消 stage

取消Stage只是简单地要求DAGScheduler放弃一个Spark stage。

闭包清理

每次发生Action操作时,Spark都会清理关闭操作,Action的主体会在清理前,序列化并通过网络发送、执行。这个操作是 SparkContext的 clean方法来完成的,这个方法也被叫做 ClosureClean.clean。它不仅清理闭包,而且也清理引用闭包。

注册Spark监听器

我们可以通过 addSparkListener 方法,注册一个自定义的 SparkListenerInterface。或者通过 spark.extraListeners 设置,来注册也是可以的。

可编程动态分配

它还提供以下方法作为开发者API,用于动态分配executor:requestExecutorskillExecutorsrequestTotalExecutorsgetExecutorIds

访问持久性RDD

getPersistentRDDs给出了已通过缓存标记为持久的RDD的集合。

unpersist RDD

从主模块管理器和内部persistentRdds映射中,unpersist删除RDD。

相关推荐
Light601 天前
数据要素与数据知识产权交易中心建设专项方案——以领码 SPARK 融合平台为技术底座,构建可评估、可验证、可交易、可监管的数据要素工程体系
大数据·分布式·spark
毕设源码-钟学长2 天前
【开题答辩全过程】以 基于Spark机器学习算法的体育新闻智能分类系统设计与实现为例,包含答辩的问题和答案
算法·机器学习·spark
yumgpkpm3 天前
Cloudera CDP7、CDH5、CDH6 在华为鲲鹏 ARM 麒麟KylinOS做到无缝切换平缓迁移过程
大数据·arm开发·华为·flink·spark·kafka·cloudera
青云交3 天前
Java 大视界 -- Java+Spark 构建企业级用户画像平台:从数据采集到标签输出全流程(437)
java·开发语言·spark·hbase 优化·企业级用户画像·标签计算·高并发查询
qq_12498707533 天前
基于spark的新闻文本分类系统(源码+论文+部署+安装)
大数据·分类·数据挖掘·spark
yumgpkpm4 天前
Iceberg在Cloudera CDP集群详细操作步骤
大数据·人工智能·hive·zookeeper·spark·开源·cloudera
梦里不知身是客114 天前
spark的统一内存管理机制
java·大数据·spark
华阙之梦4 天前
【仅公网互通的 Spark 集群通信与配置实战方案】
大数据·ajax·spark
心止水j4 天前
数据采集-----案例
spark
梦里不知身是客115 天前
RDD分区的设定规则
spark