Spark基础

204 阅读2分钟

#1.Spark创建步骤

image.png
#2.Spark各组件执行过程
image.png
上下文(context)定义之后,需要按照以下步骤进行操作: 1.定义输入源 2.流计算指令处理 3.调用start方法接收和处理数据 4.处理过程一直持续,直到stop停止

注意: 1.一旦一个context已经启动,就不能有新的流算子创建或者添加到context中 2.一旦一个context已经停止,就不能再重新启动 3.在JVM中,同一时间只能有一个StreamingContext处于活跃的状态 4.在StreamingContext上调用stop方法,也会关闭SparkContext对象。如果只想关闭StreamContext对象,设置stop的可选参数为false 5.一个SparkContext对象可以重复创建多个StreamingContext对象

Receiver作为一个长期运行的任务运行在Spark worker或executor中。因此,它占有一个核,这个核是分配给Spark Streaming应用程序的所有 核中的一个

如果分配给应用程序的核的数量少于或者等于输入DStreams或者receivers的数量,系统只能够接收数据而不能处理它们。

当运行在本地,如果你的master URL被设置成了“local”,这样就只有一个核运行任务。这对程序来说是不足的,因为作为receiver的输入DStream将会占用这个核,这样就没有剩余的核来处理数据了

#3.实例

package com.scala.sparkExample

import org.apache.spark._
import org.apache.spark.streaming._

object SparkStreaming {
    def main(args : Array[String]){
        //1.定义配置
        val conf = new SparkConf().setAppName("SparkStreaming").setMaster("local[*]")
        //2.定义流的上下文(批次间隔设置为10秒)
        val ssc = new StreamingContext(conf, Seconds(10))
        //3.创建socket输入流(监听本机的7777报文)
        val socketStream = ssc.socketTextStream("localhost", 7777)
        //4.转换RDD,筛选包含error的行
        val errLines = socketStream.filter(line=>line.contains("error"))
        //5.输出RDD
        errLines.print()
        //6.start启动流计算
        ssc.start()
        //7.等待执行作业结束
        ssc.awaitTermination()
    }
}

通过nc输入:

image.png
输出结果:
image.png
#4.Spark on yarn Spark在YARN中有yarn-sluster和yarn-client两种运行模式 1)YARN Cluster

Spark Driver作为一个ApplicationMaster在YARN集群中启动,客户端提交给ResourceManager的每一个job都会在集群的worker节点上分配一个唯一的ApplicationMaster,由该ApplicationMaster管理应用的全生命周期。因为Driver在YARN中运行,所以事先不需要启动Spark Master/Client,应用结果不能在客户端显示。

image.png
2)YARN Client 在yarn client模式下,Driver运行在Client上,通过ResourceMaster向RM获取资源。本地Driver负责与所有exector container进行交互,并将最后结果汇总。

yarn-cluster与yarn-client的区别: 它们的区别就是ApplicationMaster的区别,yarn-cluster中ApplicationMaster不仅负责申请资源,并负责监控Task的运行状况,因此可以关掉client; 而yarn-client中ApplicationMaster仅负责申请资源,由client中的driver来监控调度Task的运行,因此不能关掉client