2014-11-24 31 views
0

我正在動態評估一些數據庫模式。由於有大量的模式,在一臺PC上評估它們是不現實的。我想通過評估一個工作節點上的每個模式來使用Spark來完成這項工作。評估程序將如此。 (1)爲每個模式創建測試負載,並將所有測試負載存儲在Hadoop文件系統或工作節點的本地文件系統中。測試加載只是在.SQL文件中插入和選擇語句,但是大小很大。 (2)從文件系統讀取測試負載,並將語句提供給mysql以使用JDBC執行。我會記錄在同一時間花費的時間。Spark如何在一個工作節點上執行一個地圖動作?

我們可以將評估過程作爲「e」函數來處理,它將數據庫模式作爲輸入,並輸出評估的時間消耗。我們可以將該函數映射到模式數組,以獲得一系列評估時間。

有沒有辦法在Spark中實現這一點?由於我必須在一個工作節點上運行該功能,因此問題是:是否有辦法在一個工作節點上運行每個映射操作?

謝謝大家!

回答

0

在Spark中沒有簡單的方法。更重要的是,在Spark中進行此評估沒有意義。你需要的東西就像分佈式業務流程一樣。你有以下選擇:

  1. 使用Spark爲此。您可以在Yarn上啓動它,並在每個節點上指定可用於Yarn的最大內存量,這將阻止它爲每個節點調度多個執行容器。或者你可以像鎖定某個信號量或文件系統上的一個文件一樣進行破解,以防止除第一個容器外的所有其他容器執行。但是在任何一種情況下,使用Spark都不是最好的選擇
  2. 爲此寫入自定義代碼。很簡單 - 編寫shell/python/perl腳本來執行特定模式所需的代碼。接受模式名稱作爲參數。在主應用程序中,通過創建ssh會話到遠程計算機並等待它完成,獲取計算機的數量和計劃遠程執行
  3. 編寫一些更復雜的代碼。在ACID DBMS中,創建一個包含要評估的模式列表的表。創建工作,將連接到數據庫,得到該文件的模式之一,其標記爲執行(更新元數據表),然後執行你的測試邏輯和存儲測試結果存入數據庫

在我認爲選項2和3更容易實施並且更容易控制其結果。但是,如果實際上您需要每天運行此評估,並且這是您系統的某種路由任務,那麼我會將其編碼爲方法1與執行的火花的組合,方法3與ACID DBMS中的集中元數據組合

+0

感謝你真是太棒了!經過一段時間的思考之後,我也認爲它在某種意義上不是一個經典的地圖縮減工作。我遇到的主要問題是用一臺PC評估這些模式將花費15天時間,這是不能接受的。我需要一種方法來縮短評估時間。我想也許2是最簡單的方法。謝謝! – 2014-11-24 15:44:18

相關問題