天天看點

在本地将spark作業運作到遠端叢集

在本地IDE裡直接運作spark程式操作遠端叢集

一般運作spark作業的方式有兩種:

本機調試,通過設定master為local模式運作spark作業,這種方式一般用于調試,不用連接配接遠端叢集。

叢集運作。一般本機調試通過後會将作業打成jar包通過spark-submit送出運作。生産環境一般使用這種方式。

本文介紹第3種方式:

在本地将spark作業運作到遠端叢集中。這種方式比較少見,很多人認為不可行,包括我之前也是。經過試驗發現是可行的,可以滿足一些特定場景的需求。原理方面,可以參考這篇部落格,

http://blog.jasonding.top/2015/07/08/Spark/%E3%80%90Spark%E3%80%91Spark%E5%BA%94%E7%94%A8%E6%89%A7%E8%A1%8C%E6%9C%BA%E5%88%B6/,應該是将Driver運作在了本地,分布式計算則分發給各個節點。

操作方法

兩種方式:

在程式中設定

在run configuration中設定

在程式中使用HDFS路徑,會出現檔案系統不比對hdfs,可以将叢集中的hadoop配置中的core-site.xml和hdfs-site.xml拷貝到項目src/main/resources下

如果程式中使用了自定義的算子和依賴的jar包,需要将本項目jar包和依賴的jar包發送到叢集中SPARK_HOME/jars目錄下,可以用maven-assembly打成帶依賴的jar包,spark的jars相當于mvn庫。

注意叢集中每個節點的jars目錄下都要放自己的jar包。

如果遇到了節點間通信問題,可能是jar包沒有在所有節點放置好。

incompatible loaded等問題,是依賴的spark版本不比對,修改dependency。

至此,就可以直接在IDE中運作了。

大家有興趣的可以關注我的公衆号《資料庫漫遊指南》,涉及分布式系統、大資料和個人成長分享,歡迎大家一起交流進步

在本地将spark作業運作到遠端叢集