spark-streaming读kafka数据到hive遇到的问题
在项目中使用spark-stream读取kafka数据源的数据,然后转成dataframe,再后通过sql方式来进行处理,然后放到hive表中,
遇到问题如下,hive-metastor在没有做高可用的情况下,有时候会出现退出,这个时候,spark streaminG的微批作业就会失败,
然后再启重动hive-metastore进程后,作业继续正常执行,数据就有丢失.
分析如下:
第一步,观察日志发现,
我原来的代码这么写的:
xx.foreachRdd(rdd=>
processRdd(rdd)
updatezkOffset(rdd)
)
原以为,如果任务不成功,就应该不更新offset,
原想的是,如果processrdd出现异常,则不会执行后面的updateoffset,
但processrdd是在线程池中运行的,它出现的异常只是warning,根本不影响后面的updateoffset.
故需要修改代码,把updateoffset部分放置processrdd中,当其执行完成后调用即可.
第二步测试:
经过测试发现,把updateoffset部分放置processrdd后,模拟hive metastore出问题,
spark-streaming 任务失败,然后offset 确实没有更新.
但问题在这里,下一批次的作业,读取的offset并不是你没有更新的那一个,而是它计算出来的.
例如假设batch1 job读取的是0-20,batch2 job读取的就是21-40,batch3 job读取的是41-60
即使batch1 job处理任务失败了,但是后面的batch2 job或batch3 job 读取数据并执行成功了,
它就会把自己的offset更新.
第三步测试:
经测试发现,使用可恢复的方式,即使用checkpoint.
spark streaming保留了最近的五个batchjob信息,但是也不能解决上面遇到的问题,
如果hive metastore出问题,再恢复,原来存储的元数据信息也会被新的给替换掉了.
想到的解决方案:
1.如果batch job出现失败的情况,就直接让它退出,这是一种解决思路.
2.还使用手工更新zookeeper offset的方法,
如果出现部分batch job失败的情况,仍不退出,但是我们给应用写一个支持传入
offset 范围的版本,重新执行,把数据补进去.
另外,如何提交spark streaming 已经失败的batch job?
spark-streaming读kafka数据到hive遇到的问题的更多相关文章
- Spark Streaming接收Kafka数据存储到Hbase
Spark Streaming接收Kafka数据存储到Hbase fly spark hbase kafka 主要参考了这篇文章https://yq.aliyun.com/articles/60712 ...
- demo1 spark streaming 接收 kafka 数据java代码WordCount示例
1. 首先启动zookeeper windows上的安装见zk 02之 Windows安装和使用zookeeper 启动后见: 2. 启动kafka windows的安装kafka见Windows上搭 ...
- spark streaming 接收 kafka 数据java代码WordCount示例
http://www.cnblogs.com/gaopeng527/p/4959633.html
- Spark streaming消费Kafka的正确姿势
前言 在游戏项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark streaming从kafka中不 ...
- Spark Streaming和Kafka整合保证数据零丢失
当我们正确地部署好Spark Streaming,我们就可以使用Spark Streaming提供的零数据丢失机制.为了体验这个关键的特性,你需要满足以下几个先决条件: 1.输入的数据来自可靠的数据源 ...
- Spark Streaming和Kafka整合是如何保证数据零丢失
转载:https://www.iteblog.com/archives/1591.html 当我们正确地部署好Spark Streaming,我们就可以使用Spark Streaming提供的零数据丢 ...
- Spark Streaming使用Kafka保证数据零丢失
来自: https://community.qingcloud.com/topic/344/spark-streaming使用kafka保证数据零丢失 spark streaming从1.2开始提供了 ...
- Spark Streaming、Kafka结合Spark JDBC External DataSouces处理案例
场景:使用Spark Streaming接收Kafka发送过来的数据与关系型数据库中的表进行相关的查询操作: Kafka发送过来的数据格式为:id.name.cityId,分隔符为tab zhangs ...
- Spark Streaming on Kafka解析和安装实战
本课分2部分讲解: 第一部分,讲解Kafka的概念.架构和用例场景: 第二部分,讲解Kafka的安装和实战. 由于时间关系,今天的课程只讲到如何用官网的例子验证Kafka的安装是否成功.后续课程会接着 ...
随机推荐
- C++引用具体解释
引用是C++中新出现的.有别于C语言的语法元素之中的一个. 关于引用的说明,网络上也有不少.可是总感觉云遮雾绕,让人印象不深刻. 今天我就来深入解释一下引用.并就一些常见的观点进行说明,最后附带代码演 ...
- 编程之美 set 11 买书问题
题目 书店搞促销, 同时购买多卷书时, 有机会享受优惠 2本优惠 5%, 3本 10%, 4 本 20% 5 本 25% 设计算法, 求解购买一本书的最低价格 分析 1. 第一个感觉是一次购买的越多省 ...
- 二、Android Studio使用——导入jar包,运行、debug都不是问题
[新建AndroidStudio工程,lib导入jar包] 我们的项目代码都在app里面,可以看作是一个Model. src 下面除了我们的代码之外,还有单元测试. 把JAR复制到libs文件 ...
- java enum(枚举)使用详解 + 总结(转载)
enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中. 下面是我在使用 enum 过程中的一些经验和总结,主要包括如下内容: 1. 原始 ...
- 修改Linux的基本配置(如主机名、ip等)
1.修改主机名 vi /etc/sysconfig/network 2.修改ip地址(注意修改完了后,reboot) 查看网卡的命令: ifconfig 开启网卡的命令: ifup eth0 修改ip ...
- Put queue for MemoryTransaction of capacity 10000 full, consider committing more frequently, increasing capacity or increasing thread count flume capacity 时间数
package com.test; import org.apache.http.*;import org.apache.http.entity.ContentType;import org.apac ...
- c++拷贝构造函数,深拷贝,浅拷贝,对象内存
https://blog.csdn.net/lwbeyond/article/details/6202256 防止默认拷贝发生 通过对对象复制的分析,我们发现对象的复制大多在进行“值传递”时发生,这里 ...
- Buns---cf 106C(多重背包)
题目链接:http://codeforces.com/problemset/problem/106/C 题意:有n克面粉,m种馅料,然后每种馅料有ai克,bi克馅料和ci克面粉做的面包可以买di元,也 ...
- MongoDB学习笔记系列~目录
MongoDB学习笔记~环境搭建 (2015-03-30 10:34) MongoDB学习笔记~MongoDBRepository仓储的实现 (2015-04-08 12:00) MongoDB学习笔 ...
- Python np.newaxis
np.newaxis的功能是插入新维度,看下面的例子: a=np.array([1,2,3,4,5])print a.shape print a 输出结果 (5,)[1 2 3 4 5] 可以看出a是 ...