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为数据库,简单实现一个显示数据和更新数据的实例
做一个小实例,如下图,
随机推荐
- applicationContext-XXX.xml和XXX-servlet.xml的区别
1.ApplicationContext.xml 是spring 全局配置文件,用来控制spring 特性的 2.dispatcher-servlet.xml 是spring mvc里面的,控制器. ...
- linux上复制行到另一个文件
1.复制3行到5行数据到ab.sh文件,不覆盖ab.sh文件中的已有内容 :3,5w>>ab.sh 2.复制3行到5行数据到ab.sh文件,覆盖ab.sh文件中的已有内容 :3,5w!ab ...
- Android Studio 使用笔记:文件查询方法总结
搜索单词 Windows: Ctrl + F Mac : Cmd + F 会在当前激活的文件上查询输入的关键字,以高亮显示 跳转行 Windows: Ctrl + L Mac : Cmd + ...
- JavaScript跨浏览器事件处理
var EventUtil = { getEvent: function(event){ return event ? event : window.event; }, getTarget: func ...
- php党 强烈推荐TIPI:深入理解PHP内核
深入理解PHP内核(Thinking In PHP Internals) TIPI项目是一个自发项目, 项目主要关注PHP的内部实现, 以及PHP相关的方方面面, 该项目包括<深入理解PHP内核 ...
- [root@localhost ~]#各项解释
[root@localhost ~]# 解释: [登录用户@主机名 索引目录(~家目录,当前所在的目录)]#号代表超级用户,$普通用户
- Shader 结构体中语义的理解
Shader编写通常会遇到语义 1 float4 vert(float4:POSITION):SV_POSITION 2 { 3 return mul(UNITY_MATRIX_MVP,v); 4 } ...
- Linux删除乱码文件的方法
当文件名为乱码的时候,无法通过键盘输入文件名,所以在终端下就不能直接利用rm,mv等命令管理文件了. 我们可以通过以下几种方法删除linux下的乱码文件.(文件名为乱码) l 方法1 我们知道每个文 ...
- Java对文件夹中的文件按修改时间排序
import java.io.File; import java.util.Arrays; import java.util.Comparator; import java.util.Date; pu ...
- Intersection(计算几何)
Intersection Time Limit: 4000/4000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others)To ...