Spark-streaming

kafka与其他组件的整合

kafka作为消费者

使用kafka作为消费者从bloom中获取数据,并将数据打印到控制台或传入HDFS。

ACKS机制的不同级别及其对数据可靠性和延迟的影响。
kafka作为生产者

kafka作为生产者生成数据,并使用bloom作为消费者采集数据

在kafka中创建topic,并将数据写入指定的topic中。

创建topic

kafka-topics.sh --create --zookeeper node01:2181,node02:2181,node03:2181 --topic test1 --partitions 3 --replication-factor 3

数据的形式:

主题名称-分区编号。

在Kafka的数据目录下查看。

设定副本数量,不能大于broker的数量。

Spark Streaming中的Extreme转换

无状态转换操作

无状态转换操作的概念,即对每个批次的RDD进行转换。

常见的无状态转换操作,如map、flatMap、filter、reduceByKey等。

这些操作是分别应用到每个RDD上的,即使这些RDD属于不同的时间区间。

针对键值对的 DStream 转化操作(比如reduceByKey())要添加**import StreamingContext._**才能在 Scala 中使用。

Transform操作

transform操作允许对RDD进行任意转换,并扩展Spark Streaming的功能。

输出代码

java 复制代码
import org.apache.spark.SparkConf
import org.apache.spark.rdd.RDD
import org.apache.spark.streaming.{Seconds, StreamingContext}
import org.apache.spark.streaming.dstream.{DStream, ReceiverInputDStream}

object Transform {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("transform")
    val ssc = new StreamingContext(sparkConf,Seconds(3))

    val lineDStream :ReceiverInputDStream[String] = ssc.socketTextStream("node01",9999)
    val wordAndCountDStream :DStream[(String,Int)] = lineDStream.transform(rdd => {
      val words :RDD[String] = rdd.flatMap(_.split(" "))
      val wordAndOne :RDD[(String,Int)] = words.map((_,1))
      val value :RDD[(String,Int)] = wordAndOne.reduceByKey(_+_)
      value

    })
    wordAndCountDStream.print()

    ssc.start()
    ssc.awaitTermination()

  }
  }

输出结果如下:

Join操作

join操作的概念,即对两个流的RDD进行关联操作。

oin操作的硬性要求,即两个流的批次大小必须一致。

实验操作步骤

配置和启动环境

配置和启动Spark Streaming环境,包括设置时间节点和端口号。

数据输入和结果输出

java 复制代码
import org.apache.spark.SparkConf
import org.apache.spark.streaming.dstream.{DStream, ReceiverInputDStream}
import org.apache.spark.streaming.{Seconds, StreamingContext}

object job {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("join")
    val ssc = new StreamingContext(sparkConf,Seconds(3))

    val lineDStream1 :ReceiverInputDStream[String] = ssc.
      socketTextStream("node01",9999)
    val lineDStream2 :ReceiverInputDStream[String] = ssc.
      socketTextStream("node02",8888)

    val wordToOneDStream :DStream[(String,Int)] = lineDStream1
      .flatMap(_.split(" ")).map((_,1))

    val wordToADstream :DStream[(String,String)] = lineDStream2
      .flatMap(_.split(" ")).map((_,"a"))

    val joinDStream :DStream[(String,(Int,String))]=wordToOneDStream
      .join(wordToADstream)

    joinDStream.print()

    ssc.start()
    ssc.awaitTermination()


  }
  }

在不同的节点上输入数据,并在控制台上输出结果。

在不同窗口中启动消费者和生产者,并捕捉数据。

相关推荐
广凌股份(广凌科技)4 分钟前
实验室安全检查包括哪些内容?智能管理平台筑牢校园实验安全防线
大数据·人工智能
wechatbot88815 分钟前
SpringBoot Vue 企业微信多账号托管|扫码登录 代理 IP 消息回调
大数据·后端·微信·企业微信·ai编程
乌恩大侠35 分钟前
【Sionna】docker build ubuntu cuda
ubuntu·docker·容器·spark·o-ru·ai-ran
大大大大晴天️36 分钟前
从数仓建模到 AI 数据底座:重新理解数据治理的位置
大数据·数据治理
随便做点啥1 小时前
32卡64G-910B4-16后端集群部署报告
java·大数据·运维
SelectDB1 小时前
Apache Doris 选型实操:4 个维度 Checklist 与验证要点
大数据·数据库·掘金技术征文
SelectDB1 小时前
Apache Doris 高并发点查与实时写入笔记:一套引擎统一实时数仓与在线服务
大数据·数据库·数据分析
SelectDB1 小时前
Apache Doris 存算分离实操:从对象存储接入到多计算集群配置(附 SQL)
大数据·数据库·数据分析
实验室管理云平台2 小时前
实验室信息管理系统:提升科研效率与数据安全的关键工具
大数据·科技
SelectDB2 小时前
Apache Doris 多表 Join 优化实战:从 CBO 到 Colocate Join 配置(附 SQL)
大数据·数据库·数据分析