大数据集群单节点多节点
关于“大数据”有很多炒作,并且有一种尝试将Hadoop应用于几乎所有问题的普遍趋势。 但是,有时事实证明,通过编写算法的老式但经过优化的单节点版本,可以获得更好的结果。
我正在写的特定案例是基于3亿个偏好值 (用户项对,用户当前喜欢的内容)的数据集生成建议(用户可能喜欢的项目)。 无论您是否称其为“大数据”都是有争议的,但是对于传统的单节点算法(例如Taste推荐器 )而言,它足够大,可以使他们花费大量的时间和内存来完成任务。
似乎显而易见的选择是将其集群化: Mahout包含基于共生推荐算法的Hadoop实现。 在我们的测试运行中, 一个10节点的小实例EMR集群花费了大约7个小时 。
然后,我了解了GraphChi以及一台笔记本电脑可以做什么! 尽管GraphChi的作者以外的其他人并不能完全使用它,但它启发了我们尝试对推荐问题尝试相同的方法。
因此,我们尝试实现基于共现的推荐算法的单节点版本,该算法可在内存中存储尽可能多的数据,并在内存用完的情况下使用MapDB的持久映射作为后备。 主要是由于内存中的计算占主导地位,我们的优化版本在大型EC2实例上大约需要4个小时才能完成。
由于简单的设置和对代码库的完全控制,事实上,现在添加各种增强功能(例如抖动 ,与其他推荐资源结合或结合基于内容的功能)也变得更加容易。
这种方法也可以扩展:通过添加更多的RAM,更快的磁盘(在没有足够内存的情况下使用)(例如SSD),或者最终通过对数据集进行分区并并行运行。 但是,从推荐质量的角度来看,在某些时候添加更多的数据点不再有意义。
总结 :如果您有一个庞大的数据集,不一定是“万亿”级的“大数据”,但对于经典的消化方法来说却太大了,请考虑编写一个定制的,优化的内存版本。 最终可能会变得更简单,更快。
翻译自: https://www.javacodegeeks.com/2014/03/big-data-when-single-node-is-better-than-clustered.html
大数据集群单节点多节点