通过sparkstreaming分析url的数据

本文介绍如何在Spark 1.6.2中使用Scala 2.10.6自定义接收器进行流数据处理。通过创建UrlReceiver类,从指定URL读取数据并将其推送给Spark Streaming进行实时处理。
摘要由CSDN通过智能技术生成

spark version 1.6.2

scala verson 2.10.6

此代码参考官方例子----

自定义接收器

import java.io.BufferedReader


import org.apache.spark.Logging
import org.apache.spark.storage.StorageLevel
import org.apache.spark.streaming.receiver.Receiver

import scala.io.{BufferedSource, Source}

/**
  * 自定义接收器
  * @param URL url
  */
class UrlReceiver(URL:String) extends Receiver[String](StorageLevel.MEMORY_AND_DISK) with Logging{
  override def onStart(): Unit = {
    new Thread("创建一个线程"){
     override def run(){
       url()
      }
    }.start()



  }

  override def onStop(): Unit = {

  }

  private def url(): Unit ={
    var input:String=null
    try{
    val fileContent: BufferedSource = Source.fromURL(URL, "utf-8")
    val reader: BufferedReader = fileContent.bufferedReader()
    input=reader.readLine()
    while (!isStopped && input!=null){


        //推送数据给streaming
        store(input)
        input=reader.readLine()
    }

    reader.close()
    logInfo("停止接受")
    restart("尝试再次连接~~~~~~~~~~~~~")
    }catch {
      case t:Throwable =>{
        restart(s"接受数据错误${t}")
      }
      case s=>{
        restart(s"连接出现错误${URL}:${s}")
      }
    }
  }
}

 写streming程序

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


object urlstreaming {


  def main(args: Array[String]): Unit = {
    new SparkConf
   SparkContext
    //此处以百度为例
    val URL= "https://www.baidu.com"
    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName(s"${this.getClass.getSimpleName}").set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
      .set("spark.streaming.stopGracefullyOnShutdown", "true")




    val ssc = new StreamingContext(conf,Seconds(3))

    val value: ReceiverInputDStream[String] = ssc.receiverStream(new UrlReceiver(URL))

      value.foreachRDD(
        rdd=>{

          rdd.foreach(println)
        }
      )


    ssc.start()
    ssc.awaitTermination()

  }
}

 

转载于:https://www.cnblogs.com/hekang-14/p/10248719.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值