如何使用大数据进行增量计算

iszxjhcz  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(516)

我有一个大数据集(大约10t),我需要用一些增量数据(大约每小时300g)每小时更新这些键值对(0.4b个键),例如,将一些事件附加到用户的事件列表中。我还需要删除过时的数据,以保持数据集的大小。尽管增量数据很小(与数据集相比),但数据集中的大多数键都会被更新。
到现在为止,我有两个解决方案,但是,都不够好。
hadoop。将数据集和增量数据作为mapper的输入,在reducer中进行更新。但是,由于数据集太大,所以每小时分发和洗牌整个数据集不是一个好主意。我们还考虑每天进行更新(即仅在所有增量数据就绪时更新数据集)。但完成整个mapreduce工作需要一天以上的时间。。。
nosql公司。将数据集保存在分布式nosql数据库(在我们的例子中是rocksdb)中,并对数据库进行更新。由于大多数密钥都将被更新,我们无法使用“get update set”模式进行更新(密钥太多,随机读取速度慢)。幸运的是,rocksdb中的键是有序的,我们可以对增量数据进行排序,并对rocksdb中的数据集进行合并排序。这样,我们只需要在rocksdb上进行顺序读取,速度很快。与hadoop解决方案相比,我们不需要每小时洗牌一次大数据集。另外,我们可以在更新数据集之前合并几个小时的增量数据,这样就不需要每小时扫描整个数据集。
当数据集不是那么大(即3t)时,第二种解决方案效果很好。但是,当数据集增长到10t时,磁盘读写量过多,系统工作不好。
我在想,对于大数据的增量计算有没有好的解决方案,或者对于批量计算有没有nosql?我真的不认为hadoop是增量计算的好选择,特别是当增量数据比数据集小得多的时候。
有什么建议吗?谢谢!

1hdlvixo

1hdlvixo1#

正如您所提到的,如果您的数据是巨大的(tb),那么使用大数据平台是有意义的。
我建议你采用混合方法。
将所有更新/增量推送到配置单元中的表中。
在批处理作业期间,为批处理进程找到一个触发和读取配置单元增量表中的数据的窗口小时数,并更新实际数据。
现在开始使用配置单元上的批处理作业进行增量更新,您可以在http://hadoopgig.blogspot.com/2015/08/incremental-updates-in-hive.html
希望这有帮助

相关问题