SparkStreaming整合kafka编程
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用于测试:
- import org.apache.spark.streaming.StreamingContext
 - import org.apache.spark.SparkConf
 - import org.apache.spark.streaming.kafka.KafkaUtils
 - import org.apache.spark.streaming.Seconds
 - import org.apache.spark.streaming.Minutes
 - import org.apache.spark.SparkContext
 - import kafka.serializer.StringDecoder
 - object KafkaWordCount {
 - def main(args: Array[String]) {
 - val sparkConf = new SparkConf().setAppName("KafkaWordCount").setMaster("local[2]")
 - sparkConf.set("spark.port.maxRetries","128")
 - val ssc = new StreamingContext(sparkConf, Seconds(2))
 - ssc.checkpoint("hdfs://192.168.168.200:9000/checkpoint")
 - val zkQuorum = "192.168.168.200:2181"
 - val group = "test-group"
 - val topics = "test"
 - val numThreads = 1
 - val topicMap = topics.split(",").map((_, numThreads.toInt)).toMap
 - val lines = KafkaUtils.createStream(ssc, zkQuorum, group, topicMap).map(_._2)
 - val words = lines.flatMap(_.split(" "))
 - val wordCounts = words.map(x => (x, 1L))
 - .reduceByKeyAndWindow(_ + _, _ - _, Minutes(10), Seconds(2), 2)
 - wordCounts.print()
 - ssc.start()
 - ssc.awaitTermination()
 - }
 - }
 
如图:
启动spark集群和kafka集群,默认已经开启,默认kafka有test主题,这是默认要会的,在这里不在详述。
运行成功,如图:
- SLF4J: Class path contains multiple SLF4J bindings.
 - 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]
 - 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]
 - SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
 - SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
 - -------------------------------------------
 - Time: 1499667652000 ms
 - -------------------------------------------
 - -------------------------------------------
 - Time: 1499667654000 ms
 - -------------------------------------------
 - -------------------------------------------
 - Time: 1499667656000 ms
 - -------------------------------------------
 
4、接收kafka的主题消息
启动一个kafka的生产者客户端:
- [root@master ~]# kafka-console-producer.sh --broker-list 192.168.168.200:9092 --topic test
 - test success
 - spark
 - kafka
 
运行日志如下:
- -------------------------------------------
 - Time: 1499667830000 ms
 - -------------------------------------------
 - -------------------------------------------
 - Time: 1499667832000 ms
 - -------------------------------------------
 - (test,1)
 - (success,1)
 - -------------------------------------------
 - Time: 1499667834000 ms
 - -------------------------------------------
 - (test,1)
 - (success,1)
 - -------------------------------------------
 - Time: 1499667836000 ms
 - -------------------------------------------
 - (test,1)
 - (spark,1)
 - (success,1)
 - -------------------------------------------
 - Time: 1499667838000 ms
 - -------------------------------------------
 - (kafka,1)
 - (test,1)
 - (spark,1)
 - (success,1)
 
5、sparkStreaming收不到kafka主题消息
如果出现kakfa的消费者客户端可以收到消息,而spark的消费者客户端收不到消息,后台也没有报错,那么要仔细检查kafka_home/conf目录下的server.properties,有没有配置:
- ############################# Socket Server Settings #############################
 - # The port the socket server listens on
 - port=9092
 - # Hostname the broker will bind to. If not set, the server will bind to all interfaces
 - host.name=192.168.168.200
 
6、sbtassembly打包代码并上传到spark运行
可参考以下资料:
SparkStreaming整合kafka编程的更多相关文章
- 基于Java+SparkStreaming整合kafka编程
		
一.下载依赖jar包 具体可以参考:SparkStreaming整合kafka编程 二.创建Java工程 太简单,略. 三.实际例子 spark的安装包里面有好多例子,具体路径:spark-2.1.1 ...
 - 大数据学习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 ...
 - SparkStreaming 整合kafka Demo
		
