Spark on YARN是一种常用的分布式计算框架,它可在Hadoop集群上运行。Spark on YARN通过将应用程序分解成多个任务,将任务分配给多个节点上并行执行来加速计算。下面我们将深入分析Spark on YARN集群模式作业运行的全过程。
首先,用户提交Spark作业至YARN ResourceManager。ResourceManager将作业提交给NodeManager,NodeManager再启动一个YARN ApplicationMaster来管理此作业。ApplicationMaster会向ResourceManager申请资源,并在资源分配后将其分配给Excutors。
然后,Excutors和Driver都能向Morena(基于NIO的高性能网络库)提交事件。通常来说,最开始的事件是Excutors交给Driver。Excutors使Driver获取输入数据并执行作业。在这个过程中,Excutors运行Spark应用程序中定义的Tasks。它们从一组RDD中读取数据,使用算子在数据上执行操作,然后将结果写回其他RDD或将结果返回给Driver。
接下来,Driver会根据任务进度来跟踪它们的执行情况,并在需要时从NodeManagers重新启动执行器。使用线程池来管理上述请求(比如,从内存中读取RDD、从磁盘上读取HDFS中的RDD、记忆及磁盘持久化等。)。如果有相似的数据,我们可以使用Spark提供的cache()方法来缓存这些数据,以便以后可以更快地访问它们。
最后,当任务成功完成后,Spark on YARN将计算结果写回到远程文件系统,例如HDFS或Amazon S3。在这里,你可以使用Spark的API来保存计算结果并做渲染,比如获取TopN数据、创建连接表、合并数据集等等。
总的来说,Spark on YARN集群模式作业运行的过程是非常复杂的,但是它利用集群以并行的方式执行作业,从而提高了作业的执行效率。在实际工作中,需要根据具体的情况调整参数,以便获取最好的性能。