有时在工作中,我需要使用我们的集群来运行一些东西,但它被使用了100%,因为当有可用资源时,某些作业会扩展,并且我的作业在很长一段时间内不会执行。是否可以限制正在运行的应用程序的资源?或者我们应该以某种方式选择一种不同的调度策略,如果是,那么是哪一种?
我们使用Capacity Scheduler。
这取决于你的应用程序是什么,你是100%来自大型查询(hive应用程序(还是来自另一个应用程序,比如说spark应用程序。
Spark可以很容易地吃掉整个集群,甚至几乎什么都不做,这就是为什么你需要定义给这些应用程序、内存、驱动程序内存等多少cpu。
当你做火花提交时,你就完成了,例如
spark-submit --master yarn --deploy-mode cluster --queue {your yarn queue} {program name} --driver-cores 1 --driver-memory 1G --num-executors 2 --executor-cores 1 -executor-memory 2G
这将限制该应用程序仅使用这些资源(加上一点开销(
如果你有一个更复杂的环境,那么你需要按队列进行限制,例如,queue1=20%的集群,最多只有20%,默认情况下,如果没有人使用它,queue1可以达到100%的集群。
理想情况下,您应该有几个具有适当限制的队列,并非常小心抢占。