这里使用的是低级API,因为高级API非常不好用,需要繁琐的配置,也不够自动化,却和低级API的效果一样,所以这里以低级API做演示 你得有zookeeper和kafka 我这里是3台节点主机 架构图 ...
 - scala  spark-streaming整合kafka (spark 2.3 kafka 0.10)
		
Maven组件如下: ) { System.err.println() } StreamingExamples.setStreamingLogLevels() )) ) { System.) } )) ...
 - 大数据学习——SparkStreaming整合Kafka完成网站点击流实时统计
		
1.安装并配置zk 2.安装并配置Kafka 3.启动zk 4.启动Kafka 5.创建topic [root@mini3 kafka]# bin/kafka-console-producer. -- ...
 - Spark之   Spark Streaming整合kafka(并演示reduceByKeyAndWindow、updateStateByKey算子使用)
		
Kafka0.8版本基于receiver接受器去接受kafka topic中的数据(并演示reduceByKeyAndWindow的使用) 依赖 <dependency> <grou ...
 - 【Spark】SparkStreaming和Kafka的整合
		
文章目录 Streaming和Kafka整合 概述 使用0.8版本下Receiver DStream接收数据进行消费 步骤 一.启动Kafka集群 二.创建maven工程,导入jar包 三.创建一个k ...
 - 图解SparkStreaming与Kafka的整合,这些细节大家要注意!
		
前言 老刘是一名即将找工作的研二学生,写博客一方面是复习总结大数据开发的知识点,一方面是希望帮助更多自学的小伙伴.由于老刘是自学大数据开发,肯定会存在一些不足,还希望大家能够批评指正,让我们一起进步! ...
 - SparkStreaming和Kafka基于Direct Approach如何管理offset实现exactly once
		
在之前的文章<解析SparkStreaming和Kafka集成的两种方式>中已详细介绍SparkStreaming和Kafka集成主要有Receiver based Approach和Di ...
 
随机推荐
- python day08作业答案
			
1. a f=open('11.txt','r',encoding='utf-8') a=f.read() print(a) f.flush() f.close() b. f=open('11.txt ...
 - nwjs 解决手指可滑动问题
			
package.json 中添加: "chromium-args": "--touch-events --enable-touch-drag-drop",
 - codeforce 839A  Arya and Bran(水题)
			
Bran and his older sister Arya are from the same house. Bran like candies so much, so Arya is going ...
 - HDU 6055 17多校 Regular polygon(计算几何)
			
Problem Description On a two-dimensional plane, give you n integer points. Your task is to figure ou ...
 - java问题排查工具之一板斧jstack——使用 jstack 定位 java进程CPU过高的问题
			
jstack主要用来查看某个Java进程内的线程堆栈信息.语法格式如下: jstack [option] pid jstack [option] executable core jstack [opt ...
 - cygwin 解压 tar.xz压缩包
			
今天第一次接触到Cygwin,啊,不懂Linux,, 解压分为三个步骤. 第一步,进入压缩包所在的文件目录: cd e:\ >(左边会弹出这个符号,我以为后面的解压要在这里写,其实不是,要再按一 ...
 - 对ajax中数据的得到以及绑定的认识
			
1.将后台得到的数据绑定到datagrid为例: 第一种是: 后台得到的数据直接绑定到datagrid上面,如下图: 这样操作的好处在于可以使界面比较简洁. 第二种是将得到的数据作为参数的形式绑定到d ...
 - JavaBasic_02
			
Java的基础框架 3W:What How Why What:一个东西是什么,具备什么样的功能 怎么用 How: 怎么做?功能如何实现 读源代码(jdk)->学习很多,优雅的编程技巧建立在wha ...
 - 纯C:AES256
			
尼玛的WordPress把格式全搞乱了 aes256.h #ifndef _AES256_H_ #define _AES256_H_ #include <stdio.h> #include ...
 - mask-code-python
			
tf.sqeeze: 给定张量输入,此操作返回相同类型的张量,并删除所有尺寸为1的尺寸. 如果不想删除所有尺寸1尺寸,可以通过指定squeeze_dims来删除特定尺寸1尺寸.如果不想删除所有大小是1 ...