*`export MESOS_NATIVE_JAVA_LIBRARY=<path to libmesos.so>`. 这个路径通常是 `<prefix>/lib/libmesos.so` 默认情况下前缀是 `/usr/local` 。请参阅上边的 Mesos 安装说明。在 Mac OS X 上,这个 library 叫做 `libmesos.dylib` 而不是 `libmesos.so`。
*`export MESOS_NATIVE_JAVA_LIBRARY=<path to libmesos.so>`. 这个路径通常是 `<prefix>/lib/libmesos.so` 默认情况下前缀是 `/usr/local`。请参阅上边的 Mesos 安装说明。在 Mac OS X 上,这个 library 叫做 `libmesos.dylib` 而不是 `libmesos.so`。
*`export SPARK_EXECUTOR_URI=<URL of spark-2.2.0.tar.gz uploaded above>`。
2. 还需要设置 `spark.executor.uri` 为 `<URL of spark-2.2.0.tar.gz>`。
* Java堆空间分为两个区域 Young 和 Old。Young 一代的目的是持有短命的物体,而 Old 一代的目标是使用寿命更长的物体。
* Java堆空间分为两个区域 Young 和 Old。Young 一代的目的是持有短命的物体,而 Old 一代的目标是使用寿命更长的物体。
* Young 一代进一步分为三个区域[ Eden , Survivor1 , Survivor2 ]。
* 垃圾收集过程的简化说明:当 Eden 已满时, Eden 上运行了一个小型 GC ,并将 Eden 和 Survivor1 中存在的对象复制到 Survivor2 。幸存者地区被交换。如果一个对象足够老,或者 Survivor2 已满,则会移动到 Old 。最后,当 Old 接近满时,一个完整的 GC 被调用。
* 垃圾收集过程的简化说明:当 Eden 已满时, Eden 上运行了一个小型 GC ,并将 Eden 和 Survivor1 中存在的对象复制到 Survivor2。幸存者地区被交换。如果一个对象足够老,或者 Survivor2 已满,则会移动到 Old。最后,当 Old 接近满时,一个完整的 GC 被调用。
Spark 中 GC 调优的目的是确保只有长寿命的 RDD 存储在 Old 版本中,并且 Young 版本的大小足够存储短命期的对象。这将有助于避免使用完整的 GC 来收集任务执行期间创建的临时对象。可能有用的一些步骤是:
* 如果太小的集合太多,而不是很多主要的 GC ,为 Eden 分配更多的内存将会有所帮助。您可以将 Eden 的大小设置为对每个任务需要多少内存的估计。如果确定 Eden 的大小 `E` ,那么您可以使用该选项设置年轻一代的大小 `-Xmn=4/3*E`。(按比例增加4/3是考虑幸存者地区使用的空间。)
* 如果太小的集合太多,而不是很多主要的 GC ,为 Eden 分配更多的内存将会有所帮助。您可以将 Eden 的大小设置为对每个任务需要多少内存的估计。如果确定 Eden 的大小 `E` ,那么您可以使用该选项设置年轻一代的大小 `-Xmn=4/3*E`。(按比例增加4/3是考虑幸存者地区使用的空间。)
Spark 喜欢将所有 task 安排在最佳的本地级别,但这并不总是可能的。在任何空闲 executor 中没有未处理数据的情况下, Spark 将切换到较低的本地级别。有两个选项: a )等待一个繁忙的 CPU 释放在相同服务器上的数据上启动任务,或者 b )立即在更远的地方启动一个新的任务,需要在那里移动数据。
Spark 通常做的是等待一个繁忙的 CPU 释放的希望。一旦超时,它将开始将数据从远处移动到可用的 CPU。每个级别之间的回退等待超时可以在一个参数中单独配置或全部配置; 有关详细信息,请参阅[配置页面](configuration.html#scheduling)`spark.locality` 上的 参数。如果您的 task 很长,并且本地化差,您应该增加这些设置,但默认值通常会很好。
Spark 通常做的是等待一个繁忙的 CPU 释放的希望。一旦超时,它将开始将数据从远处移动到可用的 CPU。每个级别之间的回退等待超时可以在一个参数中单独配置或全部配置; 有关详细信息,请参阅[配置页面](configuration.html#scheduling)`spark.locality` 上的 参数。如果您的 task 很长,并且本地化差,您应该增加这些设置,但默认值通常会很好。