这可能更像是一个"理论"或"良好实践"问题,而不是严格的实践问题(代码或集群配置文件没有问题(。
因此,遵循这个简单的方案:
- 通过RESt(Apache Livy(提交,比如说,10个火花作业到一个YARN-SPARK集群,
- 由于资源管理配置,其中 5 个正在运行,5 个已接受/挂起,
这会导致10 个 AM 实例在主节点中同时运行(消耗大量 RAM(吗?
如果是这样的话,还有其他方法吗?考虑到这一点:
- 工作请求很快,
- 每次,集群将收到近 1000 个请求,
- 每个作业需要 15 秒才能完成(有时更短,具体取决于每次调用中接收到的数据量(,
- 有限的资源(3 个工作线程,每个 6GB 和 4 个内核 + 主节点(
让我知道我是否正确理解了你的问题。使用单独的 Spark-submit ,您意味着调用单独的请求。 因此,所有请求都将进入 yarn-scheduler,并且根据资源可用性,它们将处于运行或提交或挂起状态。
现在,我们有两种方法可以在 yarn 上提交作业 ->客户端模式和集群模式。
如果在客户端模式下提交作业,则驱动程序在客户端进程中运行,并且应用程序主节点仅用于从 YARN 请求资源。因此,不同的作业请求将在同一台计算机上创建不同的驱动程序(和关联的 AM(。这应该与你有关。
如果在群集模式下提交作业,则驱动程序将在由群集上的 YARN 管理的应用程序主进程中运行。因此,不同的作业请求将在不同的计算机上创建不同的应用程序主节点(内部驱动程序(。
因此,查看您的用例,很明显,对传入请求的大型使用负载均衡器。并在群集模式下提交作业。 在此之后,可以使用最佳做法属性优化应用程序。