hadoop - 如何分配数据和计算以最大化位置?

标签 hadoop parallel-processing distributed bigdata nosql

请允许我,这是我第一次尝试“大数据”项目时遇到的基本体系结构问题,但是我相信您的答案将对本 Realm 的任何人都普遍感兴趣。

我已经在Google上搜索并阅读了Kafka,Storm,Memcached,MongoDB等的高级描述,但是现在我准备开始研究设计我的应用程序了,我仍然需要进一步了解如何数据应该被分发和共享。

我的应用程序的性能至关重要,因此一个目标是以某种方式最大程度地提高分布式计算的机器RAM中数据的位置。我需要这部分设计的建议。

如果我的应用程序具有一些明确的标准来进行先验分片和分发计算(例如地理区域或公司部门),那么解决方案将是显而易见的。但不幸的是,我的应用程序的数据访问模式是动态的,并且取决于先前的计算结果。

我的应用程序是一个具有不同阶段的分析程序。在第一阶段,所有数据都被访问一次,并为每个数据对象计算一个度量。在第二阶段中,可以访问数据对象的子集,访问的概率与在上一个阶段中计算出的每个数据对象的度量成比例。在最后阶段,将多次访问相对较小的数据对象子集以进行许多计算。

在所有阶段,都需要将计算分布在多个服务器上。这些计算尴尬地是并行的,每个分布式计算只需要访问几个数据对象。还需要在应用程序运行之前指定服务器数量(例如,在一台服务器上运行,或在五十台服务器上运行)。

在我看来,我需要一种将适当的数据对象分发到适当的计算服务器的机制,而不是仅仅从某些数据库服务(无论是集中式还是分布式)中获取数据。同样,在我看来,某种智能缓存系统可能是合适的,因为数据访问模式取决于先前的计算,并且无法事先预测。但据我所知,Memcached并不是这样的系统,因为分片是先验确定的。

我已经读过很多次了,操作系统缓存的性能比我们尝试的任何胡闹都要好。我认为理想的解决方案是每个计算服务器的RAM缓存以某种方式捕获数据对象的动态访问模式,但是我不清楚这如何与NoSQL或Memcached服务一起工作。

感谢您与我的合作。我意识到这是一个基本问题,但到目前为止,答案还不明确。我无法使用NoSQL / Memcached软件包的先验分片来解析应用程序的动态访问模式。任何建议将不胜感激。

最佳答案

我建议您看看http://tarantool.org。难以使最常见的数据访问模式的位置最大化,使用Lua进行本地计算,并在需要在另一个节点上继续进行计算时使用net.box发出远程RPC。所有数据都存储在RAM中,如果您仔细地编写计算代码,则可以利用即时编译器。

关于hadoop - 如何分配数据和计算以最大化位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28893042/

相关文章:

apache-spark - AWS Emr pyspark卡在收集电话上

hadoop - PIG 自动连接默认HDFS,怎么样?

sql - 以可通过Impala查询的方式在包含复杂类型的配置单元表上创建日期限制 View ?

json - Hive 外部表排除违反数据类型的记录

c - 线程还是进程?拥有与数据无关的任务,使用什么更好?

c++ - 有 Xeon Phi 的模拟器/仿真器吗?

python - 在 Python 中的列表中混洗列表的有效方法

concurrency - Scrapy 并发或分布式抓取

python - 带有redis的 celery 中的任务优先级

Erlang:如何查看远程节点上产生的进程中 io:format/2 调用的输出