基于spark的实时流数据需跟历史数据进行对比时所遇到的问题

1 篇文章 0 订阅
1 篇文章 0 订阅
环境:
HDP-2.3
Hadoop 2.7.1.2.3
HBase 1.1.1.2.3
Spark 1.4.1.2.3
Kafka 0.8.2.2.3
Solr 5.3.0

项目需求:
实时的流数据需要和每个用户前一个数据进行比较,得出值是否相同。

方案1:
只有一个spark streaming的任务,在该任务中,Spark streaming从Kafka中获取到数据后进行数据清洗,将清洗后的数据存入HBase。再对该DStream进行map,根据用户ID到HBase中查找上一时刻的值并进行比对,如果不相同则保留,相同则设置为空之后filter掉。
问题:
在执行前3~5次是成功的,之后就不继续进行了,猜想可能是HBase的性能造成的影响,不过根据 http://www.jdon.com/46128这篇帖子的性能比较,我们的项目需要同时读写操作,所以HBase还是比较适合的,只能换Spark算法。

方案2:
第一个spark streaming任务实时将数据写入HBase,第二个spark批处理任务每隔一段时间对HBase进行一次批处理。
HBase的原始数据表以用户ID作为行健,时间作为列,需要对比的数据作为值,只有一个列簇。
问题:
任务成功,但执行时间过长,当HBase表中数据增加时,任务执行时间明显增加。

方案3:
在方案2的基础上进行改进,在第二个spark批处理任务执行的过程中,将本次每行的列的长度记录在HBase表的第二个列簇中,供下个任务使用。
问题:
任务执行时间还是没有减少。

方案4:
在方案2的基础上进行改进,在第二个spark批处理任务执行的过程中,将除了最后一位值的其他列全部删除,减小HBase表的大小。
问题:
只有少量数据的时候HBase也会遇到请求失败,无法访问所有表,该方法不成功。

方案5:
在方案3的基础上进行改进,在第一个Spark streaming任务中通过Solr对HBase进行实时增量索引供第二个spark批处理任务查询使用,还未测试。(目前遇到的问题是solr的scala API还没有调试完成)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值