Spark on Yarn 實踐

weixin_34075551發表於2018-05-27

配置

  1. spark-env.sh
HADOOP_CONF_DIR=/etc/hadoop/conf
# - YARN_CONF_DIR, to point Spark towards YARN configuration files when you use YARN
YARN_CONF_DIR=/etc/hadoop/conf
JAVA_HOME=/usr/java/jdk1.8.0_172
export LD_LIBRARY_PATH=:/usr/lib/hadoop/lib/native
  1. salves 配置
  2. spark-default.conf
spark.executor.cores=3
spark.default.parallelism=40
spark.executor.memory=1536m
spark.executor.memoryOverhead=512m
spark.driver.cores=1
spark.driver.memory=1g
spark.executor.instances=3
spark.serializer=org.apache.spark.serializer.KryoSerializer
  1. yarn-site.xml
<!-- comment mapreduce shuffle , change to spark_shuffle
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>

  <property>
    <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property> -->
<!--  for spark on yarn : spark_shuffle -->
  <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>

  1. yarn-env.sh
export YARN_HEAPSIZE=1000

總結

  • spark on yarn 模式下, spark只是個driver , 資源的分配、執行都是由yarn做的。 也即 spark的 master 、worker 沒有參與。

  • 不需要像standalone模式拷貝core-site.xml 和 hdfs-site.xml 。

  • 啟動引數 --master yarn , --deploy-mode 有兩種,cluster 和client 。 cluster模式下dirver 在am上,客戶端可以退出。 client模式下,driver在客戶端,am只用來跟yarn申請資源。

  • spark在yarn上執行的各種jar包需要指定, 通過引數 spark.yarn.archive or spark.yarn.jars 指定, 若未指定,會將jars目錄全部打包上傳 。 若兩引數都設定了, archive 會覆蓋 jars 引數。 為了避免每次執行都要上傳,可將jar包放到hdfs上,並配置好引數 , 如:

spark.yarn.archive=hdfs://hmcluster/somepath
  • 使用spark shuffle service 。 將yarn/spark-2.3.0-yarn-shuffle.jar 放到hadooplib下 , 配置yarn-site.xml 和 YARN_HEAPSIZE

  • 執行命令

bin/pyspark --master yarn --num-executors 6 --executor-cores 1 --executor-memory 1g

相關文章