是HA与updateStateByKey相结合的程序。

  有点问题,有点奇怪,重启项目后运行没有问题,但是第三次启动的时候,就不会在打印数据了,有点问题。

1.程序

  1. package com.stream.it
  2. import org.apache.spark.streaming.kafka.KafkaUtils
  3. import org.apache.spark.streaming.{Seconds, StreamingContext}
  4. import org.apache.spark.{SparkConf, SparkContext}
  5.  
  6. /**
  7. * 通过HA管理KAFKA的offset偏移量
  8. * Created by ibf on 03/04.
  9. */
  10. object HAAndUpdateStateByKey {
  11. def main(args: Array[String]): Unit = {
  12. val conf = new SparkConf()
  13. .setAppName("StreamingHAOfKafkaDirect")
  14. .setMaster("local[*]")
  15. val sc = SparkContext.getOrCreate(conf)
  16. val checkpointDir = "hdfs://linux-hadoop01.ibeifeng.com:8020/beifeng/spark/streaming/012"
  17.  
  18. // ========================================
  19. /**
  20. * 创建一个StreamingContext对象
  21. *
  22. * @return
  23. */
  24. def createingStreamingContextFunc(): StreamingContext = {
  25. val kafkaParams = Map("metadata.broker.list" -> "linux-hadoop01.ibeifeng.com:9092,linux-hadoop01.ibeifeng.com:9093,linux-hadoop01.ibeifeng.com:9094", "auto.offset.reset" -> "smallest")
  26. val topics = Set("beifeng")
  27. val ssc = new StreamingContext(sc, Seconds(1))
  28. val dstream = KafkaUtils.createDirectStream[String, String, kafka.serializer.StringDecoder, kafka.serializer.StringDecoder](ssc, kafkaParams, topics)
  29.  
  30. val resultDStream = dstream
  31. .filter(_._2.nonEmpty)
  32. .mapPartitions(iter => {
  33. iter.flatMap(_._2.split(" ").map((_, 1)))
  34. })
  35. .updateStateByKey(
  36. (values: Seq[Int], state: Option[Long]) => {
  37. // 获取当前key的累加值
  38. val currentSum = values.sum
  39. // 获取之前批次的累加值
  40. val preSum = state.getOrElse(0L)
  41.  
  42. // 返回结果
  43. Some(currentSum + preSum)
  44. }
  45. )
  46.  
  47. // 打印一下
  48. resultDStream.print()
  49.  
  50. // ssc设置checkpoint
  51. ssc.checkpoint(checkpointDir)
  52. // 返回对象
  53. ssc
  54. }
  55.  
  56. val ssc = StreamingContext.getOrCreate(
  57. checkpointPath = checkpointDir,
  58. creatingFunc = createingStreamingContextFunc
  59. )
  60.  
  61. // 将ssc传给其它管理Streaming关闭的对象==>其它线程(当前线程做数据的接收处理工作)
  62. shutdownStreaming(ssc)
  63.  
  64. // start ===spark.streaming.stopGracefullyOnShutdown为true的时候,当jvm退出的时候,自动关闭
  65. ssc.start()
  66. ssc.awaitTermination() // 阻塞操作
  67. }
  68.  
  69. /**
  70. * 进行shutdown操作
  71. *
  72. * @param ssc
  73. */
  74. def shutdownStreaming(ssc: StreamingContext): Unit = {
  75. new Thread(new Runnable {
  76. override def run(): Unit = {
  77. println("你好......")
  78. // 当某个条件被触发的时候,streamingcontext关闭
  79. // 这里假设停留10秒中
  80. Thread.sleep(10000)
  81. // 关闭操作
  82. ssc.stop(true, true)
  83. println("你好")
  84. }
  85. }).start()
  86. }
  87.  
  88. }

2.效果

  

