基于Java+SparkStreaming整合kafka编程
一、下载依赖jar包
具体可以参考:SparkStreaming整合kafka编程
二、创建Java工程
太简单,略。
三、实际例子
spark的安装包里面有好多例子,具体路径:spark-2.1.1-bin-hadoop2.7\examples。
JavaDirectKafkaWordCount.java
- package com.spark.test;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.Arrays;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.Set;
- import java.util.regex.Pattern;
- import scala.Tuple2;
- import kafka.serializer.StringDecoder;
- import org.apache.spark.SparkConf;
- import org.apache.spark.api.java.function.*;
- import org.apache.spark.streaming.api.java.*;
- import org.apache.spark.streaming.kafka.KafkaUtils;
- import org.apache.spark.streaming.Durations;
- public class JavaDirectKafkaWordCount {
- public static void main(String[] args) throws Exception {
- //String brokers = args[0];
- // String topics = args[1];
- // Create context with a 2 seconds batch interval
- /**
- * setMaster("local[2]"),至少要指定两个线程,一条用于用于接收消息,一条线程用于处理消息
- */
- SparkConf sparkConf = new SparkConf().setAppName("JavaDirectKafkaWordCount").setMaster("local[2]");
- JavaStreamingContext jssc = new JavaStreamingContext(sparkConf, Durations.seconds(2));
- Set<String> topicsSet = new HashSet<>(Arrays.asList("test"));
- Map<String, String> kafkaParams = new HashMap<>();
- kafkaParams.put("metadata.broker.list", "192.168.168.200:9092");
- // Create direct kafka stream with brokers and topics
- JavaPairInputDStream<String, String> messages = KafkaUtils.createDirectStream(
- jssc,
- String.class,
- String.class,
- StringDecoder.class,
- StringDecoder.class,
- kafkaParams,
- topicsSet
- );
- // Get the lines, split them into words, count the words and print
- JavaDStream<String> lines = messages.map(new Function<Tuple2<String, String>, String>() {
- @Override
- public String call(Tuple2<String, String> tuple2) {
- return tuple2._2();
- }
- });
- JavaDStream<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
- @Override
- public Iterator<String> call(String line) {
- return Arrays.asList(line.split(" ")).iterator();
- }
- });
- JavaPairDStream<String, Integer> wordCounts = words.mapToPair(
- new PairFunction<String, String, Integer>() {
- @Override
- public Tuple2<String, Integer> call(String s) {
- return new Tuple2<>(s, 1);
- }
- }).reduceByKey(
- new Function2<Integer, Integer, Integer>() {
- @Override
- public Integer call(Integer i1, Integer i2) {
- return i1 + i2;
- }
- });
- wordCounts.print();
- // Start the computation
- jssc.start();
- jssc.awaitTermination();
- }
- }
JavaKafkaWordCount.java
- package com.spark.test;
- import java.util.Arrays;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.HashMap;
- import java.util.regex.Pattern;
- import scala.Tuple2;
- import org.apache.spark.SparkConf;
- import org.apache.spark.api.java.function.FlatMapFunction;
- import org.apache.spark.api.java.function.Function;
- import org.apache.spark.api.java.function.Function2;
- import org.apache.spark.api.java.function.PairFunction;
- import org.apache.spark.streaming.Duration;
- import org.apache.spark.streaming.api.java.JavaDStream;
- import org.apache.spark.streaming.api.java.JavaPairDStream;
- import org.apache.spark.streaming.api.java.JavaPairReceiverInputDStream;
- import org.apache.spark.streaming.api.java.JavaStreamingContext;
- import org.apache.spark.streaming.kafka.KafkaUtils;
- public class JavaKafkaWordCount{
- public static void main(String[] args) throws InterruptedException {
- SparkConf sparkConf = new SparkConf().setAppName("JavaKafkaWordCount").setMaster("local[2]");
- // Create the context with 2 seconds batch size
- JavaStreamingContext jssc = new JavaStreamingContext(sparkConf, new Duration(2000));
- int numThreads = Integer.parseInt("2");
- Map<String, Integer> topicMap = new HashMap<>();
- String[] topics = "test".split(",");
- for (String topic: topics) {
- topicMap.put(topic, numThreads);
- }
- JavaPairReceiverInputDStream<String, String> messages =
- KafkaUtils.createStream(jssc, "192.168.168.200:2181", "test-group", topicMap);
- JavaDStream<String> lines = messages.map(new Function<Tuple2<String, String>, String>() {
- @Override
- public String call(Tuple2<String, String> tuple2) {
- return tuple2._2();
- }
- });
- JavaDStream<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
- @Override
- public Iterator<String> call(String line) {
- return Arrays.asList(line.split(" ")).iterator();
- }
- });
- JavaPairDStream<String, Integer> wordCounts = words.mapToPair(
- new PairFunction<String, String, Integer>() {
- @Override
- public Tuple2<String, Integer> call(String s) {
- return new Tuple2<>(s, 1);
- }
- }).reduceByKey(new Function2<Integer, Integer, Integer>() {
- @Override
- public Integer call(Integer i1, Integer i2) {
- return i1 + i2;
- }
- });
- wordCounts.print();
- jssc.start();
- jssc.awaitTermination();
- }
- }
JavaLocalWordCount.java
- package com.spark.test;
- import java.util.Arrays;
- import java.util.Iterator;
- import org.apache.spark.SparkConf;
- import org.apache.spark.api.java.JavaPairRDD;
- import org.apache.spark.api.java.JavaRDD;
- import org.apache.spark.api.java.JavaSparkContext;
- import org.apache.spark.api.java.function.FlatMapFunction;
- import org.apache.spark.api.java.function.Function2;
- import org.apache.spark.api.java.function.PairFunction;
- import org.apache.spark.api.java.function.VoidFunction;
- import scala.Tuple2;
- public class JavaLocalWordCount {
- public static void main(String[] args) {
- /**
- * 第一步,创建Spark的配置对象SparkConf,设置Spark程序的运行时的配置信息,
- * 例如说通过setMaster来设置程序要链接的Spark集群的Master的URL,
- * 如果设置为local,则代表Spark程序在本地运行,特别适合于机器配置较差的情况
- */
- SparkConf sparkConf = new SparkConf().setAppName("LocalWordCountByJava").setMaster("local");
- /**
- * 第二步,创建SparkContext对象
- * SparkContext是Spark程序所有功能的唯一入口,无论是采用Scala,java,python,R等都
- * 必须有一个SparkContext(不同语言具体类名称不同,如果是Java的话,则为JavaSparkContext)
- * 同时还会负责Spark程序在Master注册程序等
- * SparkContext是整个Spark应用程序至关重要的一个对象
- */
- JavaSparkContext jsc = new JavaSparkContext(sparkConf);//其底层实际上是Scala的SparkContext
- /**
- * 第三步,根据具体的数据来源(HDFS,HBase,Local,FS,DB,S3等),通过JavaSparkContext来创建JavaRDD
- * JavaRDD的创建方式有三种:根据外部数据来源(例如HDFS),
- * 根据Scala集合,由其他的RDD操作数据会将RDD划分成一系列Partition,
- * 分配到每个Partition的数据属于一个Task处理范畴
- */
- JavaRDD<String> lines = jsc.textFile("words.txt");
- //如果是Scala,由于SAM转化,所以可以写成val words=lines.flatMap{line =>line.split(" ")}
- JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
- @Override
- public Iterator<String> call(String line) {
- return Arrays.asList(line.split(" ")).iterator();
- }
- });
- /**
- * 第4步:对初始的JavaRDD进行Transformation级别的处理,例如map,filter等高阶函数等的编程,来进行具体的数据计算
- * 第4.1步:在单词拆分的基础上对每个单词实例进行计数为1,也就是word =>(word,1)
- */
- JavaPairRDD<String, Integer> pairs = words.mapToPair(new PairFunction<String, String, Integer>() {
- public Tuple2<String, Integer> call(String word) throws Exception{
- return new Tuple2<String, Integer>(word, 1);
- }
- });
- /**
- * 统计总次数
- */
- JavaPairRDD<String,Integer> wordCount=pairs.reduceByKey(new Function2<Integer,Integer,Integer>()
- {
- public Integer call(Integer v1,Integer v2)throws Exception
- {
- return v1+v2;
- }
- });
- wordCount.foreach(new VoidFunction<Tuple2<String,Integer>>(){
- public void call(Tuple2<String,Integer> pairs) throws Exception {
- System.out.println(pairs._1()+":"+pairs._2());
- }
- });
- jsc.close();
- }
- }
JavaClusterWordCount.java
- package com.spark.test;
- import java.util.Arrays;
- import java.util.Iterator;
- import org.apache.spark.SparkConf;
- import org.apache.spark.api.java.JavaPairRDD;
- import org.apache.spark.api.java.JavaRDD;
- import org.apache.spark.api.java.JavaSparkContext;
- import org.apache.spark.api.java.function.FlatMapFunction;
- import org.apache.spark.api.java.function.Function2;
- import org.apache.spark.api.java.function.PairFunction;
- import org.apache.spark.api.java.function.VoidFunction;
- import scala.Tuple2;
- public class JavaClusterWordCount {
- public static void main(String[] args) {
- /**
- * 第一步,创建Spark的配置对象SparkConf,设置Spark程序的运行时的配置信息,
- * 例如说通过setMaster来设置程序要链接的Spark集群的Master的URL,
- * 如果设置为local,则代表Spark程序在本地运行,特别适合于机器配置较差的情况
- */
- SparkConf sparkConf = new SparkConf().setAppName("LocalWordCountByJava").setMaster("local");
- /**
- * 第二步,创建SparkContext对象
- * SparkContext是Spark程序所有功能的唯一入口,无论是采用Scala,java,python,R等都
- * 必须有一个SparkContext(不同语言具体类名称不同,如果是Java的话,则为JavaSparkContext)
- * 同时还会负责Spark程序在Master注册程序等
- * SparkContext是整个Spark应用程序至关重要的一个对象
- */
- JavaSparkContext jsc = new JavaSparkContext(sparkConf);//其底层实际上是Scala的SparkContext
- /**
- * 第三步,根据具体的数据来源(HDFS,HBase,Local,FS,DB,S3等),通过JavaSparkContext来创建JavaRDD
- * JavaRDD的创建方式有三种:根据外部数据来源(例如HDFS),
- * 根据Scala集合,由其他的RDD操作数据会将RDD划分成一系列Partition,
- * 分配到每个Partition的数据属于一个Task处理范畴
- */
- JavaRDD<String> lines = jsc.textFile("hdfs://192.168.168.200:9000/input/words.txt");
- //如果是Scala,由于SAM转化,所以可以写成val words=lines.flatMap{line =>line.split(" ")}
- JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
- @Override
- public Iterator<String> call(String line) {
- return Arrays.asList(line.split(" ")).iterator();
- }
- });
- /**
- * 第4步:对初始的JavaRDD进行Transformation级别的处理,例如map,filter等高阶函数等的编程,来进行具体的数据计算
- * 第4.1步:在单词拆分的基础上对每个单词实例进行计数为1,也就是word =>(word,1)
- */
- JavaPairRDD<String, Integer> pairs = words.mapToPair(new PairFunction<String, String, Integer>() {
- public Tuple2<String, Integer> call(String word) throws Exception{
- return new Tuple2<String, Integer>(word, 1);
- }
- });
- /**
- * 统计总次数
- */
- JavaPairRDD<String,Integer> wordCount=pairs.reduceByKey(new Function2<Integer,Integer,Integer>()
- {
- public Integer call(Integer v1,Integer v2)throws Exception
- {
- return v1+v2;
- }
- });
- wordCount.foreach(new VoidFunction<Tuple2<String,Integer>>(){
- public void call(Tuple2<String,Integer> pairs) throws Exception {
- System.out.println(pairs._1()+":"+pairs._2());
- }
- });
- jsc.close();
- }
- }
基于Java+SparkStreaming整合kafka编程的更多相关文章
- SparkStreaming整合kafka编程
1.下载spark-streaming-kafka插件包 由于Linux集群环境我使用spark是spark-2.1.1-bin-hadoop2.7,kafka是kafka_2.11-0.8.2.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 ...
- 基于java的简单Socket编程
1TCP协议与UDP协议 1.1 TCP TCP是(Tranfer Control Protocol)的简称,是一种面向连接的保证可靠传输的协议.通过TCP协议传输 ...
- SparkStreaming 整合kafka Demo
这里使用的是低级API,因为高级API非常不好用,需要繁琐的配置,也不够自动化,却和低级API的效果一样,所以这里以低级API做演示 你得有zookeeper和kafka 我这里是3台节点主机 架构图 ...
- 大数据学习——SparkStreaming整合Kafka完成网站点击流实时统计
1.安装并配置zk 2.安装并配置Kafka 3.启动zk 4.启动Kafka 5.创建topic [root@mini3 kafka]# bin/kafka-console-producer. -- ...
- scala spark-streaming整合kafka (spark 2.3 kafka 0.10)
Maven组件如下: ) { System.err.println() } StreamingExamples.setStreamingLogLevels() )) ) { System.) } )) ...
- 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基于Direct Approach如何管理offset实现exactly once
在之前的文章<解析SparkStreaming和Kafka集成的两种方式>中已详细介绍SparkStreaming和Kafka集成主要有Receiver based Approach和Di ...
随机推荐
- django本身提供了runserver,为什么不能用来部署(runserver与uWSGI的区别)
runserver方法是调试django时经常用到的运行方式,它使用django自带的. WSGI Server 运行,主要在测试和开发使用,并且runserver 开启的方式也是单线程. uWSGI ...
- 识别图片验证码的三种方式(scrapy模拟登陆豆瓣网)
1.通过肉眼识别,然后输入到input里面 from PIL import image Image request.urlretrieve(url,'image') #下载验证码图片 image = ...
- HDU 6092 17多校5 Rikka with Subset(dp+思维)
Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...
- 基于CART的回归和分类任务
CART 是 classification and regression tree 的缩写,即分类与回归树. 博主之前学习的时候有用过决策树来做预测的小例子:机器学习之决策树预测--泰坦尼克号乘客数据 ...
- 【linux基础】如何确定系统使用的Eigen库的版本
path /usr/include/eigen3/Eigen/src/Core/util 文件 Macros.h #define EIGEN_WORLD_VERSION 3 #define EIGEN ...
- [LeetCode&Python] Problem 520. Detect Capital
Given a word, you need to judge whether the usage of capitals in it is right or not. We define the u ...
- jsp中<%两个最容易搞混淆的用法,附:out.println与out.write的用法
jsp中的<% java代码 %>,表示的是在html中写入java代码,其写入的格式就是在java代码的两头加上<% %>.搞明白这些以后,我们再来看看在js中,最易搞混淆的 ...
- UVA10341 Solve It
题意 PDF 分析 在\(0\le x\le 1\)时,\(f(x)=pe^{-x}+q\sin x+r\cos x+s\tan x+tx^2+u\)是减函数,所以当\(f(0)\ge 0 \wedg ...
- doubleclick video notes
1,vast duration it must math this format ,if use “00:00:7 ” it will tip “ ” <Duration>00:00:0 ...
- centos7如何安装zabbix
只需要按照第三次修改版本的内容安装就可以了(水平线内的内容),主要是执行两个脚本就可以完成自动化安装了,其他内容是以前写的,仅留下来作为参考 第三次修改:(此次为zabbix4.0版本的,进一步的自动 ...