Spark JobServer,发布版

时间:2016-11-22 15:40:58

标签: memory apache-spark spark-jobserver

我已设置spark-jobserver以在简化数据集上启用复杂查询。

作业服务器执行两个操作:

  • 与主远程数据库同步,它会转储某些服务器的表,减少并聚合数据,将结果保存为镶木地板文件,并将其作为sql表缓存在内存中。这项操作将每天进行;
  • 查询,当同步操作完成后,用户可以对聚合数据集执行SQL复杂查询,(最终)将结果导出为csv文件。每个用户每次只能进行一次查询,并等待其完成。

最大的表(缩减之前和之后,也包括一些连接)有近30M的行,至少有30个字段。

实际上我正在开发一台专用于作业服务器的32GB ram的开发机器,一切运行顺畅。问题是在生产中我们与PredictionIO服务器共享相同数量的ram。

我问的是如何确定内存配置以避免内存泄漏或火花崩溃。

我是新手,所以每个参考或建议都被接受。

谢谢

1 个答案:

答案 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/