導航:首頁 > 源碼編譯 > spark源碼編譯linux

spark源碼編譯linux

發布時間:2022-11-12 05:08:42

『壹』 spark1.3編譯出錯,求解決方法

把 pom.xml文件中的scalastyle的相關改成false
<groupId>org.scalastyle</groupId>
<artifactId>scalastyle-maven-plugin</artifactId>
<version>0.4.0</version>
<configuration>
<verbose>false</verbose>
<failOnViolation>false</failOnViolation>
<includeTestSourceDirectory>false</includeTestSourceDirectory>
<failOnWarning>false</failOnWarning>

『貳』 spark thrift server 與 網易 kyuubi thrift server

thrift server可以實現通過jdbc, beeline等工具,實現連接到spark集群,並提交sql查詢的機制。

默認情況下,cdh安裝的spark沒有包含thrift server模塊,因此我們需要重新編譯spark。

另外,為了不影響cdh自帶的spark,而且spark目前都是基於yarn運行的,本身也沒有什麼獨立的服務部署(除了history sever)。

所以,在一個集群中,可以部署安裝多個版本的spark。

我們使用源碼編譯的spark 2.4.0(其中hive的版本是1.2.1)

cdh集成的spark版本和Hive版本如下:

使用jdk1.8
修改spark提供的mvn,使用自行安裝的maven 3.8.1

使用make-distribution.sh可以幫助與我們編譯之後打包成tgz文件

修改pom.xml文件的配置如下。

最後,執行編譯命令如下:

這樣打出的包,就含有thrift server的jar包了。

最終打包文件,根目錄下。

之後就是解壓到其他目錄下後即可。

將hive-site.xml的文件連接過來,這樣spark就可以讀取hive的表了。

為了確保spark提交到yarn上運行,需要配置

cp spark-defaults.conf.template spar-defaults.conf

另外,可以在spark-env.sh中設置環境變數。

HADOOP_CONF_DIR

環境變數,也可以在/etc/profile中設置

啟動日誌可以查看,注意下埠佔用問題,如下。

啟動時候,使用beeline工具連接上,主要這里不用使用cdh默認安裝hive提供的beeline工具,應為版本太高。

使用編譯後spark生成beeline工具

參考beeline使用教程。

https://github.com/apache/incubator-kyuubi

kyuubi是基於thrift sever二次開發,在系能和安全上優於thrift server。

鑒於目前hive的版本是2.1,而最新的kyuubi的hive是2.3,所以採用前天版本的kyuubi,採用0.7版本,保證hive的版本小於當前集群中的hive版本。

使用build目錄下的dist腳本進行編譯和打包。

編譯成功後,會在更目錄下出現tar.gz的壓縮文件,如上圖。

之後解壓到目錄下。

配置bin/kyuubi-env.sh腳本,設置spark路徑

執行bin/start-kyuubi.sh命令即可。

訪問的方式同樣採用beelin,注意使用上面章節的beeline工具。

訪問後,可以通過beeline訪問到hive的表(在spark中已經配置了hive-site.xml)

!connect jdbc: hive2://xxxx:10009 即可。

『叄』 如何判斷linux下spark單機版環境已安裝好

在windows下安裝軟體大家都覺得很容易,只要雙擊setup或是install的圖標,然後跟著向導一步一步的按提示做就可以了,但是在linux下安裝軟體就不像windows下那樣容易了,有時你找到的是沒有編譯過的軟體源碼,那就更加的麻煩了,
這里就介紹一下如何安裝linux的軟體啦!
linux下的軟體一般都是經過壓縮的,主要的格式有這幾種:rpm、tar、tar.gz、tgz等。所以首先拿到軟體後第一件事就是解壓縮。
在xwindow下以rpm格式的軟體安裝比較容易,只要在把滑鼠移到文件上單擊右鍵,在彈出的菜單里會有專門的三項(只有在右鍵單擊rpm文件才會出現)show info,upgrade和install,這三項的意思大家都很清楚了,我就不多說了。
rpm格式說了,接著就是tar,tar.gz,tgz等,在xwindow下雙擊這些格式的文件就會自動解壓縮的,是解壓縮而不是像rpm那樣有install選項的,install文件會在你解壓縮後才出現,不過這里我要先說一下,在你雙擊install前建議先好好看一下readme,因為你所要安裝這些軟體可能是沒有編譯的,所以看一下會比較好。

