Tôi gặp sự cố với việc cân bằng lại tài nguyên công việc của Apache Spark trên YARN Fair Scheduled hàng đợi.YARN không hỗ trợ tài nguyên dựa trên cổ phần hợp lý khi chạy công việc Spark
Đối với các thử nghiệm tôi đã định cấu hình Hadoop 2.6 (đã thử 2.7 cũng) để chạy ở chế độ phân phối giả với HDFS cục bộ trên MacOS. Đối với công việc gửi sử dụng "Pre-xây dựng Spark 1.4 cho Hadoop 2.6 và sau đó" (đã thử 1,5 cũng) phân phối từ Spark's website.
Khi thử nghiệm với cấu hình cơ bản trên Hadoop MapReduce công việc, Công cụ lập lịch biểu hoạt động như mong đợi: Khi tài nguyên của cụm vượt quá số lượng tối đa, cổ phần công bằng được tính toán và tài nguyên cho công việc trong hàng đợi khác nhau được cân nhắc và cân bằng dựa trên các tính toán này.
Thử nghiệm tương tự được thực hiện với công việc Spark, trong trường hợp đó YARN đang tính toán đúng số cổ phần hợp lý cho mỗi công việc, nhưng tài nguyên cho các thùng chứa Spark không được cân bằng lại.
Dưới đây là file conf của tôi:
$ HADOOP_HOME/etc/hadoop/sợi-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.spark_shuffle.class</name>
<value>org.apache.spark.network.yarn.YarnShuffleService</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
<name>yarn.scheduler.fair.preemption</name>
<value>true</value>
</property>
</configuration>
$ HADOOP_HOME/etc/hadoop/fair-scheduler.xml
<?xml version="1.0" encoding="UTF-8"?>
<allocations>
<defaultQueueSchedulingPolicy>fair</defaultQueueSchedulingPolicy>
<queue name="prod">
<weight>40</weight>
<schedulingPolicy>fifo</schedulingPolicy>
</queue>
<queue name="dev">
<weight>60</weight>
<queue name="eng" />
<queue name="science" />
</queue>
<queuePlacementPolicy>
<rule name="specified" create="false" />
<rule name="primaryGroup" create="false" />
<rule name="default" queue="dev.eng" />
</queuePlacementPolicy>
</allocations>
$ HADOOP_HOME/etc/hadoop/core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
$ HADOOP_HOME/etc/hadoop/core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
Và trường hợp thử nghiệm là:
Chạy một công việc trên "prod" hàng đợi với trọng lượng 40 (phải phân bổ 40% của tất cả các tài nguyên), như mong đợi công việc mất tất cả các nguồn lực miễn phí cần thiết (62,5% tài nguyên cụm).
./bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn-cluster \
--driver-memory 512M \
--executor-memory 768M \
--executor-cores 1 \
--num-executors 2 \
--queue prod \
lib/spark-examples*.jar 100000
Sau đó chạy các công việc tương tự trên "dev.eng" hàng đợi với trọng lượng 60, có nghĩa là công việc phải phân bổ 60% của tất cả các nguồn lực và giảm các nguồn lực công việc đầu tiên để ~ 40%.
./bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn-cluster \
--driver-memory 512M \
--executor-memory 768M \
--executor-cores 1 \
--num-executors 2 \
--queue dev.eng \
lib/spark-examples*.jar 100000
Thật không may, tài nguyên cụm không thay đổi - 62,5% cho công việc đầu tiên và 37,5% cho giây.
Thực ra nó sẽ giết các thùng chứa trong công việc đầu tiên. Tất cả phụ thuộc vào cách bạn thiết lập ưu đãi. – tk421