/**

  */
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. 面试必备:HashMap源码解析(JDK8)

    1 概述 本文将从几个常用方法下手,来阅读HashMap的源码. 按照从构造方法->常用API(增.删.改.查)的顺序来阅读源码,并会讲解阅读方法中涉及的一些变量的意义.了解HashMap的特点 ...

  2. 第2章 Python基础-字符编码&数据类型 字典 练习题

    1.写代码,有如下字典,按照要求实现每一个功能,dic = {'k1':'v1','k2':'v2','k3':[11,22,33]} 请循环输出所有的 key dic = {'k1':'v1','k ...

  3. 《自己动手写框架2》:用200行的DBF解析器来展示良好架构设计

    因为工作关系.须要工作其中,须要读取DBF文件.找了一些DBF读取开源软件,要么是太过庞大,动不动就上万行.要么是功能有问题,编码,长度,总之是没有找到一个很爽的. 在万般无奈之下,我老人家怒从心头起 ...

  4. 第二篇:呈现内容_第一节:Control呈现

    一.Control的呈现过程 在上个章节““生死有序”的控件生命周期”中,我们提到Render是控件开发的主角,但在控件树的“合成模式(Composite)”部分这位主角却缺席了(戏份太多的缘由).哦 ...

  5. 温故而知新 原来 cheerio 还可以操作XML

  6. Axure chrome 扩展显示已损坏的解决方法

    下载地址 链接:https://pan.baidu.com/s/11K3t_mvgJg51siO_jNRejg 提取码:goz1 如果链接失效,请留言或站内信提醒我更新 疑问 之前用的好好的Axure ...

  7. Oracle多表关联如何更新多个字段

    注意点:1.被update主表一定要加上过滤条件.2.查询出来更新结果集,同时也要作为被更新主表的条件,作为同步大家都是更新这部分数据.update student stu set (stu.name ...

  8. LVS:三种负载均衡方式比较+另三种负载均衡方式

    转:http://blog.csdn.net/u013256816/article/details/50705578 什么是LVS?   首先简单介绍一下LVS (Linux Virtual Serv ...

  9. MySQL,如何修改root帐户密码、如何解决root帐户忘记密码的问题

    1. 如何修改root帐户密码 打开MySQL 5.6 Command Line Client窗口,输入当前密码登录,然后依次输入如下3条命令: use mysql; update user set ...

  10. Pipeline 与 xargs

    Pipeline 与 xargs Pipeline与命令行參数 应用程序接收输入的两种方式: 命令行參数 输入字符串被当成參数,通过int main(int argc, char **argv), 中 ...