Spark Streaming 常见的输入数据源(以WordCount计算为例)

本文介绍了Spark Streaming中DStream的概念,它是通过微批次处理连续数据流。文章以WordCount为例,详细讲解了如何从Socket、HDFS和Kafka数据源进行数据处理,包括Scala和Java8版本的实现。
摘要由CSDN通过智能技术生成

  SparkStreaming中的数据抽象叫做DStream。DStream是抽象类,它把连续的数据流拆成很多的小RDD数据块, 这叫做“微批次”, spark的流式处理, 都是“微批次处理”。 DStream内部实现上有批次处理时间间隔,滑动窗口等机制来保证每个微批次的时间间隔里, 数据流以RDD的形式发送给spark做进一步处理。因此, 在一个为批次的处理时间间隔里, DStream只产生一个RDD。

1、Socket数据源

  • Scala版本——WordCount计算
package com.sparkscala.streaming

import org.apache.log4j.{
   Level, Logger}
import org.apache.spark.streaming.dstream.{
   DStream, ReceiverInputDStream}
import org.apache.spark.{
   SparkConf, SparkContext}
import org.apache.spark.streaming.{
   Seconds, StreamingContext}

/**
 * 数据源:从 socket 中获取数据
 */
object StreamingWordCountScala {
   
  def main(args: Array[String]): Unit = {
   
    Logger.getLogger("org").setLevel(Level.WARN)

    //一、初始化程序入口
    /**
     * local[1]  中括号里面的数字都代表的是启动几个工作线程,默认情况下是一个工作线程。
     * 那么作为sparkStreaming 我们至少要开启两个线程,因为其中一个线程用来接收数据,这样另外一个线程用来处理数据。
     * Seconds 指的是每次数据数据的时间范围(batch interval)
     */
    val conf: SparkConf = new SparkConf().setMaster("local[2]").setAppName(this.getClass.getSimpleName)
    val ssc: StreamingContext = new StreamingContext(conf, Seconds(3))

    //二、获取数据流,就是数据源
    //从 socket 中获取数据
    val lines: ReceiverInputDStream[String] = ssc.socketTextStream("192.168.244.130", 1234)

    //三、数据处理
    //val result: DStream[(String, Int)] = lines.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _)
    val words: DStream[String] = lines.flatMap(_.split(" "))
    val wordAndOne: DStream[(String, Int)] = words.map((_, 1))
    val wordResult: DStream[(String, Int)] = wordAndOne.reduceByKey(_ + _)

    //四、数据输出查看
    wordResult.print()

    //五、启动任务
    ssc.start()  //启动
    ssc.awaitTermination()  //线程等待,等待处理下一批次任务
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值