2017-01-22 160 views
3

在EMR客戶端模式以及集羣模式下,在紗線上Spark spark java自定義接收器問題。Spark Streaming JavaCustomReceiver

以下是問題所在。

當我們在EMR集羣(紗線)上運行SparkCustomReader的JavaCustomReceiver時,它會隨機地綁定一個執行程序的偵聽器。因此,我們所要做的就是將所有傳入流量轉移到隨機選擇的IP。

事情變得更糟,當執行者失敗時。重新啓動後,它會嘗試將偵聽器綁定到另一個執行器上,並再次隨機選擇。我們再次需要將傳入流量轉移到新選擇的節點。

我的問題是: 1.我們不能將偵聽器綁定在我們選擇的特定執行器上嗎? (修復偵聽器綁定的ip) 如果不是...... 2.有沒有我們可以通過它以編程方式知道在哪個執行器上重新啓動了偵聽器? (因爲它選擇隨機節點來啓動該接收器) 而最重要的是。 3.我們不能在驅動程序運行的節點上綁定偵聽器嗎? (客戶端模式下運行時)

FYI

我們已經嘗試過接收器的超類的preferredLocation,但我們並沒有運氣一樣。

任何幫助,這是高度讚賞。

回答

1

我正在用Flume解決同樣的問題。即使我通過FlumeUtils.createStream我的首選位置主機名,它也會嘗試每個節點運行,並且除了確切的節點之外,它們都會失敗。如果我通過0.0.0.0作爲主機,那麼它的行爲就像你描述的那樣。它選擇一個隨機節點來啓動接收器。

問題: 資源管理器無法決定運行接收方的首選工作節點。

解決方案:

  1. 確保您覆蓋preferredLocation
  2. 確保您使用確切的節點引用作爲首選的位置由Spark+Flume Integration指示=>「請注意, 主機名應該是一樣的資源 管理器在集羣中使用的一個(Mesos,YARN或Spark Standalone),以便 資源分配可以匹配名稱並在 正確的機器上啓動接收器。「。

    對於我的情況FQDN,主機名不起作用。 IP是解決方案。

  3. 確保您傳遞的IP屬於Spark Worker節點(數據節點)。如果你傳遞非datanode機器的IP地址,它也會失敗。

    我還計劃在驅動程序作爲客戶端運行的節點上運行,但spark將接收器推送到工作節點。如果你的客戶端節點是一個工作節點,那麼這不會是一個問題。如果不是我樣的情況下該客戶端是一個王后(名稱)節點 - ,那麼你應該選擇一個涼爽的工作節點來運行接收器:)

我希望它能幫助。

+0

我試過這個,但它無法幫助。暫時我只通過在本地模式下運行來解決問題,現在放棄了Cluter模式的想法。對於可伸縮性,我仍然需要解決問題中列出的問題。不管怎麼說,多謝拉。 – desaiankitb