千家信息网

怎么联合使用Spark Streaming、Broadcast、Accumulaor

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇内容介绍了"怎么联合使用Spark Streaming、Broadcast、Accumulaor"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处
千家信息网最后更新 2026年10月31日怎么联合使用Spark Streaming、Broadcast、Accumulaor

本篇内容介绍了"怎么联合使用Spark Streaming、Broadcast、Accumulaor"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

广播可以自定义,通过Broadcast、Accumulator联合可以完成复杂的业务逻辑。

以下代码实现在本机9999端口监听,并向连接上的客户端发送单词,其中包含黑名单的单词Hadoop,Mahout和Hive。

package org.scala.opt

import java.io.{PrintWriter, IOException}
import java.net.{Socket, SocketException, ServerSocket}

case class ServerThread(socket : Socket) extends Thread("ServerThread") {
override def run(): Unit = {
val ptWriter = new PrintWriter(socket.getOutputStream)
try {
var count = 0
var totalCount = 0
var isThreadRunning : Boolean = true
val batchCount = 1
val words = List("Java Scala C C++ C# Python JavaScript",
"Hadoop Spark Ngix MFC Net Mahout Hive")
while (isThreadRunning) {
words.foreach(ptWriter.println)
count += 1
if (count >= batchCount) {
totalCount += count
count = 0
println("batch " + batchCount + " totalCount => " + totalCount)
Thread.sleep(1000)
}
//out.println此类中的方法不会抛出 I/O 异常,尽管其某些构造方法可能抛出异常。客户端可能会查询调用 checkError() 是否出现错误。
if(ptWriter.checkError()) {
isThreadRunning = false
println("ptWriter error then close socket")
}
}
}
catch {
case e : SocketException =>
println("SocketException : ", e)
case e : IOException =>
e.printStackTrace();
} finally {
if (ptWriter != null) ptWriter.close()
println("Client " + socket.getInetAddress + " disconnected")
if (socket != null) socket.close()
}
println(Thread.currentThread().getName + " Exit")
}
}
object SocketServer {
def main(args : Array[String]) : Unit = {
try {
val listener = new ServerSocket(9999)
println("Server is started, waiting for client connect...")
while (true) {
val socket = listener.accept()
println("Client : " + socket.getLocalAddress + " connected")
new ServerThread(socket).start()
}
listener.close()
}
catch {
case e: IOException =>
System.err.println("Could not listen on port: 9999.")
System.exit(-1)
}
}
}

以下代码实现接收本机9999端口发送的单词,统计黑名单出现的次数的功能。

package com.dt.spark.streaming_scala

import org.apache.spark.streaming.{Seconds, StreamingContext}
import org.apache.spark.{SparkConf, Accumulator}
import org.apache.spark.broadcast.Broadcast

/**
* 第103课: 动手实战联合使用Spark Streaming、Broadcast、Accumulator实现在线黑名单过滤和计数
* 本期内容:
1,Spark Streaming与Broadcast、Accumulator联合
2,在线黑名单过滤和计算实战
*/
object _103SparkStreamingBroadcastAccumulator {

@volatile private var broadcastList : Broadcast[List[String]] = null
@volatile private var accumulator : Accumulator[Int] = null

def main(args : Array[String]) : Unit = {
val conf = new SparkConf().setMaster("local[5]").setAppName("_103SparkStreamingBroadcastAccumulator")
val ssc = new StreamingContext(conf, Seconds(5))
ssc.sparkContext.setLogLevel("WARN")

/**
* 使用Broadcast广播黑名单到每个Executor中
*/
broadcastList = ssc.sparkContext.broadcast(Array("Hadoop", "Mahout", "Hive").toList)

/**
* 全局计数器,用于通知在线过滤了多少各黑名单
*/
accumulator = ssc.sparkContext.accumulator(0, "OnlineBlackListCounter")

ssc.socketTextStream("localhost", 9999).flatMap(_.split(" ")).map((_, 1)).reduceByKey(_+_).foreachRDD {rdd =>{
if (!rdd.isEmpty()) {
rdd.filter(wordPair => {
if (broadcastList.value.contains(wordPair._1)) {

println("BlackList word %s appeared".formatted(wordPair._1))
accumulator.add(wordPair._2)
false
} else {
true
}
}).collect()
println("BlackList appeared : %d times".format(accumulator.value))
}
}}
ssc.start()
ssc.awaitTermination()
ssc.stop()
}
}

Server发送端日志如下,不断打印输出的次数。

Spark Streaming端打印黑名单的单词及出现的次数。

"怎么联合使用Spark Streaming、Broadcast、Accumulaor"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

黑名单 黑名 联合 单词 内容 次数 在线 代码 实战 客户 客户端 方法 更多 知识 端口 本机 广播 输出 复杂 实用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 华服互联网科技靠谱吗 新华互联网科技学院 美国互联网科技 智网互联网科技 腾讯科技 互联网女皇 互联网科技小额贷款 长亮科技互联网金融 新华互联网科技2019 互联网科技革命什么开始 米聚互联网科技南京有限公司排面 中国互联网公司排名锤子科技 黑科技 体验场景 互联网大会 上海钢联属于互联网科技股吗 宇信科技在杭州互联网排第几 下一代互联网重大应用科技园 35岁以上互联网科技行业 互联网硬科技公司 美国五大互联网科技公司市值多少 玉溪新华互联网科技怎么选 青岛互联网科技园 新华互联网科技学校 互联网金融监管科技 青岛科技大学互联网大赛研究生 移动互联网年度科技创新 互联网保险科技创业 燊美集互联网科技有限公司 河南住房之家互联网科技 互联网科技数字货币 有人说阿里系是互联网科技企业 盐城市攀科互联网科技有限公司
0