12 Spark Streaming作为kafka的消费者【scala】

前面我们使用Spark Streaming去监听了端口数据,接下来我们将使用Spark Streaming作为kafka的消费者。

1 系统、软件以及前提约束

  • CentOS 7 64 工作站 作者的机子ip是192.168.100.200,主机名为danji,请读者根据自己实际情况设置
  • 已完成spark访问Hbase
    https://www.jianshu.com/p/6f7c89a62173
  • 已安装Kafka
    https://www.jianshu.com/p/1a7b9970d073
  • Idea 2018.1
  • 为去除权限对操作的影响,所有操作都以root进行,Spark启动,Hadoop启动。

2 操作

  • 1 在Win10的Idea中创建一个sbt项目
  • 2 修改其中的build.sbt
name := "sbt-spark"
version := "0.1"
scalaVersion := "2.11.8"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.1.0"
libraryDependencies += "org.apache.spark" % "spark-streaming_2.11" % "2.1.0"
libraryDependencies += "org.apache.spark" % "spark-streaming-kafka-0-8_2.11" % "2.1.0"
  • 3 在src/main/scala中新建一个SparkStreamingAsKafkaConsumer.scala
import org.apache.spark.SparkConf
import org.apache.spark.streaming._
import org.apache.spark.streaming.kafka.KafkaUtils
object SparkStreamingAsKafkaConsumer{
  def main(args:Array[String]){
    val sc = new SparkConf().setAppName("KafkaWordCount").setMaster("local[2]")
    val ssc = new StreamingContext(sc,Seconds(10))
    ssc.checkpoint("file:///root/hadoop/checkpoint")
    val zkQuorum = "localhost:2181" //Zookeeper服务器地址
    val group = "1"  //topic所在的group
    val topics = "spark"  //topics的名称
    val numThreads = 1  //每个topic的分区数
    val topicMap =topics.split(",").map((_,numThreads.toInt)).toMap
    val lineMap = KafkaUtils.createStream(ssc,zkQuorum,group,topicMap)
    val lines = lineMap.map(_._2)
    val words = lines.flatMap(_.split(" "))
    val pair = words.map(x => (x,1))
    val wordCounts = pair.reduceByKeyAndWindow(_ + _,_ - _,Minutes(2),Seconds(10),2) //这行代码的含义在下一节的窗口转换操作中会有介绍
    wordCounts.print
    ssc.start
    ssc.awaitTermination
  }
}
  • 4 使用sbt打包,生成sbt-spark_2.11-0.1.jar,并上传到linux的/root目录下
  • 5 使用Xshell登录到linux,拷贝jar包
cd /root/spark-2.2.1-bin-hadoop2.7/jars
mkdir kafka
cd kafka
cp /root/kafka_2.11-2.2.1/libs/* .

下载jar包:
http://mvnrepository.com/artifact/org.apache.spark/spark-streaming-kafka-0-8_2.11/2.1.0
将此jar包上传至/root/spark-2.2.1-bin-hadoop2.7/jars/kafka

  • 6 启动Kafka服务以及消息生产者
cd /root/kafka_2.11-2.2.1/bin
# 启动ZK服务
./zookeeper-server-start.sh ../config/zookeeper.properties &
# 启动Kafka服务
./kafka-server-start.sh ../config/server.properties
# 新打开一个xshell窗口,再次连接到linux
cd /root/kafka_2.11-2.2.1/bin
# 创建topic
./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic spark & 
# 启动生产者
./kafka-console-producer.sh --broker-list localhost:9092 --topic spark 
  • 7 提交任务到Spark
    新打开一个Xshell窗口,再次连接到linux
cd /root/spark-2.2.1-bin-hadoop2.7/bin
./spark-submit --driver-class-path /root/spark-2.2.1-bin-hadoop2.7/jars/*:/root/spark-2.2.1-bin-hadoop2.7/jars/kafka/* --class SparkStreamingAsKafkaConsumer  /root/sbt-spark_2.11-0.1.jar
  • 8 测试
    在Kafka的消息生产者窗口不断输入字符串,查看提交Spark任务的窗口,每隔十秒会对输入的字符串进行词频统计。
    以上就是Spark Streaming作为Kafka消息消费者的过程。

你可能感兴趣的:(12 Spark Streaming作为kafka的消费者【scala】)