问题
在集群上运行笔记本或工作时,多次成功运行,但有时司机停止工作,将显示错误消息,如:
司机暂时不可用。
意外引发司机已经停止并重新启动。
失去了连接到集群。笔记本可能是分离的。
如果你检查集群事件日志,你会发现Driver_Not_Responding事件与消息相关的垃圾收集(GC):
驱动程序,但没有反应,可能由于GC。
如果你检查Ganglia指标当问题发生时,你会注意到司机经历高负载节点(例如,显示一个橙色/红色)。
让司机的IP,这样您就可以过滤Ganglia指标指示板,可以导航到集群的火花集群UI >主选项卡并得到司机的IP(火花主)从第一行:“火花大师在火花:/ / x.x.x.x:港口”。
导致
这个错误的一个常见原因是,司机正在内存瓶颈。,当这一切发生的时候,司机崩溃的内存(伯父)条件,重新启动或无法响应,由于频繁的完整的垃圾收集。内存瓶颈的原因可以有下列:
- 司机实例类型不是最优加载驱动程序上执行的。
- 有内存密集型操作上执行的司机。
- 有许多笔记本电脑或者工作并行运行在同一集群。
解决方案
解决方案例子的情况各不相同。解决这个问题最简单的方法在缺乏具体细节是提高司机的记忆。你可以增加司机记忆只需升级驱动节点类型在集群上你的砖的工作区中编辑页面。
其他重要的事情需要考虑:
- 避免内存密集型操作,比如:
- 收集()操作符,给司机带来了大量的数据。
- 转换的一个大型DataFrame熊猫DataFrame使用toPandas()函数。
- 如果这些操作是必不可少的,确保足够的司机内存可用;否则,寻找替代能源,可以并行化执行你的代码。例如,为数据处理用火花而不是熊猫,火花毫升代替常规的Python机器学习库(例如,scikit-learn)。
- 避免共享互动集群上运行批处理作业。
- 分发工作负载到不同的集群。无论多大的集群,火花的功能驱动程序不能被分布在一个集群。
- 做一个定期重新启动集群互动(例如每天)在低负载清除剩余的内存中的对象从之前的运行。您可以使用集群重启REST API端点还有你最喜欢的自动化工具来自动化。
- 在一个集群上运行特定的笔记本在隔离评估究竟需要多少内存来执行成功的笔记本。