我是AWS EMR的新手,我面临着一个问题:让多个spark提交并行运行。在
我有一些作业计划每10分钟运行一次,还有一项作业每6小时运行一次。集群有足够的资源同时运行它们,但默认配置将它们放在单个根目录下。使它们按顺序运行的默认队列。这不是我想要的。 我必须在配置文件中写入什么?在
我尝试过将队列“1”、“2”和“3”添加到根队列中(在yarn中-站点.xml)并将每个作业提交到单独的队列中。但它们仍然按顺序运行(不是我想要的那样并行)。在
spark-submit --queue 1 --num-executors 1 s3://bucket/some-job.py
spark-submit --queue 2 --num-executors 1 s3://bucket/some-job.py
我找到了一个意想不到的解决办法。在
似乎当前的Hadoop文档并没有反映awsemr中纱线的正确配置,所以我使用了试错法来找到一种使其工作的方法。在
我用的不是容量调度程序,而是公平调度程序。但它仍然将所有应用程序放在同一个队列(“池”)中,所以我不得不手动将每个作业调度到单独的队列中,并配置这些队列以占用适当数量的资源。 这就是我所做的:
纱线-站点.xml在
公平调度的目的-公平地调度任务和分配资源。但是(出乎意料的是,lmao)如果没有启用抢占,它就不会这样做。第一个任务会吃掉所有的资源,如果你明确不要求的话,它在完成之前不会把它们给别人。在
我就是这样做的:
公平的-调度程序.xml在
^{pr2}$现在我有2个队列(大队列和小队列),小队列可以运行4个小任务,大队列可以同时运行2个大任务。大队列的权重更大,因此需要更多的资源。如果小队列占用了超过40%的资源,其他队列就会开始“国有化”它并带走资源。大队列(60%)也一样。 我不确定每个队列中发生了什么,但似乎资源试图在应用程序之间平均分配。在
我的新年愿望是hadoop和EMR的详细文档。在
简单地说,给出队列的配置。创建EMR时,可以为纱线调度员. 如果您有首选配置,请指定它。For example
这会给你几个排队槽。在
另一个选择是修改已经运行的EMR。与上面类似,但是可以通过awscli或其他sdk来完成。See the article。在
它使用命令
^{pr2}$以
some.json
为形式,如:相关问题 更多 >
编程相关推荐