我有一个大数据集(大约10T),我需要对这些键值对(0.4B键)进行一些每小时更新以及一些增量数据(例如,每小时约300G)将一些事件附加到用户的事件列表中。此外,我需要删除过时的数据以保持数据集的大小。虽然增量数据很小(与数据集相比),但数据集中的大多数键都将更新。
到目前为止,我有两个解决方案,但是,两者都不够好。
的hadoop 即可。将数据集和增量数据作为映射器的输入,并在reducer中进行更新。但是,由于数据设置得太大,因此每小时分发和随机播放整个数据集并不是一个好主意。我们还考虑进行每日更新(即仅在所有增量数据准备就绪时更新数据集)。但是完成整个mapreduce工作需要一天多的时间......
nosql的即可。将数据集保存在分布式nosql数据库(在我们的示例中为rocksdb)中,并使用数据库进行更新。由于大多数密钥都会更新,因此我们无法使用“Get-Update-Set”进行更新。模式(键太多,随机读取很慢)。幸运的是,rocksdb中的键是有序的,我们可以对增量数据进行排序,并对rocksdb中的数据集进行合并排序。这样,我们只需要对rocksdb进行顺序读取,这很快。 与hadoop解决方案相比,我们不需要每小时对大数据集进行随机播放。此外,我们可以合并几个小时'更新数据集之前的增量数据,因此我们不需要每小时扫描整个数据集。
当数据集不那么大(即3T)时,第二种解决方案很有效。但是,当数据集增长到10T时,磁盘读写太多,系统运行不良。
我想知道大数据的增量计算有什么好的解决方案,还是有批处理计算的nosql?我真的不认为hadoop是增量计算的好选择,特别是当增量数据远小于数据集时。
有什么建议吗?谢谢!
答案 0 :(得分:1)
正如您所提到的,如果您的数据量巨大(在TB中),那么使用大数据平台是有意义的。
我建议您采用混合方式。
现在使用hive上的批处理作业进行增量更新,您可以找到详细说明 http://hadoopgig.blogspot.com/2015/08/incremental-updates-in-hive.html
希望这有帮助