2011-10-26 161 views
1

是否有任何自動工具可以將舊式單處理器程序轉換爲雲,這意味着目標程序已準備好在雲中執行(例如,爲Hadoop編寫的程序)?如果不是,手動進行這種轉換(可能是全部重寫)的最佳做法是什麼?另外,如何知道/評估傳統程序(或編程任務)是否適合計算?將計算遷移到雲

例如:假設我有一個純粹使用標準Java庫(例如HashMap)編寫的WordCount程序,如何將它轉換爲使用Hadoop編寫的程序(如Hadoop發行版示例代碼中提供的程序)?

回答

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'書。

0

像任何併發應用程序一樣,它必須能夠同時執行多個獨立的事情。如果你希望這個速度更快,你可以節省的時間超過了應用程序分配的開銷。

在單詞計數的例子中,您的瓶頸就像它可以從磁盤讀取文件的速度有多快。爲了有效地分配字數,您必須在每臺機器上都有該文件的副本(或部分文件)。這當然可能比它節省的時間長得多。

然而,說文件訪問不是你的瓶頸,你可以將文件分解成多個部分,以便每個線程或節點可以統計該部分中的單詞,然後對結果進行求和得到總和。

0

有很多人在尋找魔法工具來將使用串行計算方法實現的程序轉換爲高度並行的程序。

大多數情況下這是行不通的,因爲在代碼中不容易找到並行性:a)因爲它不在那裏;或者b)因爲看到它的分析超出了當前的工具技術。

如果並行性可以通過工具找到,或者只是被程序員標記爲存在(例如「註釋」,「指令」,請參閱OpenMP),則可以使用自動插入並行指令的工具。

這些工具主要在Fortran空間中找到(用於支持超級計算任務)。有一些針對Java的研究工具;很多大學做「Java」+「並行」,因爲它是「酷」(意思是「可用」)語言的熱門話題。我懷疑你會找到一個真正適用於大學的工具;他們只做演示。

我猜你被卡住了,你必須自己做。