日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Apache Spark技术实战之6 -- spark-submit常见问题及其解决

發(fā)布時(shí)間:2025/7/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Apache Spark技术实战之6 -- spark-submit常见问题及其解决 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

除本人同意外,嚴(yán)禁一切轉(zhuǎn)載,徽滬一郎。

概要

編寫(xiě)了獨(dú)立運(yùn)行的Spark Application之后,需要將其提交到Spark Cluster中運(yùn)行,一般會(huì)采用spark-submit來(lái)進(jìn)行應(yīng)用的提交,在使用spark-submit的過(guò)程中,有哪些事情需要注意的呢?

本文試就此做一個(gè)小小的總結(jié)。

spark-defaults.conf

Spark-defaults.conf的作用范圍要搞清楚,編輯driver所在機(jī)器上的spark-defaults.conf,該文件會(huì)影響 到driver所提交運(yùn)行的application,及專門(mén)為該application提供計(jì)算資源的executor的啟動(dòng)參數(shù)

只需要在driver所在的機(jī)器上編輯該文件,不需要在worker或master所運(yùn)行的機(jī)器上編輯該文件

舉個(gè)實(shí)際的例子

spark.executor.extraJavaOptions -XX:MaxPermSize=896m spark.executor.memory 5g spark.serializer org.apache.spark.serializer.KryoSerializer spark.cores.max 32 spark.shuffle.manager SORT spark.driver.memory 2g

?上述配置表示為該application提供計(jì)算資源的executor啟動(dòng)時(shí), heap memory需要有5g。

這里需要引起注意的是,如果worker在加入cluster的時(shí)候,申明自己所在的機(jī)器只有4g內(nèi)存,那么為上述的application分配executor是,該worker不能提供任何資源,因?yàn)?g<5g,無(wú)法滿足最低的資源需求。

spark-env.sh

spark-env.sh中最主要的是指定ip地址,如果運(yùn)行的是master,就需要指定SPARK_MASTER_IP,如果準(zhǔn)備運(yùn)行driver或worker就需要指定SPARK_LOCAL_IP,要和本機(jī)的IP地址一致,否則啟動(dòng)不了。

配置舉例如下

export SPARK_MASTER_IP=127.0.0.1 export SPARK_LOCAL_IP=127.0.0.1

啟動(dòng)spark集群

第一步啟動(dòng)master

$SPARK_HOME/sbin/start-master.sh

第二步啟動(dòng)worker

$SPARK_HOME/bin/spark-class org.apache.spark.deploy.worker.Worker spark://master:7077

將master替換成MASTER實(shí)際運(yùn)行的ip地址

如果想在一臺(tái)機(jī)器上運(yùn)行多個(gè)worker(主要是用于測(cè)試目的),那么在啟動(dòng)第二個(gè)及后面的worker時(shí)需要指定—webui-port的內(nèi)容,否則會(huì)報(bào)端口已經(jīng)被占用的錯(cuò)誤,啟動(dòng)第二個(gè)用的是8083,第三個(gè)就用8084,依此類(lèi)推。

$SPARK_HOME/bin/spark-class org.apache.spark.deploy.worker.Worker spark://master:7077–webui-port 8083

?這種啟動(dòng)worker的方式只是為了測(cè)試是啟動(dòng)方便,正規(guī)的方式是用SPARK_HOME/sbin/start-slaves.sh來(lái)啟動(dòng)多個(gè)worker,由于涉及到ssh的配置,比較麻煩,我這是圖簡(jiǎn)單的辦法。

用$SPARK\_HOME/sbin/start-slave.sh$來(lái)啟動(dòng)worker時(shí)有一個(gè)默認(rèn)的前提,即在每臺(tái)機(jī)器上$SPARK_HOME必須在同一個(gè)目錄。

使用相同的用戶名和用戶組來(lái)啟動(dòng)Master和Worker,否則Executor在啟動(dòng)后會(huì)報(bào)連接無(wú)法建立的錯(cuò)誤。

