我已设置spark-jobserver以在简化数据集上启用复杂查询。
作业服务器执行两个操作:
最大的表(缩减之前和之后,也包括一些连接)有近30M的行,至少有30个字段。
实际上我正在开发一台专用于作业服务器的32GB ram的开发机器,一切运行顺畅。问题是在生产中我们与PredictionIO服务器共享相同数量的ram。
我问的是如何确定内存配置以避免内存泄漏或火花崩溃。
我是新手,所以每个参考或建议都被接受。
谢谢
答案 0 :(得分:2)
举个例子, 如果你有一个32克ram的服务器。 设置以下参数:
spark.executor.memory = 32g
记下:
可能的第一个冲动是使用--num-executors 6 --executor-cores 15 --executor-memory 63G。但是,这是错误的方法,因为:
63GB +执行程序内存开销不适合63GB容量 NodeManagers。应用程序主机将在一个核心上占用核心 节点,意味着15核心执行者没有空间 在那个节点上。每个执行程序15个核心可能导致错误的HDFS I / O. 吞吐量。
更好的选择是使用--num-executors 17 --executor-cores 5 --executor-memory 19G。为什么呢?
此配置会在除一个节点之外的所有节点上生成三个执行程序 与AM,将有两个执行者。 --executor-memory是 派生为(每个节点63/3执行者)= 21. 21 * 0.07 = 1.47。 21 - 1.47 ~19。
如果您想了解更多信息,请在此处进行说明: http://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-2/