Spark 2.x管理与开发-Spark Streaming-Spark Streaming基础(三)【开发自己的NetworkWordCount 】

 

(一定注意):

val sparkConf = new SparkConf().setAppName("NetworkWordCount").setMaster("local[2]")

官方的解释:

********自己操作********

1.运行Scala程序之前,先将nc服务器启动

[root@bigdata111 sbin]# nc -l 1234

2.Scala代码:

package streamingExamples

import org.apache.spark.SparkConf
import org.apache.spark.streaming.StreamingContext
import org.apache.spark.streaming.Seconds
import org.apache.spark.storage.StorageLevel
import org.apache.log4j.Logger
import org.apache.log4j.Level
/**
 * 知识点:
 * 1.创建StreamingContext 核心:DStream 离散流 
 * 2.DSteam的表现形式就是RDD,对二者的操作是一样的
 * 3.使用DStream把连续的数据流变成不连续的RDD
 * Spark Streaming最核心的内容
 */
object MyNetworkWordCount {
  def main(args: Array[String]): Unit = {
    //下面的两行代码定义日志级别,可以减少打印出来的日志
    Logger.getLogger("org.apache.spark").setLevel(Level.ERROR)
    Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)
    
    //一、创建运行时的环境
    //保证CPU的核数大于等于2,"local[2]"表示开启两个线程
    //一个线程用于读取数据,一个线程用于计算处理数据
    val conf=new SparkConf().setMaster("local[2]").setAppName("MyNetworkWordCount")
    //二、定时采样
    //因为SparkStreaming是将连续的数据流变成不连续的RDD,所以就是定时采样。
    //接收两个参数,其中:Seconds(3)是采样时间间隔,这里就是3秒
    val ssc=new StreamingContext(conf,Seconds(3))
    //三、创建DStream,从netcat服务器上读取数据
    //接收三个参数:地址,端口号,和RDD里缓存的位置一致(一般取默认值即可)
    val lines=ssc.socketTextStream("192.168.212.111", 1234, StorageLevel.MEMORY_ONLY)
    //四、分词
    val words=lines.flatMap(_.split(" "))
    //五、计数
    val wordcount=words.map((_,1)).reduceByKey(_+_)//六、打印
    wordcount.print()
    //注意:因为Spark Streaming程序是流式处理程序,所以可以不用关闭此程序
    //七、启动StreamingContext进行计算
    ssc.start()
    //八、等待任务结束
    ssc.awaitTermination()
  }
}

3.运行此程序

 

4.现在往服务器写数据:

 

5.查看结果:

 

 

 

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3