hadoop - 如何用大数据做增量计算

标签 hadoop bigdata distributed-computing nosql

我有一个大数据集(大约 10T),我需要用一些增量数据对这些键值对(0.4B 键)做一些每小时更新 (每小时约 300G),例如将一些事件附加到用户的事件列表中。我还需要删除过时的数据以保持数据集的大小。虽然增量数据很小(与数据集相比),但数据集中的大部分键都会被更新

到目前为止,我有两个解决方案,但是都不够好。

  1. hadoop。将数据集和增量数据作为mapper的输入,在reducer中进行更新。但是,由于数据集太大,每小时分发和打乱整个数据集并不是一个好主意。我们还考虑进行每日更新(即仅在所有增量数据准备就绪时才更新数据集)。但是完成整个 mapreduce 作业需要一天多的时间...

  2. nosql。将数据集保存在分布式 nosql 数据库(在我们的例子中是 rocksdb)中,并使用数据库进行更新。由于大多数 key 将被更新,我们不能使用“Get-Update-Set”模式进行更新( key 太多,随机读取速度很慢)。好在 rocksdb 中的 key 是有序的,我们可以对增量数据进行排序,对 rocksdb 中的数据集进行归并排序。这样我们只需要对rocksdb做顺序读,速度很快。 与hadoop解决方案相比,我们不需要每小时shuffle大数据集。此外,我们可以在更新数据集之前合并几个小时的增量数据,这样我们就不需要每小时扫描整个数据集。

当数据集不是那么大(即 3T)时,第二种解决方案效果很好。但是,当数据集增长到10T时,磁盘读写过多,系统运行不畅。

请问大数据的增量计算有什么好的方案,批量计算有没有nosql?我真的不认为 hadoop 是增量计算的好选择,尤其是当增量数据远小于数据集时。

有什么建议吗?谢谢!

最佳答案

正如您所说,如果您的数据量很大(以 TB 为单位),那么使用大数据平台是有意义的。

我建议您采用混合方法。

  1. 将所有更新/增量推送到 Hive 中的表中。
  2. 找到批处理的窗口时间,以触发并从 hive delta 表中读取数据,并在批处理作业期间更新实际数据。

现在开始使用 hive 上的批处理作业进行增量更新,您可以在 http://hadoopgig.blogspot.com/2015/08/incremental-updates-in-hive.html

希望对你有帮助

关于hadoop - 如何用大数据做增量计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32824878/

相关文章:

hadoop - Flume-ng Spool 目录源轮询新文件的目录,而不是使用 native WatchService API

azure - 从头开始在 Azure 上部署 Elasticsearch

hadoop - 使用Hadoop查询github数据

python - 要求在 Ruffus 管道中运行函数之前创建一组文件

hadoop - Hadoop Pig Latin始终无法加载数据

hadoop - pig : Container is running beyond physical memory limits in cdh 5 using oozie

maven - 通过 Shark API 查询不起作用

java - 分析日志分类并存储在 Elasticsearch 索引中

python - 如何将 spark 与 python 或 jupyter 笔记本一起使用

windows - 如何将 Java 文件安装到 Windows 服务中