Apache spark Spark Streaming未将任务分发到群集上的节点

Apache spark Spark Streaming未将任务分发到群集上的节点,apache-spark,spark-streaming,rdd,dstream,Apache Spark,Spark Streaming,Rdd,Dstream,我有两个节点的独立集群用于spark流处理。下面是我的示例代码,它演示了我正在执行的过程 sparkConf.setMaster("spark://rsplws224:7077") val ssc=new StreamingContext() println(ssc.sparkContext.master) val inDStream = ssc.receiverStream //batch of 500 ms as i would like to have 1 sec latency v

我有两个节点的独立集群用于spark流处理。下面是我的示例代码,它演示了我正在执行的过程

sparkConf.setMaster("spark://rsplws224:7077") 
val ssc=new StreamingContext()
println(ssc.sparkContext.master)
val inDStream = ssc.receiverStream  //batch of 500 ms as i would like to have 1 sec latency 
val filteredDStream = inDStream.filter  // filtering unwanted tuples 
val keyDStream = filteredDStream.map    // converting to pair dstream 
val stateStream = keyDStream .updateStateByKey //updating state for history 

stateStream.checkpoint(Milliseconds(2500))  // to remove long lineage and meterilizing state stream 
stateStream.count()

val withHistory = keyDStream.join(stateStream) //joining state wit input stream for further processing 
val alertStream = withHistory.filter // decision to be taken by comparing history state and current tuple data
alertStream.foreach // notification to other system 
我的问题是spark没有将这个状态RDD分配给多个节点,或者没有将任务分配给其他节点,导致响应延迟很高,我的输入负载大约是每秒100000个元组

我试过下面的东西,但都不管用

1)
spark.locality.等待
到1秒

2) 减少分配给executer进程的内存,以检查是否分发RDD或任务,但即使超出驱动器也在运行的第一个节点(m1)的内存限制

3) 将spark.streaming.concurrentJobs从1(默认)增加到3

4) 我在流式ui存储中检查过,状态数据流RDD大约有20个分区,所有分区都位于本地节点m1上

如果我运行SparkPi 100000,那么spark能够在几秒钟(30-40)后利用另一个节点,因此我确信我的集群配置是良好的

编辑
有一件事我已经注意到,即使对于我的RDD,如果我设置了存储级内存和磁盘服务器2,那么在应用程序ui存储中,它也会显示
内存序列化1x复制
如果您没有命中集群并且作业只在本地运行,那么很可能意味着
SparkConf
中的Spark Master设置为本地URI,而不是主URI。

如果您未命中集群,并且作业仅在本地运行,则很可能意味着您的
SparkConf
中的Spark master设置为本地URI,而不是主URI。

默认情况下,Spark.default.parallelism属性的值为“本地模式”,因此所有任务都将在接收数据的节点中执行。
在spark-defaults.conf文件中更改此属性以提高并行度级别。

默认情况下,spark.default.parallelism属性的值为“本地模式”,因此所有任务都将在接收数据的节点中执行。
在spark-defaults.conf文件中更改此属性以提高并行性级别。

spark不会自动在集群中分发流数据,因为它倾向于充分利用数据局部性(为了更好地在其数据所在的位置启动任务,这是默认配置)。但您可以使用重新分区来分发流数据并提高并行性。您可以转到以获取更多信息。

Spark不会自动在集群中分发流数据,因为它倾向于充分利用数据位置(启动任务时,数据所在位置会更好,这是默认配置)。但您可以使用重新分区来分发流数据并提高并行性。您可以转到以获取更多信息。

Thx Sam,我已重新验证spark conf,它不采用本地URI。还有其他建议吗?请更新答案以包含设置答案的代码行。当你使用火花壳时,它能工作吗???如果有,则启动spark shell并运行
sc.master
查看它是什么。很抱歉,对于spark shell,我得到了相同的结果。@JigarParekh使用设置主程序的代码行更新您的问题,在您的应用程序中插入
println(“sc.master=“+sc.master)
。您是否已在UI中检查工作人员是否已被删除?更新了代码,代码行设置了master,并使用“打印自流上下文”对其进行了验证。我还验证了其他工人是否已启动并运行。它们也显示在appui执行器部分thx-Sam中,我已经重新验证了spark-conf没有使用本地URI。还有其他建议吗?请更新答案以包含设置答案的代码行。当你使用火花壳时,它能工作吗???如果有,则启动spark shell并运行
sc.master
查看它是什么。很抱歉,对于spark shell,我得到了相同的结果。@JigarParekh使用设置主程序的代码行更新您的问题,在您的应用程序中插入
println(“sc.master=“+sc.master)
。您是否已在UI中检查工作人员是否已被删除?更新了代码,代码行设置了master,并使用“打印自流上下文”对其进行了验证。我还验证了其他工人是否已启动并运行。它们也显示在应用程序ui执行器部分。你是什么意思?spark.defaukt.parallelism是RDD的数量,不是吗?你是什么意思?spark.defaukt.parallelism是RDD的数量,不是吗?