1、下载spark-streaming-kafka插件包

由于Linux集群环境我使用spark是spark-2.1.1-bin-hadoop2.7,kafka是kafka_2.11-0.8.2.1,所以我下载的是spark-streaming-kafka-0-8_2.11-2.1.1.jar。

官网下载地址:http://mvnrepository.com/artifact/org.apache.spark/spark-streaming-kafka-0-8_2.11/2.1.1

百度云下载地址:链接:http://pan.baidu.com/s/1o83DOHO 密码:2dgx

2、整合spark和kafka的jar包

2.1添加spark-streaming-kafka插件包

新建一个lib目录,首先把1步骤下载的spark-streaming-kafka-0-8_2.11-2.1.1.jar放进去

如图:

2.2添加spark依赖包

找到spark-2.1.1-bin-hadoop2.7/jars目录下所有的jar包,如图:

把spark-2.1.1-bin-hadoop2.7/jars目录下所有的jar包复制到上述新建的lib目录下,如图:

2.3添加kafka依赖包

找到kafka_2.11-0.8.2.1/libs目录下所有的jar包,如图:

把kafka_2.11-0.8.2.1/libs目录下所有的jar包复制到上述新建的lib目录下,如图:

3、新建测试工程

新建scala project,引用上述lib目录下的所有jar包;新建一个KafkaWordCount.scala用于测试:


  1. import org.apache.spark.streaming.StreamingContext
  2. import org.apache.spark.SparkConf
  3. import org.apache.spark.streaming.kafka.KafkaUtils
  4. import org.apache.spark.streaming.Seconds
  5. import org.apache.spark.streaming.Minutes
  6. import org.apache.spark.SparkContext
  7. import kafka.serializer.StringDecoder
  8. object KafkaWordCount {
  9. def main(args: Array[String]) {
  10. val sparkConf = new SparkConf().setAppName("KafkaWordCount").setMaster("local[2]")
  11. sparkConf.set("spark.port.maxRetries","128")
  12. val ssc = new StreamingContext(sparkConf, Seconds(2))
  13. ssc.checkpoint("hdfs://192.168.168.200:9000/checkpoint")
  14. val zkQuorum = "192.168.168.200:2181"
  15. val group = "test-group"
  16. val topics = "test"
  17. val numThreads = 1
  18. val topicMap = topics.split(",").map((_, numThreads.toInt)).toMap
  19. val lines = KafkaUtils.createStream(ssc, zkQuorum, group, topicMap).map(_._2)
  20. val words = lines.flatMap(_.split(" "))
  21. val wordCounts = words.map(x => (x, 1L))
  22. .reduceByKeyAndWindow(_ + _, _ - _, Minutes(10), Seconds(2), 2)
  23. wordCounts.print()
  24. ssc.start()
  25. ssc.awaitTermination()
  26. }
  27. }

如图:

启动spark集群和kafka集群,默认已经开启,默认kafka有test主题,这是默认要会的,在这里不在详述。

运行成功,如图:


  1. SLF4J: Class path contains multiple SLF4J bindings.
  2. SLF4J: Found binding in [jar:file:/I:/001sourceCode/020SparkStreaming/%e5%a4%a7%e6%95%b0%e6%8d%ae%e5%bc%80%e5%8f%91%e6%96%b9%e6%a1%88%e8%b5%84%e6%96%99%ef%bc%88%e5%a4%a9%e7%bb%b4%e5%b0%94%ef%bc%89/%e5%bc%80%e5%8f%91%e6%89%80%e9%9c%80jar%e5%8c%85/lib/slf4j-log4j12-1.7.6.jar!/org/slf4j/impl/StaticLoggerBinder.class]
  3. SLF4J: Found binding in [jar:file:/I:/001sourceCode/020SparkStreaming/%e5%a4%a7%e6%95%b0%e6%8d%ae%e5%bc%80%e5%8f%91%e6%96%b9%e6%a1%88%e8%b5%84%e6%96%99%ef%bc%88%e5%a4%a9%e7%bb%b4%e5%b0%94%ef%bc%89/%e5%bc%80%e5%8f%91%e6%89%80%e9%9c%80jar%e5%8c%85/lib/slf4j-log4j12-1.7.16.jar!/org/slf4j/impl/StaticLoggerBinder.class]
  4. SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
  5. SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
  6. -------------------------------------------
  7. Time: 1499667652000 ms
  8. -------------------------------------------
  9. -------------------------------------------
  10. Time: 1499667654000 ms
  11. -------------------------------------------
  12. -------------------------------------------
  13. Time: 1499667656000 ms
  14. -------------------------------------------

4、接收kafka的主题消息

启动一个kafka的生产者客户端:


  1. [root@master ~]# kafka-console-producer.sh --broker-list 192.168.168.200:9092 --topic test
  2. test success
  3. spark
  4. kafka

运行日志如下:


  1. -------------------------------------------
  2. Time: 1499667830000 ms
  3. -------------------------------------------
  4. -------------------------------------------
  5. Time: 1499667832000 ms
  6. -------------------------------------------
  7. (test,1)
  8. (success,1)
  9. -------------------------------------------
  10. Time: 1499667834000 ms
  11. -------------------------------------------
  12. (test,1)
  13. (success,1)
  14. -------------------------------------------
  15. Time: 1499667836000 ms
  16. -------------------------------------------
  17. (test,1)
  18. (spark,1)
  19. (success,1)
  20. -------------------------------------------
  21. Time: 1499667838000 ms
  22. -------------------------------------------
  23. (kafka,1)
  24. (test,1)
  25. (spark,1)
  26. (success,1)

