sparkStreamのKafkaのプロデューサーとして

みなさん、こんにちは:

  sparkStreamのKafkaのプロデューサーとして、特定のファイルのデータがKafkaに送信されます。

package Traffic

import java.util.Properties
import kafka.producer.{KeyedMessage, Producer, ProducerConfig}
import org.apache.spark.{SparkConf, SparkContext}
import org.codehaus.jettison.json.JSONObject


/**
  * Created by Administrator on 2017/10/14.
  * 功能:SparkStream作为kafka的生产者,将制定文件数据打到kafka中
  *
  */
object KafkaEventProducer {
  def main(args: Array[String]): Unit = {


    //创建topic
    val topic="car_event"
    val brokers="192.168.17.108:9092"
    val props=new Properties()
    //把broker put进去
    props.put("metadata.broker.list",brokers)
    //把kafka编译器放进去
    props.put("serializer.class","kafka.serializer.StringEncoder")
   //配置kafka的config(配置)
    val kafkaconfig=new ProducerConfig(props)
    val producer=new Producer[String,String](kafkaconfig)
   //配置spark的config
    val conf=new SparkConf().setAppName("KafkaEventProducer").setMaster("local[2]")
    val sc=new SparkContext(conf)
    //从path中加载数据
//    val filePath="data/shuju.txt"
    val filePath="c://test//shuju.txt"
    //加载数据并进行切分
    val records=sc.textFile(filePath)
       .filter(!_.startsWith(";"))
          .map(_.split(",")).collect()
    //对数据进行预处理形成Json形式
    for(temp <-records)
      {
        val event=new JSONObject()
        //因为要put很多数据,这样看起来很规范
        event
          .put("camer_id",temp(0))    //相机编号
          .put("car_id",temp(2))      //车牌号
          .put("event_time",temp(4))  //时间
          .put("car_speed",temp(6))   //速度
          .put("car_speed",temp(13))  //车道编号
        //生产event信息 topic 是往哪个topic中生产数据 event.toString是生产的真正的内容
        producer.send(new KeyedMessage[String,String](topic,event.toString))
        println("Message Sent:  "+event)
        Thread.sleep(200) //休息200微秒
      }


  sc.stop()
  }
}

説明:3つのjarコモンズ(pool2-2.2.jar、jedis-2.6.1.jar、json-lib-2.3-jdk15.jar)が必要です

----サンプルデータを以下に示します。5行のデータのみ

'310999003001', '3109990030010220140820141230292','00000000','','2017-08-20 14:09:35','0',255,'SN',  0.00,'4','','310999','310999003001','02','','','2','','','2017-08-20 14:12:30','2017-08-20 14:16:13',0,0,'2017-08-21 18:50:05','','',' '
'310999003102', '3109990031020220140820141230266','粤BT96V3','','2017-08-20 14:09:35','0',21,'NS',  0.00,'2','','310999','310999003102','02','','','2','','','2017-08-20 14:12:30','2017-08-20 14:16:13',0,0,'2017-08-21 18:50:05','','',' '
'310999000106', '3109990001060120140820141230316','沪F35253','','2017-08-20 14:09:35','0',57,'OR',  0.00,'2','','310999','310999000106','01','','','2','','','2017-08-20 14:12:30','2017-08-20 14:16:13',0,0,'2017-08-21 18:50:05','','',' '
'310999000205', '3109990002050220140820141230954','沪FN0708','','2017-08-20 14:09:35','0',33,'IR',  0.00,'2','','310999','310999000205','02','','','2','','','2017-08-20 14:12:30','2017-08-20 14:16:13',0,0,'2017-08-21 18:50:05','','',' '
'310999000205', '3109990002050120140820141230975','皖N94028','','2017-08-20 14:09:35','0',40,'IR',  0.00,'2','','310999','310999000205','01','','','2','','','2017-08-20 14:12:30','2017-08-20 14:16:13',0,0,'2017-08-21 18:50:05','','',' '

サンプルデータの各フィールドの定義は次のとおりです。

sjkk_gcjl 所有字段名称解释:
    
    kkbh   卡口编号                     
    jlbh   记录编号                     
    hphm   号牌号码                     
    hpzl   号牌种类                     
    jgsj   经过时间                     
    xszt   行驶状态                     
    clsd   车辆速度                     
    cdfx   车道方向                     
    cwkc   车身长度                     
    hpys   号牌颜色                     
    cllx   车辆类型                     
    xzqh   行政区号                     
    sbbh   设备编号                     
    cdbh   车道编号                     
    csys   车身颜色                     
    clpp   车辆品牌                     
    tplx   图片类型                     
    tztp   特征图片                     
    qjtp   全景图片                     
    rksj   入库时间                     
    yzsj   //这个字段暂时没用           
    sjcz   时间差值                     
    ylzd1  预留字段1                    
    ylzd2  预留字段2                    
    ylzd3  预留字段3                    
    ylzd4  预留字段4                    
    ylzd5  预留字段5                    

kafkaを起動し、car_eventのトピックを作成します

[root@hadoop ~]# start-kafka.sh 
[root@hadoop ~]# kafka-topics.sh --create --zookeeper hadoop:2181 --topic car_event --partitions 1 --replication-factor 1
Created topic "car_event".

car_eventのトピックを開始する消費者、このステップはデータを確認するためだけのものです。スクリーンショットを以下に示します。

注:マウスの表示は常に待機しています。これは、SparkSteamがまだKafkaにデータを送信しておらず、トピックにデータがなく、コンシューマーがもちろん空であるためです。

アイデアでssプログラムを開始します。背景のスクリーンショットは次のとおりです。

説明:ご覧のとおり、データが表示されています。ファイルには5つのデータしかなく、すべてKafkaに入力されているため、実行ボタンは緑色です。データ量が多い場合は、実行ボタンを赤(常に実行)にする必要があります。

kafkaの消費者を表示します。スクリーンショットは次のとおりです。

注:ご覧のとおり、kafkaの消費者はトピックのデータを示しています

おすすめ

転載: blog.csdn.net/zhaoxiangchong/article/details/78379927