操作場景
? ? ? ? Spark系統(tǒng)在運(yùn)行含shuffle過程的應(yīng)用時(shí)匙奴,Executor進(jìn)程除了運(yùn)行task淹冰,還要負(fù)責(zé)寫shuffle數(shù)據(jù)亦歉,給其他Executor提供shuffle數(shù)據(jù)脯燃。當(dāng)Executor進(jìn)程任務(wù)過重嵌牺,導(dǎo)致GC而不能為其他Executor提供shuffle數(shù)據(jù)時(shí)帮辟,會影響任務(wù)運(yùn)行速址。
? ? ? ? External shuffle?Service是長期存在于NodeManager進(jìn)程中的一個(gè)輔助服務(wù)。通過該服務(wù)來抓取shuffle數(shù)據(jù)由驹,減少了Executor的壓力芍锚,在Executor?GC的時(shí)候也不會影響其他Executor的任務(wù)運(yùn)行。
操作步驟
1. 在NodeManager中啟動External shuffle Service蔓榄。
? ? a. 在“yarn-site.xml”中添加如下配置項(xiàng):
<property> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<name>yarn.nodemanager.aux-services</name> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??<value>spark_shuffle</value> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? </property>
<property>? ? <name>yarn.nodemanager.aux-services.spark_shuffle.class</name>? ? <value>org.apache.spark.network.yarn.YarnShuffleService</value></property><property>? ? <name>spark.shuffle.service.port</name>? ? <value>7337</value></property>
? ? b. 添加依賴的jar包并炮。
? ? 拷貝“${SPARK_HOME}/lib/spark-1.5.1-yarn-shuffle.jar”到“${HADOOP_HOME}/share/hadoop/yarn/lib/”目錄下。
? ? c. 重啟NodeManager進(jìn)程甥郑,也就啟動了External?shuffle Service逃魄。
2. Spark應(yīng)用使用External shuffle Service。
? ● 在“spark-defaults.conf”中必須添加如下配置項(xiàng):
spark.shuffle.service.enabled? true
spark.shuffle.service.port? ? ? 7337
注意:
? ? 1. 如果 “yarn.nodemanager.aux-services” 配置項(xiàng)已存在壹若,則在 value 中添加 “spark_shuffle”嗅钻,且用逗號和其他值分開皂冰。
? ? 2. “spark.shuffle.service.port”的值需要和上面“yarn-site.xml”中的值一樣。