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的安装是否成功.后续课程会接着 ...
随机推荐
- 终端利用ssh登录远程服务器
第一步: 安装ssh:yum install ssh 第二步: 启动ssh服务:service sshd start 第三步: 连接远程服务器: ssh -p 端口号 用户名@ip地址 然 ...
- AWS系列-S3实现文件服务页面展示
最近由于业务需求,对于备份的数据存放到S3上面,并需要页面展示.而且还能下载. 把这个桶里面的对象,都在某个静态页面展示.并且 我可以把这个对象下载下来. 首页内容就是 桶里面的对象. 并且可以随时查 ...
- GSAP 官方文档(结贴)
好久没写GSAP的教程的(其实我也不懂哈哈),国内也没什么人用,不对动画要求特别高的话,其实也没必要用GSAP,现在工作上没用到这个东西,也懒得写了,所以有问题的话去找一下greensock的官方文档 ...
- c#基础 第五讲
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- [SharePoint 2010] 如何在小組網站內頁面上撥放影片或是音效檔
在SharePoint 2010中, 我們可以像是Youtube一樣在網頁上撥放影片或是音效檔案. 影片或音效是採取串流的方式來撥放. 也就是說我們不需要把整個檔案都下載回來才開始撥放. 點選沒多久我 ...
- Jfinal报错sql injection violation, multi-statement not allow
Jfinal报错: com.jfinal.plugin.activerecord.ActiveRecordException: java.sql.SQLException: sql injection ...
- js判断对象数组中是否存在某个对象
1. 如果要判断数组中是否存在某个元素的话很好判断,直接用数组的indexOf方法就好,存在返回当前索引不存在返回-1 var arr=[1,2,3,4] arr.indexOf(3) arr.ind ...
- angular4 在页面跳转的时候传递多个参数到新页面
页面跳转 router.navigate //单一参数: this.router.navigate(['/detail',id]); //多个参数: this.router.navigate(['/d ...
- vim简单的配置
"设置当文件被改动时自动载入 set autoread "在左侧行号 set nu "tab长度为4 "覆盖文件时不备份 set nobackup " ...
- ubuntu 卸载 google-chrome
sudo apt-get autoremove google-chrome-stable