2013-10-10 73 views
1

我準備了一個在當前我在多個項目中使用的MapReduce akka_mapreduce_example的工作Akka/Java實現。Akka配置將Map工作負載分佈在不同的網絡節點上?

我現在想要將Map步驟工作負載分佈在許多單獨的網絡節點上,我想知道我必須在Akka配置中更改哪些內容才能實現這一目標。我需要在「Master」機器(觸發MapReduce的機器也運行reduce步驟)和配置「Slave」機器(幫助分發Map工作負載)中進行配置更改。

我目前的application.conf適用於單臺機器,非常簡單。我希望這隻需要配置更改,而不是代碼更改,或者?

回答

2

根據您的代碼,所需的全部是配置更改。你需要在你的配置是這樣的設置遠程處理起來:

akka { 
    actor { 
    provider = "akka.remote.RemoteActorRefProvider" 
    } 
    remote { 
    enabled-transports = ["akka.remote.netty.tcp"] 
    netty.tcp { 
     hostname = "127.0.0.1" 
     port = 2552 
    } 
} 
} 

然後,你需要告訴阿卡,你的演員將在遠程節點上創建:

akka { 
    actor { 
    deployment { 
     /sampleActor { 
     remote = "akka.tcp://[email protected]:2553" 
     } 
    } 
    } 
} 

欲瞭解更多信息你可以查看excellent documentation。我鏈接了2.2.1版本的文檔,如果您使用的是不同版本,請務必查看該版本的文檔。版本之間往往會有變化,儘管舊版本的版本仍然可以在更新的版本中運行(儘管它們可能會被棄用),但反過來顯然是一個問題。

你會注意到我說「取決於你的代碼」。我的意思是,所有發送到遠程節點的消息都需要是可序列化的,並且你不在演員中使用任何靜態成員。

如果您想要更多靈活性,可以查看全新的羣集支持。這將爲您提供一個非常靈活,動態的對等系統,您可以隨心所欲地進行放大和縮小。你可能需要稍微修改一下代碼。

希望有所幫助。

1

工作負載可以分佈在多個節點上,但您必須選擇兩種處理模式,即基於拉或基於處理的處理。

兩者都有優點和缺點。但拉是更具吸引力,因爲它提供了容錯功能,您可以跟蹤工作人員的工作分配。要開始查看http://blog.goconspire.com/post/64901258135/akka-at-conspire-part-5-the-importance-of-pulling

示例工作代碼是https://github.com/typesafehub/activator-akka-distributed-workers

處理快速生產者和緩慢的消費者問題可以使用阿卡流的背壓。

對於在系統的極端負載情況下動態創建工作參與者,你必須拿出你自己的設計。但是解決方案表示要向集羣添加更多節點以將工作分配給新節點。