我在實(shí)際的使用當(dāng)中,遇到”no route to host”的錯(cuò)誤信息,起初還是認(rèn)為網(wǎng)絡(luò)沒(méi)有配置好,后來(lái)網(wǎng)絡(luò)原因排查之后,忽然意識(shí)到有可能使用了不同的用戶名和用戶組,使用相同的用戶名/用戶組之后,問(wèn)題消失。

spark-submit

spark集群運(yùn)行正常之后,接下來(lái)的問(wèn)題就是提交application到集群運(yùn)行了。

Spark-submit用于Spark application的提交和運(yùn)行,在使用這個(gè)指令的時(shí)候最大的困惑就是如何指定應(yīng)用所需要的依賴包。

首先查看一下spark-submit的幫助文件

$SPARK_HOME/bin/submit --help

有幾個(gè)選項(xiàng)可以用來(lái)指定所依賴的庫(kù),分別為

  • --driver-class-path driver所依賴的包,多個(gè)包之間用冒號(hào)(:)分割
  • --jars ? driver和executor都需要的包,多個(gè)包之間用逗號(hào)(,)分割

為了簡(jiǎn)單起見(jiàn),就通過(guò)—jars來(lái)指定依賴,運(yùn)行指令如下

$SPARK_HOME/bin/spark-submit –class 應(yīng)用程序的類(lèi)名 \ --master spark://master:7077 \ --jars 依賴的庫(kù)文件 \ spark應(yīng)用程序的jar包

需要提醒的時(shí),這些上傳到worker的文件,需要定時(shí)做手工清理,否則會(huì)占用許多磁盤(pán)空間

問(wèn)題1

由于Spark在計(jì)算的時(shí)候會(huì)將中間結(jié)果存儲(chǔ)到/tmp目錄,而目前l(fā)inux又都支持tmpfs,其實(shí)說(shuō)白了就是將/tmp目錄掛載到內(nèi)存當(dāng)中。

那么這里就存在一個(gè)問(wèn)題,中間結(jié)果過(guò)多導(dǎo)致/tmp目錄寫(xiě)滿而出現(xiàn)如下錯(cuò)誤

No Space Left on the device

解決辦法就是針對(duì)tmp目錄不啟用tmpfs,修改/etc/fstab

問(wèn)題2

有時(shí)可能會(huì)遇到java.lang.OutOfMemory, unable to create new native thread的錯(cuò)誤,導(dǎo)致這種錯(cuò)誤的原因比較多。

有一種情況并非真的是內(nèi)存不足引起的,而是由于超出了允許的最大文件句柄數(shù)或最大進(jìn)程數(shù)。

排查的步驟就是查看一下允許打開(kāi)的文件句柄數(shù)和最大進(jìn)程數(shù),如果數(shù)值過(guò)低,使用ulimit將其調(diào)高之后,再試試問(wèn)題是否已經(jīng)解決。

ulimit -a

修改允許打開(kāi)的最大進(jìn)程數(shù)

ulimit -u 65535

修改允許打開(kāi)的文件句柄

ulimit -n 65535

spark-shell

上面講述了spark-submit提交Spark Application如何解決依賴庫(kù)的問(wèn)題,那如果是spark-shell的話,該怎么辦呢?

spark-shell的話,利用--driver-class-path選項(xiàng)來(lái)指定所依賴的jar文件,注意的是--driver-class-path后如果需要跟著多個(gè)jar文件的話,jar文件之間使用冒號(hào)(:)來(lái)分割。

小結(jié)

本文部分內(nèi)容已由本人徽滬一郎在CSDN中通過(guò)”使用Spark+Cassandra打造高性能數(shù)據(jù)分析平臺(tái)“發(fā)表。

轉(zhuǎn)載于:https://www.cnblogs.com/hseagle/p/4052572.html

總結(jié)

以上是生活随笔為你收集整理的Apache Spark技术实战之6 -- spark-submit常见问题及其解决的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。