『肆』 spark編譯在linux怎麼使用

在windows下安裝軟體大家都覺得很容易,只要雙擊setup或是install的圖標,然後跟著向導一步一步的按提示做就可以了,但是在linux下安裝軟體就不像windows下那樣容易了,有時你找到的是沒有編譯過的軟體源碼,那就更加的麻煩了,這里就介紹一下如...

『伍』 linux系統下編譯java代碼,顯示找不到包

lib/spark-assembly-1.0.0-hadoop2.2.0.jar:
加個冒號試試

『陸』 spark為什麼要在linux上運行

老師說要我們學習LINUX,說是要在哪個裡面編程,但是我還是不知道為什麼要在LINUX裡面編呢?聽說LINUX很穩定,是不是這個原因呢?
本文前提已經確安裝scala,sbt及spark 簡述程序掛載集群運行步驟:
1、構建sbt標准項目工程結構:SBT項目工程結構圖其:~/build.sbt文件用配置項目基本信息(項目名、組織名、項目版本、使用scala版本或者再配置些項目所需依賴包);project/build.properties文件配置要使用版本sbt項目操作;project/plugins.sbt文件給項目添加所需插件;project/Build.scala文件項目進行些復雜高級配置;詳細sbt安裝配置實用參見博文:
2、相應目錄編寫程序spark程序必須要創建SparkContext實例SparkContext("master", "projectName", "SPARK_HOME", "yourProject.jar path")
3、sbt compile命令編譯程序錯sbt package命令程序打包默認打包jar文件存放路徑:項目根目錄/target/scala-xx.xx.xx/your-project-name_xx.xx.xx-xx.jar
4、打包jar問價添加SPAK_CLASSPATH(linux根據作用范圍同種更改環境變數式說我配置式:spark根目錄conf/spark-env.sh文件添加SPARK_CLASSPATH:xxxxxxxx)
5、配置環境變數spark根目錄使用./run腳本運行程序例:./run spark.examples.SparkPi spark://masterIP:port注意程序涉及IO操作起默認路徑SPARK_HOME;至於何修改路徑待研究
轉載僅供參考

『柒』 如何在Linux環境下構建Spark的IDEA開發環境

注意,客戶端和虛擬集群中hadoop、spark、scala的安裝目錄是一致的,這樣開發的spark應用程序的時候不需要打包spark開發包和scala的庫文件,減少不必要的網路IO和磁碟IO。當然也可以不一樣,不過在使用部署工具spark-submit的時候需要參數指明classpath。
1:IDEA的安裝
官網jetbrains.com下載IntelliJ IDEA,有Community Editions 和& Ultimate Editions,前者免費,用戶可以選擇合適的版本使用。
根據安裝指導安裝IDEA後,需要安裝scala插件,有兩種途徑可以安裝scala插件:
啟動IDEA -> Welcome to IntelliJ IDEA -> Configure -> Plugins -> Install JetBrains plugin... -> 找到scala後安裝。
啟動IDEA -> Welcome to IntelliJ IDEA -> Open Project -> File -> Settings -> plugins -> Install JetBrains plugin... -> 找到scala後安裝。

如果你想使用那種酷酷的黑底界面,在File -> Settings -> Appearance -> Theme選擇Darcula,同時需要修改默認字體,不然菜單中的中文字體不能正常顯示。

『捌』 Linux裡面spark作用是什麼

