我们的组织有数百个批处理作业,可以在一夜之间运行。其中许多工作需要2小时,3小时,4小时才能完成;有些甚至需要长达7个小时。目前,这些作业以单线程模式运行,因此我们尝试提高性能受到机器垂直扩展以及额外CPU和内存的限制。
我们正在探索利用并行处理技术(例如Map Reduce)来减少完成这些作业所需的时间的想法。我们的大多数批处理过程都是从数据库中提取大型数据集,逐行处理数据,并将结果作为文件转储到另一个数据库中。在大多数情况下,单个行的处理独立于其他行。
现在我们正在研究Map Reduce框架,以便将这些作业分解为更小的部分以进行并行处理。我们的组织拥有400多台员工桌面PC,我们希望在工作时间之外将这些机器用作并行处理网格。
我们需要什么才能让这个工作? Hadoop是唯一需要的组件吗?我们还需要HBase吗?我们对所有不同的产品感到有些困惑,需要一些帮助。
由于
答案 0 :(得分:1)
这里有几个问题 - 关于MapReduce,以及如何使用400台PC来完成工作。
你所描述的内容绝对是可能的,但我认为现阶段选择Map Reduce这样的特定编程模型可能为时尚早。
让我们首先考虑使用400台式机的想法。原则上,这是完全可行的。它有自己的挑战 - 请注意,例如,一夜之间留下一堆桌面级机器永远不会像专用集群节点那样节能。并且桌面节点不如集群节点可靠 - 有些可能会被关闭,有些可能会出现网络问题,还有一些问题仍在运行,这会减慢计算任务的速度。但是有一些框架可以解决这个问题。我熟悉的是Condor,它的名字正好利用了这种情况。它运行在Windows和Linux上(在混合环境中运行良好),并且非常灵活;即使在白天,您也可以自动使用未使用过的机器。
可能还有其他类似的“机会主义计算”系统,也许其他人可以建议它们。您也可以使用其他集群解决方案并使用传统的排队系统来运行您的工作(sge,rock等),但大多数人都认为这些机器总是可以使用它们。
对于MapReduce,如果你的大多数计算实际上都是(独立访问数据库)→(独立计算)→(将独立行放入第二个数据库),我认为MapReduce甚至可能是过度的你要。您可以编写一些脚本来将作业划分为单独的任务并单独运行它们,而不会产生整个MapReduce系统及其相关的非常特殊的文件系统的开销。但是如果你愿意,你可以在像condor这样的调度/资源管理器类型系统之上运行mapreduce。在condor之上的Hadoop有a long history。