SparkStreaming(5):处理不同数据源(socket源数据或者处理本地/HDFS文件)

一、实现功能

Streaming处理socket数据源或者本地/hdfs上的数据源。

二、处理socket源数据

1.实现功能:

SparkStreaming处理socket源的数据,并进行wordcount的统计。

2.scala代码

package Spark

import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Seconds, StreamingContext}

/**
  * spark Streaming 处理socket数据
  *
  * 使用nc测试nc -lk 6789
  */
object NetworkWordCount {
  def main(args: Array[String]): Unit = {
    val sparkConf=new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount")
    /***
      * 创建StreamingContext需要sparkConf和batch interval
      */
    val ssc=new StreamingContext(sparkConf,Seconds(5))

    val lines=ssc.socketTextStream("hadoop",6789)

    val result= lines.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_)
    result.print()


    ssc.start()
    ssc.awaitTermination()
  }
}

3.测试

(1)开启nc端口

nc -lk 6789

(2)然后再运行代码,否则会报各种奇葩的错误!

 

三、处理本地/HDFS源数据

1.实现功能:

SparkStreaming处理本地或者HDFS文件,并进行wordcount的统计。

2.前提开启:

(1)hdfs

(2)metastore

3.scala代码:

(1)本地目录写法:

file:///E:\\Tools\\WorkspaceforMyeclipse\\scalaProjectMaven\\datas\\

(2)hdfs目录写法:

/spark/

(3)代码(以本地为例)

package Spark

import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Seconds, StreamingContext}

/**
  * 使用spark Streaming处理文件系统(local/hdfs)的数据
  */
object FileWordCount {
  def main(args: Array[String]): Unit = {
    val sparkConf=new SparkConf().setMaster("local[2]").setAppName("FileWordCount")

    val ssc=new StreamingContext(sparkConf,Seconds(5))




    //    file:///opt/modules/spark-2.1.0-bin-2.7.3/README.md
    val lines=ssc.textFileStream("file:///E:\\Tools\\WorkspaceforMyeclipse\\scalaProjectMaven\\datas\\")

    val result= lines.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_)
    result.print()

    ssc.start()
    ssc.awaitTermination()
  }
}

4.测试:

(1)将内容写入test.log

(2)将文件test.log采用cp方式,放到对应datas文件下面

cp .\test.log .\datas\

(注意:(2)非常重要,一定要通过cp或者mv的方式移动进去,否者streaming读取不到增加的流信息!)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值