067 HA与updateStateByKey结合的更多相关文章

  1. Hadoop 2.7.4 HDFS+YRAN HA部署

    实验环境 主机名称 IP地址 角色 统一安装目录 统一安装用户 sht-sgmhadoopnn-01 172.16.101.55 namenode,resourcemanager /usr/local ...

  2. HA 高可用软件系统保养指南

    又过了一年 618,六月是公司一年一度的大促月,一般提前一个月各系统就会减少需求和功能的开发,转而更多去关注系统可用性.稳定性和管控性等方面的非功能需求.大促前的准备工作一般叫作「备战」,可以把线上运 ...

  3. MySQL: Fabric 搭建 HA

    搭建好Fabric之后,就可以在它的基础上创建HA Group. Shard Group.HA+Shard Group等.这里来说明一下如何快速的搭建HA环境. Fabric 192.168.2.23 ...

  4. zookeeper集群的搭建以及hadoop ha的相关配置

    1.环境 centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8 master作为active主机,data1作为standby备用机,三台机器均作为数据节点,yarn资源 ...

  5. 使用Nginx+Lua代理Hadoop HA

    一.Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个Master组件提供服务,其中正在使用的组件称为Active,另一个作为备份称为Standby,例如HDFS的NameNo ...

  6. hadoop2.7.1 HA安装部署(转)

    hadoop集群规划 目标:创建2个NameNode,做高可用,一个NameNode挂掉,另一个能够启动:一个运行Yarn,3台DataNode,3台Zookeeper集群,做高可用. 在 hadoo ...

  7. 【转】 XenServer架构之HA概述

    一.XenServer HA概述 XenServer HA是一套全自动功能设计,规划,安全地恢复出现问题的XenServe 主机上的虚拟机的功能组件. 启用 HA 后,XenServer 将持续监视池 ...

  8. ActiveMQ笔记(3):基于Networks of Brokers的HA方案

    上一篇介绍了基于ZK的ActiveMQ HA方案,虽然理解起来比较容易,但是有二个不足: 1)  占用的节点数过多,1个zk集群至少3个节点,1个activemq集群也至少得3个节点,但其实正常运行时 ...

  9. ActiveMQ笔记(2):基于ZooKeeper的HA方案

    activemq官网给出了3种master/slave的HA方案,详见:http://activemq.apache.org/masterslave.html,基于共享文件目录,db,zookeepe ...

随机推荐

  1. 深入理解ajax

    http://www.imooc.com/code/13468    基础练习 http://www.imooc.com/video/5644            !ajax! 常用   for   ...

  2. ES6 必须要用的数组Filter() 方法,不要再自己循环遍历了!!!

    1,来一个最简单最常用的栗子: 获得年龄为9岁的孩子 1 let arr = [ 2 { 3 name:'小明', 4 sex:0, 5 age:9 6 }, 7 { 8 name:'小红', 9 s ...

  3. 高并发编程基础(java.util.concurrent包常见类基础)

    JDK5中添加了新的java.util.concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法 ...

  4. 最短路径之Bellman-Ford算法

    第一行为源点个数,边的个数m 接下来m行为a->b和权值 5 52 3 21 2 -31 5 54 5 23 4 3 Bellman-Ford算法(1): #include<iostrea ...

  5. poj2513--并查集+欧拉路+字典树

    经典好题,自己不知道哪里错了交上去是RE,可能是数组开的不好吧,字典树老碰到这种问题.. 先马上别人的代码,有空对拍看看 #include <cstdio> #include <cs ...

  6. Python获取当前时间及时间转换(datetime)

    datetime是Python处理日期和时间的标准库 获取当前时间 import datetime day = datetime.datetime.now() day2 = datetime.date ...

  7. mac 显示/不显示"任何来源"_ mac打开安装文件显示文件破损解决办法

    系统: macOS_10.12 导致文件破损原因: 软件有经过了汉化或者破解,所以可能被Mac认为「已损坏」 解决问题办法: 系统偏好设置 -> 安全性与隐私 -> 通用 -> 选择 ...

  8. 开放系统的直连式存储(Direct-Attached Storage,简称DAS)

    开放系统的直连式存储(Direct-Attached Storage,简称DAS)已经有近四十年的使用历史,随着用户数据的不断增长,尤其是数百GB以上时,其在备份.恢复.扩展.灾备等方面的问题变得日益 ...

  9. Android相关 博客收藏

    #1 Android 网络编程 参考博客 :http://blog.csdn.net/kieven2008/article/details/8210737 #2 Could not find com. ...

  10. office之Excel 你会用 Ctrl + E 吗?

    从Excel97至现在的最新版本2016,如果评选Excel中最简单.易用.功能最强大的技巧,非2013版新增的“快速填充”(快捷键 Ctrl+E)莫属.向下拖动复制后,打开下拉菜单,就可以看到它的身 ...