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()


  }
  }

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

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

相关推荐
Elastic 中国社区官方博客3 小时前
用于 UBI 的 Elasticsearch 插件:从搜索查询中分析用户行为
大数据·数据库·elasticsearch·搜索引擎·全文检索
wdfk_prog3 小时前
实战指南:如何将Git仓库中的特定文件夹及其历史完整迁移到另一个仓库
大数据·linux·运维·笔记·git·学习·elasticsearch
Yzxs0093 小时前
【8月优质EI会议合集|高录用|EI检索稳定】计算机、光学、通信技术、电子、建模、数学、通信工程...
大数据·人工智能·算法·计算机视觉·信息与通信
经典19923 小时前
从单体到分布式:解锁架构进化密码
分布式·架构
阿里云大数据AI技术4 小时前
DataWorks千万级任务调度与全链路集成开发治理赋能智能驾驶技术突破
大数据·数据库·数据挖掘
小满和小晨4 小时前
Redis+Lua的分布式限流器
redis·分布式·lua
阿萨德528号4 小时前
5、生产Redis高并发分布式锁实战
数据库·redis·分布式·缓存
bing_1585 小时前
Kafka 是什么?
分布式·kafka
zlpzlpzyd5 小时前
Zookeeper符合cap中的AP还是CP
linux·分布式·zookeeper
zxsz_com_cn6 小时前
智能化设备维护:开启高效运维新时代
大数据·数据库·人工智能