5、sparkStreaming收不到kafka主题消息

如果出现kakfa的消费者客户端可以收到消息,而spark的消费者客户端收不到消息,后台也没有报错,那么要仔细检查kafka_home/conf目录下的server.properties,有没有配置:


  1. ############################# Socket Server Settings #############################
  2. # The port the socket server listens on
  3. port=9092
  4. # Hostname the broker will bind to. If not set, the server will bind to all interfaces
  5. host.name=192.168.168.200
一定要配置host.name,否则只能在kafk消费客户端收到消息,不能在sparkStreaming创建的topic消息客户端收到。

6、sbtassembly打包代码并上传到spark运行

可参考以下资料:

使用SBT构建Scala项目

本地开发spark代码上传spark集群服务并运行

SparkStreaming整合kafka编程的更多相关文章

  1. 基于Java+SparkStreaming整合kafka编程

    一.下载依赖jar包 具体可以参考:SparkStreaming整合kafka编程 二.创建Java工程 太简单,略. 三.实际例子 spark的安装包里面有好多例子,具体路径:spark-2.1.1 ...

  2. 大数据学习day32-----spark12-----1. sparkstreaming(1.1简介,1.2 sparkstreaming入门程序(统计单词个数,updateStageByKey的用法,1.3 SparkStreaming整合Kafka,1.4 SparkStreaming获取KafkaRDD的偏移量,并将偏移量写入kafka中)

    1. Spark Streaming 1.1 简介(来源:spark官网介绍) Spark Streaming是Spark Core API的扩展,其是支持可伸缩.高吞吐量.容错的实时数据流处理.Sp ...

  3. SparkStreaming 整合kafka Demo

    这里使用的是低级API,因为高级API非常不好用,需要繁琐的配置,也不够自动化,却和低级API的效果一样,所以这里以低级API做演示 你得有zookeeper和kafka 我这里是3台节点主机 架构图 ...

  4. scala spark-streaming整合kafka (spark 2.3 kafka 0.10)

    Maven组件如下: ) { System.err.println() } StreamingExamples.setStreamingLogLevels() )) ) { System.) } )) ...

  5. 大数据学习——SparkStreaming整合Kafka完成网站点击流实时统计

    1.安装并配置zk 2.安装并配置Kafka 3.启动zk 4.启动Kafka 5.创建topic [root@mini3 kafka]# bin/kafka-console-producer. -- ...

  6. Spark之 Spark Streaming整合kafka(并演示reduceByKeyAndWindow、updateStateByKey算子使用)

    Kafka0.8版本基于receiver接受器去接受kafka topic中的数据(并演示reduceByKeyAndWindow的使用) 依赖 <dependency> <grou ...

  7. 【Spark】SparkStreaming和Kafka的整合

    文章目录 Streaming和Kafka整合 概述 使用0.8版本下Receiver DStream接收数据进行消费 步骤 一.启动Kafka集群 二.创建maven工程,导入jar包 三.创建一个k ...

  8. 图解SparkStreaming与Kafka的整合,这些细节大家要注意!

    前言 老刘是一名即将找工作的研二学生,写博客一方面是复习总结大数据开发的知识点,一方面是希望帮助更多自学的小伙伴.由于老刘是自学大数据开发,肯定会存在一些不足,还希望大家能够批评指正,让我们一起进步! ...

  9. SparkStreaming和Kafka基于Direct Approach如何管理offset实现exactly once

    在之前的文章<解析SparkStreaming和Kafka集成的两种方式>中已详细介绍SparkStreaming和Kafka集成主要有Receiver based Approach和Di ...

随机推荐

  1. 2.14 加载Firefox配置

    2.14 加载Firefox配置(略,已在2.1.8讲过,请查阅2.1.8节课) 回到顶部 2.14-1 加载Chrome配置 一.加载Chrome配置chrome加载配置方法,只需改下面一个地方,u ...

  2. 九度OJ1205题-递归求解问题

    题目1205:N阶楼梯上楼问题 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:5887 解决:2446 题目描述: N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式.(要求采用 ...

  3. lesson3 overfitting -fastai

    VGG:3*3Imagenet:7*7,9*9论文中证明3*3更胜一筹,但是用多少并没有定论微调:删掉模型的中间只对最后一层微调:model.pop,就删掉了最后一层 如何决定训练多少层?:·看论文上 ...

  4. 数据库设计画图工具powerdesigner

    powerdesigner 教程:http://jingyan.baidu.com/article/bea41d43684fa4b4c51be6cf.html

  5. windows错误:错误0x80070091 目录不是空的

    错误: Window 下目录无法删除,提示 “ 错误0x80070091 目录不是空的 ” 解决: 1.开始菜单>附件>命令提示符>右键>以管理员身份运行 2.删除文件:(如 ...

  6. hihocoder1490 Tree Restoration 模拟

    There is a tree of N nodes which are numbered from 1 to N. Unfortunately, its edges are missing so w ...

  7. django实现api跨域请求访问

    第一步:安装 django-cors-headers pip install django-cors-headers 第二步:配置settings.py文件 --------------------- ...

  8. python——psutil的使用(获取进程信息)

    import psutil psutil.pids() [1, 2, 3, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 26, 27, 28, 2 ...

  9. tile38 一款开源的geo 数据库

    tile38 是基于golang 编写的geo 数据库,支持地理空间索引.实时地理围栏,同时也支持leader-flower 的部署模型 备注: 下边测试一个简单的地理围栏功能 环境准备 docker ...

  10. C# to IL 4 Keywords and Operators(关键字和操作符)

    Code that is placed after the return statement never gets executed. In the first programgiven below, ...