Spark是通用數據處理引擎,適用於多種情況。 應用程序開發人員和數據科學家將Spark集成到他們的應用程序中,以快速地大規模查詢,分析和轉換數據。 與Spark最頻繁相關的任務包括跨大型數據集的互動式查詢,來自感測器或金融系統的流數據處理以及機器學習任務。
Spark於2009年開始運作,最初是加州大學伯克利分校AMPLab內部的一個項目。 更具體地說,它是出於證明Mesos概念的需要而誕生的,Mesos概念也是在AMPLab中創建的。 在Mesos白皮書《 Mesos:數據中心中的細粒度資源共享平台》中首次討論了Spark,其中最著名的作者是Benjamin Hindman和Matei Zaharia。
2013年,Spark成為Apache Software Foundation的孵化項目,並於2014年初被提升為該基金會的頂級項目之一。 Spark是基金會管理的最活躍的項目之一,圍繞該項目成長的社區包括多產的個人貢獻者和資金雄厚的企業支持者,例如Databricks,IBM和中國的華為。
從一開始,Spark就被優化為在內存中運行。 它比Hadoop的MapRece等替代方法更快地處理數據,後者傾向於在處理的每個階段之間向計算機硬碟寫入數據或從計算機硬碟寫入數據。 Spark的支持者聲稱,Spark在內存中的運行速度可以比Hadoop MapRece快100倍,並且在以類似於Hadoop MapRece本身的方式處理基於磁碟的數據時也可以快10倍。 這種比較並不完全公平,這不僅是因為原始速度對Spark的典型用例而言比對批處理更為重要,在這種情況下,類似於MapRece的解決方案仍然很出色。

『玖』 Spark源碼分析之SparkSubmit的流程

本文主要對SparkSubmit的任務提交流程源碼進行分析。 Spark源碼版本為2.3.1。

首先閱讀一下啟動腳本,看看首先載入的是哪個類,我們看一下 spark-submit 啟動腳本中的具體內容。

可以看到這里載入的類是org.apache.spark.deploy.SparkSubmit,並且把啟動相關的參數也帶過去了。下面我們跟一下源碼看看整個流程是如何運作的...

SparkSubmit的main方法如下

這里我們由於我們是提交作業,所有會走上面的submit(appArgs, uninitLog)方法

可以看到submit方法首先會准備任務提交的環境,調用了prepareSubmitEnvironment,該方法會返回四元組,該方法中會調用doPrepareSubmitEnvironment,這里我們重點注意 childMainClass類具體是什麼 ,因為這里涉及到後面啟動我們主類的過程。

以下是doPrepareSubmitEnvironment方法的源碼...

可以看到該方法首先是解析相關的參數,如jar包,mainClass的全限定名,系統配置,校驗一些參數,等等,之後的關鍵點就是根據我們 deploy-mode 參數來判斷是如何運行我們的mainClass,這里主要是通過childMainClass這個參數來決定下一步首先啟動哪個類。

childMainClass根據部署模型有不同的值:

之後該方法會把准備好的四元組返回,我們接著看之前的submit方法

可以看到這里最終會調用doRunMain()方法去進行下一步。

doRunMain的實現如下...

doRunMain方法中會判斷是否需要一個代理用戶,然後無論需不需要都會執行runMain方法,我們接下來看看runMain方法是如何實現的。

這里我們只假設以集群模式啟動,首先會載入類,將我們的childMainClass載入為位元組碼對象mainClass ,然後將mainClass 映射成SparkApplication對象,因為我們以集群模式啟動,那麼上一步返回四元組中的childMainClass的參數為ClientApp的全限定名,而這里會調用app實例的start方法因此,這里最終調用的是ClientApp的start方法。

ClientApp的start方法如下...

可以看到這里和之前我們的master啟動流程有些相似。
可以參考我上一篇文章 Spark源碼分析之Master的啟動流程 對這一流程加深理解。

