/**

  */
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. Python学习笔记001——Linux

    Linux文件系统采用树形目录结构,系统中一切皆文件.文件名字母区分大小写 Linux命令使用格式(终端窗口) 命令名 [选项] [参数] 命令名:在命令行输入命令. 备注:命令名字母区分大小写, 1 ...

  2. 关于varchar(max), nvarchar(max)和varbinary(max)

    在MS SQL2005及以上的版本中,加入大值数据类型(varchar(max).nvarchar(max).varbinary(max) ).大值数据类型最多可以存储2^30-1个字节的数据.这几个 ...

  3. netty服务端实现心跳超时的主动拆链

    一.服务器启动示例: public class MySocketServer { protected static Logger logger = LoggerFactory.getLogger(My ...

  4. Mysql:MyIsam和InnoDB的区别

    MyISAM: 这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的 顺序访问方法) 的缩写,它是存储记录和文件的标准方法 ...

  5. 【转】在一个Job中同时写入多个HBase的table

    在进行Map/Reduce时,有的业务需要在一个job中将数据写入到多个HBase的表中,下面是实现方式. 原文地址:http://lookfirst.com/2011/07/hbase-multit ...

  6. php使用CURL不依赖COOKIEJAR获取COOKIE的方法

    本文实例讲述了php使用CURL不依赖COOKIEJAR获取COOKIE的方法.分享给大家供大家参考.具体分析如下: PHP中CURL类是一个非常牛逼的工具类,具体怎么牛逼就不啰嗦了. 对于COOKI ...

  7. activiti设置流程变量

    public static void mian(String args[]){ ProcessEngine processEngine  = ProcessEngine.getDefaultProce ...

  8. IOS 缓存方案(按需缓存 、 预缓存)及 低网速模拟

    1,在设备中 设置开发者模式. 参照上面设置 自定义 添加.丢包率 35. 或者参照这个文章:http://ivoryxiong.org/devops/2013/05/24/ios_dev_handl ...

  9. Atitit  undac网络设备管理法案 (路由器 交换机等)    法案编号USRr101510

    Atitit  undac网络设备管理法案 (路由器 交换机等)    法案编号USRr101510 1.1. 版本历史1 1.2. 密码设置规范 与原则1 1.3. 如何设置密码 ,设置一个简单又安 ...

  10. IOS之Accessor method

    1 前言 本章主要介绍了Objective-C中的存取方法的相关概念. 2 详述 存储方法是一个可以获得或者设置一个对象的属性值的实例方法.在Cocoa的术语中,一个检索对象属性值的方法提及为gett ...