Windows下idea远程调试Spark Streaming接收Kafka数据

大数据集群环境说明

Spark版本:2.0.2
Kafka版本:0.9.1
Linux系统:CentOS6.5

场景

做Spark Streaming开发,在Win7下使用IDE进行开发,希望在本地IDEA上远程连接服务器上的大数据集群进行调试,这里仅连服务器上的Kafka和Zookeeper服务

  • 我这里在Windows下使用IDEA进行开发,相信本文章对Eclipse的朋友也有帮助
  • 服务器上的大数据集群已经全部安装好了(Hadoop、Hive、HBase、Spark、Flume、Sqoop、Zookeeper、Hue等等)
  • 这里Kafka的安装、Spark的安装、以及其他大数据服务的安装不再赘述

操作

第一步:后台启动Kafka

nohup bin/kafka-server-start.sh config/server.properties &

第二步:启动Kafka的Producer(cm02.spark.com为集群中一台服务器的主机名(映射了IP地址))

bin/kafka-console-producer.sh --broker-list cm02.spark.com:9092 --topic test

第三步:下面是一个简单的Spark Streaming Demo

import org.apache.spark.SparkConf

import org.apache.spark.streaming.kafka.KafkaUtils

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

/**

  * Demo

  * Spark Streaming远程连接Zookeeper读取Kafka的数据进行单词统计

  * Created by CaoWeiDong on 2017-11-22.

  */

object ScalaKafkaWordCount {

    def main(args: Array[String]): Unit = {

        //Zookeeper连接地址

        val zkQuorum = "

[cm01.spark.com:2181,cm02.spark.com:2181,cm03.spark.com:2181"](http://cm01.spark.com:2181,cm02.spark.com:2181,cm03.spark.com:2181%22/)

        //Kafka连接信息(Topic Partition)

        val topicMap = Map("test" -> 1)

        //conf

        val conf = new SparkConf()

            .setAppName(ScalaKafkaWordCount.getClass.getSimpleName)

            .setMaster("local[4]")

        //SparkStreaming

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

        //SparkStreaming连接Kafka

        val lines = KafkaUtils.createStream(ssc, zkQuorum, "sss", topicMap)

            .map(_._2)

        //以空格进行切分,统计单词个数

        val words = lines.flatMap(_.split(" "))

        val wordCounts = words.map(key => (key, 1L))

            .reduceByKey(_ + _)

        //打印

        wordCounts.print()

        //启动

        ssc.start()

        ssc.awaitTermination()

    }

}

第四步:运行Demo

Windows下idea远程调试Spark Streaming接收Kafka数据_第1张图片
运行Spark-Streaming的Demo.png

第五步:准备数据

Hadoop Spark Kafka Flume
Hive HBase Flink Sqoop
Mapreduce yarn hdfs
Spark Storm Kylin Sqoop HBase Hadoop
Kafka Kylin hdfs Flume

将上面的数据贴到Kafka的Producer


Windows下idea远程调试Spark Streaming接收Kafka数据_第2张图片
为Kafka准备数据.png

第六步:IDEA下Spark Streaming的运行结果

Windows下idea远程调试Spark Streaming接收Kafka数据_第3张图片
Spark-Streaming统计Kafka生产的数据.png

最后一步:总结

其实这在Windows下IDEA下Spark Streaming通过local模式进行调试最关键的一行代码是:
val conf = new SparkConf()
.setAppName(ScalaKafkaWordCount.getClass.getSimpleName)
.setMaster("local[4]")

原来的时候我local的进程数是1,虽然运行时一直没有报错,但是Kafka生产的数据一直消费不了
后来调成4了以后就可以了,发现是因为Spark Streaming需要开启多个进程,一个进程接收数据,一个处理数据,一开始调成2不行,然后调成4就可以了

你可能感兴趣的:(Windows下idea远程调试Spark Streaming接收Kafka数据)