在运行map reduce作业的群集上运行Spark的最佳方法是什么?
第一个问题是关于与数据的共处。当我启动Spark应用程序时,它会分配执行程序,对吧?它如何知道在哪里分配它们,以便它们与作业所需的数据位于相同的节点中? (一个工作可能需要一个数据,而工作可能需要另一个工作)
如果我保持Spark应用程序,那么执行程序从集群中的机器获取插槽是否意味着对于协同定位我需要在每个节点上都有一个Spark执行器?
执行程序运行时,意味着我的地图减少作业的资源更少,对吧?我可以为每个作业停止并启动Spark应用程序,但是它会消除执行程序启动和运行的速度优势,正确(对于长时间运行的进程,还有热点的好处吗?)
我已经读过容器重新调整大小(YARN-1197)会有所帮助,但这不仅仅意味着执行程序会停止并启动吗?这与停止spark应用程序不一样(换句话说,如果没有实时执行程序,那么将Spark应用程序与关闭它并在作业需要执行程序时启动有什么好处)
答案 0 :(得分:2)
执行程序的数据位置:Spark在启动执行程序时但在启动执行程序时不处理数据位置。因此,您可能需要在每个数据节点上都有执行程序(即使您在每个节点上都没有执行程序,HDFS冗余也可以帮助您。)
长时间运行过程:是否关闭应用程序取决于用例。如果你想提供实时应用程序请求/火花流,你不会想要关闭火花。但是,如果您正在进行批处理,则应关闭执行程序。对于跨作业的数据缓存,您应该考虑HDFS Cache或tachyon。您还可以考虑动态分配spark,如果它们在一段时间内没有使用,您可以使用它来释放执行者。(http://spark.apache.org/docs/latest/configuration.html#dynamic-allocation)。