/**

  */
object AppRealTime { def main(args: Array[String]): Unit = {
if (args.length < ) {
println("please input args like: seconds checkpointdir kafkaBrokerList groupId topic")
System.exit()
}
val logger = LoggerFactory.getLogger(AppRealTime.getClass) /**
* 创建StreamContext
*
* @return
*/
def createStreamingContext: StreamingContext = {
val conf = new SparkConf
//StreamingContext,里面包含SparkContext
val ssc = new StreamingContext(conf, Seconds(args().trim.toInt))
//设置checkpoint,保存运行数据
ssc.checkpoint(args().trim) //kafka连接参数
val kafkaParams = Map("metadata.broker.list" -> args().trim, "group.id" -> args().trim)
//指定要读取的topics
val topics = Set(args().trim) //创建directStream从kafka读取数据
val data = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topics) //迭代处理数据
data.foreachRDD(rdd => {
rdd.foreachPartition(p => {
val conf = HBaseConfiguration.create()
//连接Connection
val hConnection = ConnectionFactory.createConnection(conf)
//获取table
val click = hConnection.getTable(TableName.valueOf(Constants.HISTORY_CLICK))
val statistic = hConnection.getTable(TableName.valueOf(Constants.RESULT_STATISTIC)) try {
while (p.hasNext) {
val tuple = p.next()
val logType = tuple._1
val logVal = tuple._2
println(logType+"\t"+logVal)
logType match {
case "click" => {
val clickObj = new Click(logVal)
if (HBaseUtil.isExists(click, clickObj.getRowKey)) {
clickObj.doRepeat(statistic)
} else {
clickObj.doNoRepeat(click, statistic)
}
}
case _ => {
logger.info("msg:" + logVal)
} } }
} catch {
case ex: Exception => {
logger.error("error :", ex)
}
} finally {
click.close()
statistic.close()
hConnection.close()
}
})
})
ssc
} val ssc = StreamingContext.getOrCreate(args().trim, createStreamingContext _) ssc.start()
ssc.awaitTermination() } }

经过粗略的实验(一个分区)发现,使用了这个方法之后可以实现不丢失数据

StreamingContext.getOrCreate的更多相关文章

  1. spark streaming中使用checkpoint

    从官方的Programming Guides中看到的 我理解streaming中的checkpoint有两种,一种指的是metadata的checkpoint,用于恢复你的streaming:一种是r ...

  2. Apache Spark源码走读之5 -- DStream处理的容错性分析

    欢迎转载,转载请注明出处,徽沪一郎,谢谢. 在流数据的处理过程中,为了保证处理结果的可信度(不能多算,也不能漏算),需要做到对所有的输入数据有且仅有一次处理.在Spark Streaming的处理机制 ...

  3. 使用streaming window函数统计用户不同时间段平均消费金额等指标

    场景 现在餐厅老板已经不满足仅仅统计历史用户消费金额总数了,他想知道每个用户半年,每个月,每天,或者一小时消费的总额,来店消费的次数以及平均金额. 给出的例子计算的是每5秒,每30秒,每1分钟的用户消 ...

  4. spark streaming - kafka updateStateByKey 统计用户消费金额

    场景 餐厅老板想要统计每个用户来他的店里总共消费了多少金额,我们可以使用updateStateByKey来实现 从kafka接收用户消费json数据,统计每分钟用户的消费情况,并且统计所有时间所有用户 ...

  5. Spark Streaming官方文档学习--下

    Accumulators and Broadcast Variables 这些不能从checkpoint重新恢复 如果想启动检查点的时候使用这两个变量,就需要创建这写变量的懒惰的singleton实例 ...

  6. spark streaming 实时计算

    spark streaming 开发实例 本文将分以下几部分 spark 开发环境配置 如何创建spark项目 编写streaming代码示例 如何调试 环境配置: spark 原生语言是scala, ...

  7. Spark Streaming metadata checkpoint

    Checkpointing 一个流应用程序必须全天候运行,所有必须能够解决应用程序逻辑无关的故障(如系统错误,JVM崩溃等).为了使这成为可能,Spark Streaming需要checkpoint足 ...

  8. Spark Streaming笔记——技术点汇总

    目录 目录 概况 原理 API DStream WordCount示例 Input DStream Transformation Operation Output Operation 缓存与持久化 C ...

  9. Apache Spark 2.2.0 中文文档 - Spark Streaming 编程指南 | ApacheCN

    Spark Streaming 编程指南 概述 一个入门示例 基础概念 依赖 初始化 StreamingContext Discretized Streams (DStreams)(离散化流) Inp ...

随机推荐

  1. elasticsearch实现按天翻滚索引

    最近在做集中式日志,将应用的日志保存到Elasticsearch中,结合kibana实现集中化日志监控和报警.在设计ES存储的时候.考虑到日志的特殊性,打算采用Daily Indices方式.名称为: ...

  2. gitlab hook declined错误

    在向gitlab提交工程的时候,出现错误提示: remote: GitLab: You are not allowed to access master!remote: error: hook dec ...

  3. 通过Stetho在Chrome上调试Android App

    引 入依赖包 compile 'com.facebook.stetho:stetho:1.3.1' 初始化一下 public class MyApplication extends Applicati ...

  4. LIGHT OJ 1199 - Partitioning Game

    传送门 1199 - Partitioning Game    PDF (English) problem=1199" style="color:rgb(79,107,114)&q ...

  5. SharePoint 2013 Step by Step—— How to Upload Multiple Documents in Document Library

    How to Upload Multiple documents in SharePoint 2013,Options to add multiple files in a document libr ...

  6. python 安装配置(windows)

    在 Windows 上, 安装 Python 有两种选择. ActiveState 制作了一个 Windows 上的 Python 安装程序称为 ActivePython, 它包含了一个完整的 Pyt ...

  7. mysql分享一:运维角度浅谈MySQL数据库优化

    转于:http://lizhenliang.blog.51cto.com/7876557/1657465 1.数据库表设计要合理避免慢查询.低效的查询语句.没有适当建立索引.数据库堵塞(死锁)等 2. ...

  8. hdoj 1874 畅通project续【SPFA】

    畅通project续 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Su ...

  9. SQL Server 的动态语句(SQLServer 的String.format用法)(SQLServer的调用SQL占位符的使用)

    直接上代码好了: --建表语句if exists(select 1 from [你的测试数据库名字].sys.tables where name='TDepartment') BEGIN print ...

  10. 【Unity】7.3 键盘输入

    分类:Unity.C#.VS2015 创建日期:2016-04-21 一.简介 键盘事件也是桌面系统中的基本输入事件.和键盘有关的输入事件有按键按下.按键释放.按键长按,Input类中可以通过下图所示 ...