首先是准備rpcEnv環境,之後通過master的地址獲取masterEndpoints端點相關信息,因為這里運行start方法時會將之前配置的相關參數都傳進來,之後就會通過rpcEnv注冊相關clientEndPoint端點信息,同時需要注意,這里會把masterEndpoints端點信息也作為構造ClientEndpoint端點的參數,也就是說這個ClientEndpoint會和masterEndpoints通信。

而在我上一篇文章中說過,只要是setupEndpoint方法被調用,一定會調用相關端點的的onStart方法,而這會調用clientEndPoint的onStart方法。

ClientEndPoint類中的onStart方法會匹配launch事件。源碼如下

onStart中匹配我們的launch的過程,這個過程是啟動driverWrapper的過程,可以看到上面源碼中封裝了mainClass ,該參數對應DriverWrapper類的全限定名,之後將mainClass封裝到command中,然後封裝到driverDescription中,向Master申請啟動Driver。

這個過程會向Mster發送消息,是通過rpcEnv來實現發射消息的,而這里就涉及到outbox信箱,會調用postToOutbox方法,向outbox信箱中添加消息,然後通過TransportClient的send或sendRpc方法發送消息。發件箱以及發送過程是在同一個線程中進行。

而細心的同學會注意到這里調用的方法名為SendToMasterAndForwardReply,見名之意,發送消息到master並且期待回應。

下面是rpcEnv來實現向遠端發送消息的一個調用流程,最終會通過netty中的TransportClient來寫出。

之後,Master端會觸發receiveAndReply函數,匹配RequestSubmitDriver樣例類,完成模式匹配執行後續流程。

可以看到這里首先將Driver信息封裝成DriverInfo,然後添加待調度列表waitingDrivers中,然後調用通用的schele函數。

由於waitingDrivers不為空,則會走LaunchDriver的流程,當前的application申請資源,這時會向worker發送消息,觸發Worker的receive方法。

Worker的receive方法中,當Worker遇到LaunchDriver指令時,創建並啟動一個DriverRunner,DriverRunner啟動一個線程,非同步的處理Driver啟動工作。這里說啟動的Driver就是剛才說的org.apache.spark.deploy.worker.DriverWrapper

可以看到上面在DriverRunner中是開辟線程非同步的處理Driver啟動工作,不會阻塞主進程的執行,而prepareAndRunDriver方法中最終調用 runDriver..

runDriver中主要先做了一些初始化工作,接著就開始啟動driver了。

上述Driver啟動工作主要分為以下幾步:

下面我們直接看DriverWrapper的實現

DriverWrapper,會創建了一個RpcEndpoint與RpcEnv,RpcEndpoint為WorkerWatcher,主要目的為監控Worker節點是否正常,如果出現異常就直接退出,然後當前的ClassLoader載入userJar,同時執行userMainClass,在執行用戶的main方法後關閉workerWatcher。

以上就是SparkSubmit的流程,下一篇我會對SparkContext的源碼進行解析。

歡迎關注...

閱讀全文

與spark源碼編譯linux相關的資料

熱點內容
信源編解碼實驗分析 瀏覽:475
前端程序員需要什麼證書 瀏覽:111
蚌埠前端程序員私活收入是多少 瀏覽:486
自動關機dos命令 瀏覽:323
我的app為什麼打不開 瀏覽:156
華為手機更新app放在哪裡 瀏覽:780
阿里雲伺服器包含數據嗎 瀏覽:299
伺服器的密封是什麼 瀏覽:149
php面向對象繼承 瀏覽:74
smtplibpython安裝 瀏覽:478
python模擬登錄網頁 瀏覽:817
在哪查看自己的python位置 瀏覽:35
南京java公司 瀏覽:586
合唱app哪個好用 瀏覽:471
英文版伺服器日誌怎麼看 瀏覽:70
笑臉買小人賣主圖指標公式源碼 瀏覽:949
javasocket時間設置 瀏覽:693
使役形命令形 瀏覽:233
尚矽谷程序員哪個好 瀏覽:254
政治論pdf 瀏覽:566