2016-12-08 52 views
1

我試圖從驅動程序機器一次啓動單獨的pyspark應用程序。所以這兩個應用程序都運行在同一個JVM中。雖然它創建了單獨的spark上下文對象,但其中一個作業失敗,說沒有得到broadcast_1。在同一個jvm中一次運行多個spark實例的最佳實踐?

16/12/06 8時十八分40秒WARN TaskSchedulerImpl:初始作業不接受任何資源;檢查你的集羣用戶界面,以確保工人註冊,並 擁有足夠的資源 16/12/06八時18分55秒WARN TaskSchedulerImpl:初始作業不接受任何資源;檢查您的羣集UI以確保工作人員已註冊並且 有足夠的資源 16/12/06 08:18:59信息CoarseGrainedSchedulerBackend $ DriverEndpoint:註冊執行程序NettyRpcEndpointRef(null)(172.26.7.195:44690)ID 52 16/12/06 8時18分59秒INFO TaskSetManager:在階段0.0開始任務0.0(TID 0,172.26.7.195,分區0,ANY,7307個字節) 16/12/06 8時18分59秒INFO CoarseGrainedSchedulerBackend $ DriverEndpoint:啓動執行者ID爲52的任務0:主機名:172.26.7.195。 16/12/06 08:19:00信息CoarseGrainedSchedulerBackend $ DriverEndpoint:註冊執行程序NettyRpcEndpointRef(null)(172.26.7.192:38343)與ID 53 16/12/06 08:19:02 WARN TaskSetManager:Lost task 0.0 in階段0.0(TID 0,172.26.7.195):java.io.IOException:org.apache.spark.SparkException:失敗 以獲得broadcast_1_1piece35的broadcast_1_piece0在org.apache.spark.util.Utils $ .tryOrIOException(Utils.scala :1260) at org.apache.spark.broadcast.TorrentBroadcast.readBroadcastBlock(TorrentBroadcast.scala:174) at org.apache.spark.broadcast.TorrentBroadcast._value $ lzycompute(TorrentBroadcast.scala:65) at org.apache .spark.broadcast.TorrentBroadcast._value(TorrentBroadcast.scala:65) 在org.apache.spark.broadcast.TorrentBroadcast.getValue(Torren tBroadcast.scala:89) 在org.apache.spark.broadcast.Broadcast.value(Broadcast.scala:70) 在org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:67) 在有機apache.spark.scheduler.Task.run(Task.scala:85) at org.apache.spark.executor.Executor $ TaskRunner.run(Executor.scala:274) at java.util.concurrent.ThreadPoolExecutor.runWorker( ThreadPoolExecutor.java:1145) 在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:615) 在java.lang.Thread.run(Thread.java:745)

我搜索一個谷歌很多,甚至在stackoverflow中,發現不建議在同一個JVM中運行多個spark上下文對象,而不是python支持。

我的查詢是:

  1. 在我的應用程序,我需要運行在計劃同時處理多個應用程序pyspark。有沒有什麼辦法可以在Spark創建單獨的sparkcontext對象時從spark驅動運行多個pyspark應用程序?

  2. 如果第一次查詢的回答是否定的,那麼我可以從駕駛員執行運行例如,一個應用程序,另一個但我可以在同一時間運行。

  3. 最後,在配置或最佳實踐在同一火花集羣中運行並行火花應用方面的任何其他更好的建議。

我的設置:

  1. 的Hadoop版本:Hadoop的2.7.1
  2. 星火:2.0.0
  3. 的Python:Python的3.4
  4. MongoDB的3.2.10

配置: VM-1:Hadoop主節點,Spark驅動程序&執行人,MongoDB的 VM-2:Hadoop的數據節點,星火執行人 Pyspark應用程序在正常crontab條目運行在VM-1

回答

1

你是指兩種火花的應用程序或一個火花應用和兩個火花上下文。兩個火花應用程序,每個都有自己的驅動程序和sparkcontext應該是可以實現的,除非你必須按照你的要求做一些共同的事情。

當你有兩個火花塞的應用程序,它們就像任何其他和資源需要像任何其他應用程序

+0

感謝Ramzy爲您的迴應。我的意思是運行兩個獨立的pyspark應用程序,它一次包含兩個單獨的sparkContext對象。 – user2122292

+0

雖然我在不同的時間運行單獨的兩個應用程序 - 它運行良好。但是,當我在大多數情況下運行在兩個錯誤之下時:1.未能獲得廣播和2. 16/12/06 08:21:00錯誤BlockManagerMasterEndpoint:在同一個執行器上有兩個不同的塊管理器註冊 - 將替換舊的BlockManag erId(1,172.26.7.195,43129)與新的BlockManagerId(1,172.26.7.195,51605) – user2122292

1

我也試圖做類似的事情共享,並得到了塊經理註冊錯誤。我試圖從同一個節點啓動2個不同的pyspark shell,經過許多搜索後,我意識到可能兩個pyspark shell都使用相同的驅動程序JVM,並且一個shell佔用另一個的BlockManager,另一個shell開始提供異常。

所以我決定用另一種方法,在這裏我用的是不同的節點啓動的驅動程序,並使用

pyspark --master <spark-master url> --total-executor-cores <num of cores to use> 

現在我不再收到錯誤相同的主鏈接這兩個程序。

希望這會有所幫助,並確實告訴您是否找到任何原因或解決方案在同一驅動程序中啓動多個spark-shells。

相關問題