如何指定Spark2作業中Driver和Executor使用指定範圍內端口

1.文檔編寫目的


在CDH集羣中提交Spark作業,大家也都知道Spark的Driver和Executor之間通訊端口是隨機的,Spark會隨選擇1024和65535(含)之間的端口,因此在集羣之間不建議啓用防火牆。本篇文章Fayson主要介紹如何指定Spark2作業中Driver和Executor使用指定範圍內的端口進行通訊。

  • 內容概述

1.配置Spark Driver和Executor端口範圍

2.驗證端口分配

  • 測試環境

1.CM和CDH版本爲5.15

2.Spark版本爲2.2.0

2.配置Spark Driver和Executor端口範圍


1.登錄到CM管理界面,進入Spark服務的配置界面

2.在Gateway分類中配置也搜索“spark-defaults.conf”,添加如下配置:

spark.driver.port=10000
spark.blockManager.port=20000
spark.port.maxRetries=999

(可左右滑動)

3.保存配置,並重新部署Spark2的客戶端配置

3.驗證端口分配


1.向集羣提交一個Spark2的作業

spark2-submit --class org.apache.spark.examples.SparkPi\
    --master yarn --num-executors 4 --driver-memory 1g\
    --driver-cores 1 --executor-memory 1g --executor-cores 1\
    /opt/cloudera/parcels/SPARK2/lib/spark2/examples/jars/spark-examples_2.11-2.2.0.cloudera2.jar 10000

(可左右滑動)

2.查看Spark作業的運行界面查看Driver和Executor使用的端口號

4.總結


本篇文章Fayson主要是以Spark2爲例說明限制Driver和Executor使用指定範圍內的端口號。細心的朋友可以看到Driver啓動的時候會監聽兩個端口示例中是10001和20000。關於這兩個端口的解釋如下:

1.spark.driver.port的10001端口是用來監聽來自executor的請求,在executor起來的時候需要與drive通信並獲取具體的任務信息,是driver使用的管理調度用端口。

2.spark.blockManager.port(20000)端口是driver和executor直接數據傳輸端口(比如cached data frame, broadcast vars)。

3.在Spark運行中,blockManager將不會和YARN交互,而driver是會和YARN中運行的Application Master進程交互。

4.Spark2中指定Executor的端口號是通過spark.blockManager.port指定與Spark1的(spark.executor.port)指定參數不同。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章