2016-11-22 34 views
1

我已经设置了一个spark-jobserver以在精简数据集上启用复杂查询。Spark JobServer,发布的内存设置

的jobserver执行两个操作:

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

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

其实我正在开发32GB ram专用于作业服务器的开发机器,并且一切都很顺利。问题在于,在生产环境中,我们拥有与PredictionIO服务器共享的相同数量的ram。

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

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

谢谢

回答

1

拿一个例子, 如果你有32克RAM的服务器。 设置以下参数:

spark.executor.memory = 32g 

拿一张纸条:

的可能首先想到的是使用--num执行人6 --executor核芯15 --executor - 内存63G。但是,这是错误的方法,因为:

63GB +执行程序内存开销不适合NodeManager的63GB容量 。应用程序主节点将在节点的一个 上占用核心,这意味着该节点上的15核执行程序 不会有空间。每个执行程序15个内核可能会导致HDFS I/O 吞吐量不佳。

更好的选择是使用--num-executors 17 --executor-cores 5 --executor-memory 19G。为什么?

该配置会导致在除了一个 AM之外的所有节点上执行三个执行程序,其中有两个执行程序。 - 执行程序的内存为 ,导出为(每个节点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/