日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

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

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

概要

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

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

spark-defaults.conf

Spark-defaults.conf的作用范圍要搞清楚,編輯driver所在機(jī)器上的spark-defaults.conf,該文件會(huì)影響 到driver所提交運(yùn)行的application,及專門為該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,無法滿足最低的資源需求。

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,依此類推。

$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來啟動(dòng)多個(gè)worker,由于涉及到ssh的配置,比較麻煩,我這是圖簡(jiǎn)單的辦法。

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

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

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

spark-submit

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

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

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

$SPARK_HOME/bin/submit --help

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

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

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

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

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

問題1

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

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

No Space Left on the device

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

問題2

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

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

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

ulimit -a

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

ulimit -u 65535

修改允許打開的文件句柄

ulimit -n 65535

spark-shell

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

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

小結(jié)

本文部分內(nèi)容已由本人徽滬一郎在CSDN中通過”使用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ǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。