将计算迁移到云

时间:2011-10-26 13:03:06

标签: java refactoring hadoop cloud mapreduce

是否有任何自动工具可以将传统的单处理器程序转换为云,这意味着目标程序已准备好在云中执行(例如为Hadoop编写的程序)?如果没有,手动进行此类转换(可能是完全重写)时的最佳做法是什么?另外,我如何知道/评估遗留程序(或编程任务)是否适合计算?

示例:假设我有一个仅使用标准Java库(例如HashMap)编写的WordCount程序,如何将其转换为使用Hadoop编写的程序,如Hadoop发行版示例代码中提供的那样?

3 个答案:

答案 0 :(得分:1)

  

是否有任何自动工具可以将传统的单处理器程序转换为云?

我认为没有一种自动工具可以将传统的单处理器程序转换为云。

如果遗留程序是使用MapReduce范例编写的,那么在使用Hadoop进行一些修改的云中运行应该会有些简单。如果没有,则必须以MapReduce方式考虑问题,并使用Java或其他支持STDIN / STDOUT读/写的语言为Hadoop重写。

此外,如果编写旧程序的语言可以读/写STDIN / STDOUT,那么您可以使用Hadoop Streaming

  

另外,我如何知道/评估遗留程序(或编程任务)是否适合计算?

如果处理可以并行发生独立,并且数据也可以分布在多台计算机上,那么它可能是Hadoop的合适候选者。

HDFS(Hadoop分布式文件系统)专为高延迟和高吞吐量而设计。如果,要求是低延迟,那么你可以考虑HBase。

此外,HDFS专为大文件(GB,TB和PB)而设计。如果遗留应用程序包含太多小文件,则必须考虑alternative approach

  

还有一些事情要考虑。

Hadoop直接开箱即可进行一些最小的配置更改,但为了有效地运行它,必须调整很多参数,有时需要直接进入代码。

此外,尝试POC并从小事做起,以解决问题区域并评估利弊。

建议购买'Hadoop : The Definitive Guide'本书。

答案 1 :(得分:0)

与任何并发应用程序一样,它必须能够同时执行多个独立的操作。如果您希望它更快,那么您节省的时间将超过分发应用程序所需的开销。

在单词计数的例子中,你的瓶颈就是从磁盘读取文件的速度。要有效地分配字数,您必须在每台机器上拥有该文件的副本(或文件的一部分)。这当然比它节省的时间要长得多。

然而,假设文件访问不是您的瓶颈,您可以将文件分成几部分,以便每个线程或节点可以计算该部分中的单词,然后对结果求和以得到总数。

答案 2 :(得分:0)

有很多人在寻找神奇的工具来将使用串行计算方法实现的程序转换为高度并行的程序。

大多数情况下这不起作用,因为在代码中不容易找到并行性a)因为它不存在,或者b)因为看到它所需的分析超出了工具的当前技术。

例如,如果可以通过工具找到并行性,或者只是由程序员标记为并行(“注释”,“指令”,请参阅OpenMP),则可以使用自动插入并行性指令的工具。

这些工具主要在Fortran空间中找到(以支持超级计算任务)。 Java有一些研究工具;很多大学都在做“Java”+“并行”,因为它是“酷”[意思是“可用”]语言的热门话题。我怀疑你会找到一个真正适用于大学的工具;他们只做演示。

我猜你被困了,你必须自己做。