maven編譯spark
Ⅰ 如何為Sparksql添加hive中支持的而SparkSQL暫未支持的命令
前面已經有篇文章介紹如何編譯包含hive的spark-assembly.jar了,不清楚的可以翻看一下前面的文章。
cloudera manager裝好的spark,直接執行spark-shell進入命令行後,寫入如下語句:
val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)
你會發現沒法執行通過,因為cm裝的原生的spark是不支持spark hql的,我們需要手動進行一些調整:
第一步,將編譯好的包含hive的JAR包上傳到hdfs上配置的默認的spark的sharelib目錄:/user/spark/share/lib
第二步:在你要運行spark-shell腳本的節點上的明局帆/opt/cloudera/parcels/CDH-
5.3.0-1.cdh5.3.0.p0.30/lib/spark/lib/目錄下面,下載這個jar到這個目錄:hadoop fs -get
hdfs://n1:8020/user/spark/share/lib/spark-assembly-with-hive-maven.jar(具
體路徑替換成你自己的)。然後這個目錄下面原來會有個軟鏈接spark-assembly.jar指向的是spark-assembly-1.2.0-
cdh5.3.0-hadoop2.5.0-cdh5.3.0.jar,我們把這個軟鏈接刪除掉重新創建一個同名的軟鏈接:ln -s
spark-assembly-with-hive-maven.jar
spark-assembly.jar,指向我們剛激雹下載下來的那個JAR包,這個JAR包會在啟動spark-shell腳本時裝載到driver
program的classpath中去的,sparkContext也是在driver中創建出來的,所以需要將我們編譯的JAR包替換掉原來的
spark-assembly.jar包,這樣在啟動spark-shell的時候,包含hive的spark-assembly就被裝載到
classpath中去臘碧了。
Ⅱ 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 即可。
Ⅲ Hudi + Spark3入門第一課
歡迎訪問 我的博客
這兩個包不用自己編譯,可以從maven 中央倉庫 獲取,(頁面很不好找,hudi得把倉庫類目梳理一下了)貼兆螞乎一下。
使用上述預編譯的包,就省略族悉自己編譯的過程了。
官網發布的支持矩陣:
Spark 3 Support Matrix
可物畢以看到hudi 0.10版本默認構建出來是spark3.1的,也可以構建spark3.0的。
Ⅳ 運行環境jre版本和jar包編譯版本不一致導致:Unsupported major.minor version 52.0
我在本地使用 Intellij Idea 打包了一個 spark 的程序 jar 包,放到linux集群上運行,報錯信息是: Unsupported major.minor version 52.0
本機系統 -> windows10 開發工具 -> Intellij Idea 構建工具 -> maven
集群系統 -> Linux jre -> java(TM) SE Runtime Environment (build 1.7.0_80-b15)`
根據報錯 log 可以斷定的是由於我本地編譯打包所使用的 jdk 版本和 linux 集群的 jre 版本不一致導致的。stanford parser 和 jdk 版本對應關系為:
可以推斷出是由於我打包編譯時所使用的 jdk 版本是 jdk8,而集群的 jre 是7,才導致的問題。
maven 項目會用 maven-compiler-plugin 默認的 jdk 版本來進行編譯,如果不指明版本就容易出現版本不匹配的問題,可能導致編譯不通過的問題。解決辦法:在 pom 文件中配置 maven-compiler-plugin 插件。
方式一:
方式二:
如豎首果使用 scala 編寫 spark 的程序,在編譯打包時候要注意 scala 的版本號和 jdk 版本的對應關系,同時也要考慮集群上 jre 的版本。比如我的集群上所使用的 jre 的版本號為 7,那麼本機打包編譯的 jdk 版本必須旅搜為 7 ,那麼 scala 版本必須為 2.12 版本以下。
Intellij Idea 設置「開發」運拆纖歷行時所用的 jdk 版本的幾個地方:
如果上圖中 Intellij Idea 的開發運行 jdk 版本配置錯誤,在開發運行編譯的時候會報: Error:java: 無效的源發行版: xx
Ⅳ 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遠程debug之調試spark on yarn 程序
簡介
由於spark有多種運行模式,遠程調試的時候,雖然大體步驟相同,但是還是有小部分需要注意的地方,這里記錄一下調試運行在spark on yarn模式下的程序。
環境准備
需要完好的Hadoop,spark集群,以便於提交spark on yarn程序。我這里是基於CDH的環境
步驟
1.隨便寫個spark程序,比大頌如序列化一個集合,然後求和。然後使用maven打包,上傳至滾搜鄭集群漏缺。可以先提交運行一次,確保可以運行成功。
[root@kjtlxsvr5 bin]# ./spark-submit --class cn.spark.study.core.ParallelizeCollection --master yarn-cluster --num-executors 3 --executor-cores 2 --executor-memory 1G --driver-java-options "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8787" /home/spark-study-scala-0.0.1-SNAPSHOT-jar-with-dependencies.jar
現在有兩個辦法可以解決這個問題。
第一個辦法是節點少的話,通過修改上面IDEA遠程主機地址來一個一個試。
第二辦法可以精確知道ApplicationMaster在哪裡:
①通過CDH進入yarn的應用程序界面
②然後點擊進入該程序的詳細信息界面,如下圖就可以知道Applicationmaster在哪台NodeManager上:
③可以去該節點查看進程,的確有一個ApplicationMaster,然後在IDEA中修改為該遠程主機地址,開始debug程序看源碼吧!
Ⅶ maven打包${env}沒有值
打包路徑下不能存在中文和空格
使用歷蘆斗<scope>provided</scope>將依賴不進行打包,使用平台提供的依賴
同時通過參數:
--conf spark.executor.userClassPathFirst=true --conf spark.driver.userClassPathFirst=true
指定driver + executor均使用用戶jar這個錯都是在MAVEN插件在編譯的時候報的,所以問題一定是出在編譯的環節上。
這個時候就要好好檢查MAVEN的編譯配置,
1、看看配置肢磨里的編譯版本和本機環境上配置的java版本是否一致,有時候報錯的類有可能是引用了另外另外一個MAVEN模塊的代碼,也要看看那個模塊的版本配置編碼是否一致。但這並不是嘩磨一定的,有時候不一致也不會有問題,但這是一個可以注意的點。
Ⅷ maven中${spark.version}是什麼意思
你好,晌則旅很高興回答你的問題。
這個${spark.version}你可以理解為一個變數,這里是要使用這個變數的值。
在使用這個變數之前需要對他進宴凳行一個賦值,類似下圖。
如果有幫助到你,請點擊採納盯橡。
我解答的大部分都是軟體開發新人遇到的問題,如果有興趣,可以關注我。
Ⅸ intellij idea maven 開發spark環境搭建出現這個錯誤
在Spark快速入門指南 – Spark安裝與基礎使用中介紹了Spark的安裝與配置,在那裡還介紹了使用spark-submit提交應用,不過不能使用vim來開發Spark應用,放著IDE的方便不用。這里介紹使用Intellij Idea搭建Spark的開發環境。
1、Intellij Idea的安裝
由於Spark安裝在Ubuntu環境中,這里的Idea也安裝在Ubuntu中。首先是下載,到官網下載即可。下載完後解壓到待安裝的目錄:
sudo tar -zxvf ideaIU-2016.1.tar.gz -C /usr/local/
我解壓在了/usr/local目錄下,然後更改文件夾名:
mv ideaIU-2016.1 idea
然後修改文件的用戶和用戶組:
sudo chown -R hadoop:hadoop idea
這里的hadoop是我的用戶名和組名。這樣idea就安裝成功了。
為了啟動idea,進入idea/bin目錄,執行裡面的idea.sh:
bin/idea.sh
這樣就可以啟動idea。不過這樣不方便,可以在桌面新建文件idea.desktop,輸入如下內容:
[Desktop Entry]
Name=IdeaIU
Comment=Rayn-IDEA-IU
Exec=/usr/local/idea/bin/idea.sh
Icon=/usr/local/idea/bin/idea.png
Terminal=false
Type=Application
Categories=Developer;
這樣就創建了一個桌面快捷方式。
2、maven的安裝與配置
Maven 是一個項目管理和構建自動化工具。作為一個程序員,都有過為了使用某個功能而在項目中添加jar包的經歷,使用的框架多了,需要添加的jar包也多,而梁仿maven能夠自動為我們添加需要的jar包。首先在maven官網上下載maven:
下載之後在Downloads目錄下有如下文件:
liu@Binja:~/Downloads$ ls
apache-maven-3.3.9-bin.tar.gz
解壓到待安裝的目錄:
liu@Binja:~/Downloads$ sudo tar -zxvf apache-maven-3.3.9-bin.tar.gz -C /usr/local/
同樣,修改文件夾名和用戶名:
liu@Binja:/usr/local$ sudo mv apache-maven-3.3.9/ maven
liu@Binja:/usr/local$ sudo chown -R liu:liu maven
liu@Binja:/usr/local$ ll maven
total 52
drwxr-xr-x 6 liu liu 4096 3月 28 20:24 ./
drwxr-xr-x 12 root root 4096 3月 28 20:26 ../
drwxr-xr-x 2 liu liu 4096 3月 28 20:24 bin/
drwxr-xr-x 2 liu liu 4096 3月 28 20:24 boot/
drwxr-xr-x 3 liu liu 4096 11月 11 00:38 conf/
drwxr-xr-x 3 liu liu 4096 3月 28 20:24 lib/
-rw-r--r-- 1 liu liu 19335 11月 11 00:44 LICENSE
-rw-r--r-- 1 liu liu 182 11月 11 00:44 NOTICE
-rw-r--r-- 1 liu liu 2541 11月 11 00:38 README.txt
liu@Binja:/usr/local$
然後將maven添加到環境變數中:
sudo vim ~/.bashrc
在最後添加下面的內橡攔纖容:
export PATH=$PATH:/usr/local/maven/bin
使更改生效:
liu@Binja:/usr/local$ source ~/.bashrc
這樣衡虧maven就安裝好了。
3、用剛安裝的maven配置idea
起始idea自帶了maven,這里配置自己安裝的maven。
一次選擇File->Setting->Build,Execution,Deployment->Build Tools->Maven,如下圖:
在右側里的Maven home directory里設置Maven的安裝目錄,就我這里是/usr/local/maven,在User settings file里設置Mavne的配置文件,我這里使用默認的文件,在Local repository里設置本地包的管理倉庫,選擇右側的Override後,可以自定義自己的倉庫目錄,以後Maven自動下載的包就會存放在這里。
單擊OK後maven就配置完了。然後就可以創建一個maven項目。
4、創建maven項目
依次選擇File->New->New Project,出現如下界面:
左側可以選擇項目的類型,這里選擇Maven,右側可以選擇是否使用模板,勾選上面的Create from archetype後,就可以在下面選擇項目模板,這里選擇Scala的模板。
一路next之後,這里填一下groupID和artifactID,名字隨便取:
然後一路next,填寫上項目的名字,OK就可以了。
這樣新項目就創建成功了,新項目的文件結構如下圖:
其中的pom.xml就是配置我們項目的依賴包的。src是項目存放代碼的目錄,下面有兩個結構相同的目錄main和test,其中我們在main目錄下編寫代碼,test編寫測試代碼,這里先不使用測試,可以將test目錄刪除。右側展示的就是pom.xml文件的內容:
勾選右上角的Enable Auto-Import,這樣Idea就會自動下載項目所需的依賴包。還要注意中間的Scala版本,選擇自己使用的版本。