簡體   English   中英

在執行器上獲取 Spark session

[英]Get Spark session on executor

部署 spark structure 流應用程序后,如何在執行器上獲取 spark session 以部署具有相同 session 和相同配置設置的另一個作業?

如果在集群模式下運行spark,則無法將spark會話發送到執行程序,因為無法序列化spark會話對象,因此無法將其發送給執行程序。 此外,這樣做違背了火花設計原則。

如果你能告訴我問題陳述,我也許可以幫助你。

從技術上講,你可以在執行程序上獲得火花會話無論你運行它的模式並不重要,但不值得努力.Spark會話是各種內部火花設置的對象以及我們在啟動時提供的其他用戶定義設置。

這些配置設置在執行程序中不可用的唯一原因是因為它們中的大多數被標記為瞬態 ,這意味着這些對象將被發送為null,因為將它們發送給執行程序沒有邏輯意義,就像它沒有將數據庫連接對象從一個節點發送到另一個節點。

執行此操作的一種繁瑣方法是從驅動程序中的spark會話中獲取所有配置設置,在標記為可序列化的某個自定義對象中設置並將其發送給執行程序。 此外,您的執行器環境應該與驅動程序在所有火花罐/目錄和其他火花屬性(如SPARK_HOME等)方面相同,如果您在每次丟失某些東西時運行並意識到這些屬性可能會很忙 它將是一個不同的火花會話對象,但具有相同的設置。

更好的選擇是使用您為其他應用程序提供的相同設置運行另一個spark應用程序,因為一個spark會話與一個spark應用程序關聯。

這不可能。 我也有類似的要求然后我必須創建兩個單獨的主類和一個spark啟動器類,因為我根據我想要運行的類來做sparksession.conf.set(主類名)。 如果我想同時運行兩個,那么我在啟動另一個之前首先使用thread.sleep()來完成。 我還使用sparkListener代碼來獲取狀態是否已完成。

我知道這是一個遲到的回復。 只是覺得這可能有用。 因此,您可以在 spark 結構化流應用程序中使用類似以下代碼片段的內容:

spark_session_for_this_micro_batch = microBatchOutputDF._jdf.sparkSession()

您的自定義操作 function 可以使用此火花 session 在那里創建 dataframe。 您可以參考這篇中篇文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM