Spark- SparkStreaming可更新状态的实例
Producer
package zx.zx.sparkkafka
import java.util.Properties
import kafka.producer.{KeyedMessage, Producer, ProducerConfig}
import scala.util.Random
/**
* Created by 166 on 2017/9/6.
*/
object Producer {
val topic="myWordCount1"
val buffer: StringBuilder = new StringBuilder
val message: Array[String] = Array("hadoop","scala","spark","kafka","java","storm","redis","hello","world")
def getMessage:String={
buffer.clear()
for(info<- to )
{
if(info!=) buffer.append(message(Random.nextInt(message.length)).concat(" ")) else buffer.append(message(Random.nextInt(message.length)))
}
buffer.toString()
}
def main(args: Array[String]) {
//properties用户保存一下配置信息的
val properties= new Properties
//添加配置信息:metadata.broker.list指定kafka的Borker的地址和端口,可以是多个Borker的地址
properties.put("metadata.broker.list","192.168.1.88:9092,192.168.1.89:9092,192.168.1.90:9092")
//数据写入到kafka中的使用序列化方式
properties.put("serializer.class","kafka.serializer.StringEncoder")
val producer= new Producer[String,String](new ProducerConfig(properties))
for (i<- until Integer.MAX_VALUE){
Thread.sleep()
val message: KeyedMessage[String, String] = KeyedMessage[String,String](topic,"",null,getMessage)
producer.send(message)
}
}
}
SparkStreamingDemo
注意必须设置checkpoint
package zx.zx.sparkkafka
import org.apache.log4j.{Level, Logger}
import org.apache.spark.{HashPartitioner, SparkConf}
import org.apache.spark.streaming.dstream.{DStream, ReceiverInputDStream}
import org.apache.spark.streaming.kafka.KafkaUtils
import org.apache.spark.streaming.{Seconds, StreamingContext}
/**
* Created by 166 on 2017/9/6.
*/
object SparkStreamingDemo {
/**
* Iterator[(String, Seq[Int], Option[Int])]
* 第一个:key,单词
* 第二个:当前批次该单词出现的次数
* 第三个:初始值或者以前累加过的值
*/
val updataFunc=(iter:Iterator[(String, Seq[Int], Option[Int])])=>{
iter.map(t=>(t._1,t._2.sum+t._3.getOrElse()))
}
def main(args: Array[String]) {
Logger.getLogger("org.apache.spark").setLevel(Level.OFF)
//创建SparkConf并设置AppName
val conf: SparkConf = new SparkConf().setAppName(this.getClass.getName).setMaster("local[2]")
//创建StreamingContext
val ssc: StreamingContext = new StreamingContext(conf,Seconds())
//设置检查点-----如果想要更新历史状态(累加),要设置checkpoint
//checkpoint必须设置,一般来说设置中HDFS
ssc.checkpoint("C:\\Users\\166\\Desktop\\Data\\ck")
//接受命令行中的参数
//从kafka中拉取数据
val zkQuorum="srv01:2181,srv02:2181,srv03:2181"
val groupId="g1"//groupID=UUID.randomUUID().toString
//当话题很多时就使用这个要切分---topics={t1,t2,t3}
//val topicMap = topics.split(",").map((_, numThreads.toInt)).toMap
val topic = Map("myWordCount1"->)
val topicAndLine: ReceiverInputDStream[(String, String)] = KafkaUtils.createStream(ssc,zkQuorum,groupId,topic)
//(key,message)--->map(_._2)===>message
val lines: DStream[String] = topicAndLine.map(_._2) //该数据可能是多行的
//一行一行地取出来,切分数据
//redis spark scala hadoop hello scala java java hadoop scala world
//(redis,1),(spark,1)
val words: DStream[(String, Int)] = lines.map(_.split(" ")).flatMap(x=>x).map((_,))//一行一行地取出来,切分数据
//统计单词数量
val result: DStream[(String, Int)] = words.updateStateByKey(updataFunc,new HashPartitioner(ssc.sparkContext.defaultParallelism),true)
//将结果打印到控制台
result.print()
ssc.start()
ssc.awaitTermination()
}
}
Spark- SparkStreaming可更新状态的实例的更多相关文章
- Spark2.2(三十三):Spark Streaming和Spark Structured Streaming更新broadcast总结(一)
背景: 需要在spark2.2.0更新broadcast中的内容,网上也搜索了不少文章,都在讲解spark streaming中如何更新,但没有spark structured streaming更新 ...
- 【Spark】Spark Streaming 动态更新filter关注的内容
Spark Streaming 动态更新filter关注的内容 spark streaming new thread on driver_百度搜索 (1 封私信)Spark Streaming 动态更 ...
- hdu 5023 线段树延迟更新+状态压缩
/* 线段树延迟更新+状态压缩 */ #include<stdio.h> #define N 1100000 struct node { int x,y,yanchi,sum; }a[N* ...
- git实战-linux定时监控github更新状态(二)
系列文章 git介绍-常用操作(一)✓ git实战-linux定时监控github更新状态(二)✓ 本文主要内容 如何查看github的本地仓库和远程仓库的同步情况 linux服务器定时监控githu ...
- Spark入门实战系列--9.Spark图计算GraphX介绍及实例
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .GraphX介绍 1.1 GraphX应用背景 Spark GraphX是一个分布式图处理 ...
- 一个handle使用更新线程的实例
handle更新线程实例 package com.example.administrator.handle; import android.app.Activity;import android.os ...
- Spark2.3(四十二):Spark Streaming和Spark Structured Streaming更新broadcast总结(二)
本次此时是在SPARK2,3 structured streaming下测试,不过这种方案,在spark2.2 structured streaming下应该也可行(请自行测试).以下是我测试结果: ...
- [转]MongoDB更新操作replaceOne()实例讲解
最近正在学习MongoDB,作为数据库的学习当然是要从CRUD开始学起了.这篇文章默认读者是知道如何安装MongoDB.如何运行MongoDB实例以及了解了MongoDB中的collection.do ...
- WPF以access为数据库,简单实现一个显示数据和更新数据的实例
做一个小实例,如下图,
随机推荐
- kubernetes高级之动态准入控制
系列目录 动态准入控制器文档介绍了如何使用标准的,插件式的准入控制器.但是,但是由于以下原因,插件式的准入控制器在一些场景下并不灵活: 它们需要编译到kube-apiserver里 它们仅在apise ...
- 为什么jdbc中的resultset只能取一次去第二次就报错了
引用 6 楼 的回复: 好吧各位,应该写getInt(1)但是我要问的是为什么第二次用会出错 啊,好古老的一个问题... 第二次出错的原因,是因为你创建Statement的时候,没有指定结果集(游标 ...
- 2013 年最好的 20 款免费 jQuery 插件
2013 年最好的 20 款免费 jQuery 插件 oschina 发布于: 2014年01月11日 (8评) 分享到 新浪微博腾讯微博 收藏+99 互联网上面有很多 jQuery 插件,这里我们 ...
- 记pytorch版faster rcnn配置运行中的一些坑
记pytorch版faster rcnn配置运行中的一些坑 项目地址 https://github.com/jwyang/faster-rcnn.pytorch 一般安装配置参考README.md文件 ...
- #define的使用方法体会
#define 创建一个宏,该宏是标识符或參数化标识符与标记字符串的关联. 在定义宏之后.编译器可用标记字符串替换源文件里标识符的每一个匹配项. 双击以所有折叠.">语法 #defin ...
- esper 附录A
A2 select irstream symbol, volume, price from MarketDate.win.time(5.5 sec) seconds seconds seconds s ...
- mysql 存储过程初探
使用存储过程好处在于: 1.隐藏敏感的算法,避免被正常的开发人员看到,把业务逻辑隐藏在数据库中,而非程序代码里 2.简化应用代码程序,放到数据库里肯定就对程序代码简化有好处了 3.不同的开发语言都可以 ...
- 仿照ArrayList自己生成的MyList对象
现在需要自己生成一个list集合,基本雷同ArrayList,不使用API的List接口. 实现如下: MyList的代码: public class MyList<T> { privat ...
- Brain Network (medium)(DFS)
H - Brain Network (medium) Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d &am ...
- 【python】-- 基本语法、循环
数据类型 1.数字: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取 ...