#1.Spark创建步骤
注意: 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输入:
Spark Driver作为一个ApplicationMaster在YARN集群中启动,客户端提交给ResourceManager的每一个job都会在集群的worker节点上分配一个唯一的ApplicationMaster,由该ApplicationMaster管理应用的全生命周期。因为Driver在YARN中运行,所以事先不需要启动Spark Master/Client,应用结果不能在客户端显示。
yarn-cluster与yarn-client的区别: 它们的区别就是ApplicationMaster的区别,yarn-cluster中ApplicationMaster不仅负责申请资源,并负责监控Task的运行状况,因此可以关掉client; 而yarn-client中ApplicationMaster仅负责申请资源,由client中的driver来监控调度Task的运行,因此不能关掉client