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


  }
  }

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

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

相关推荐
励志成为糕手1 天前
Spark Shuffle:分布式计算的数据重分布艺术
大数据·分布式·spark·性能调优·数据倾斜
K_i1341 天前
GitOps实战:Helm一键部署ArgoCD
大数据·elasticsearch·搜索引擎
三口吃掉你1 天前
Git分布式版本控制工具
分布式·git
yunmi_1 天前
分布式文件存储系统FastDFS(入门)
java·分布式·maven·fastdfs
189228048611 天前
NX482NX486美光固态闪存NX507NX508
大数据·网络·数据库·人工智能·性能优化
数据与人工智能律师1 天前
数字人民币钱包抉择:匿名自由与实名安全的法律风险评估
大数据·人工智能·python·云计算·区块链
DashingGuy1 天前
Spark的Broadcast Join以及其它的Join策略
大数据·spark
海梨花1 天前
【从零开始学习RabbitMQ】
分布式·学习·rabbitmq
失散131 天前
分布式专题——26 BIO、NIO编程与直接内存、零拷贝深入辨析
java·分布式·rpc·架构·nio·零拷贝
计算机编程小央姐1 天前
大数据工程师认证项目:汽车之家数据分析系统,Hadoop分布式存储+Spark计算引擎
大数据·hadoop·分布式·数据分析·spark·汽车·课程设计