该文档给出了 Spark 如何在集群上运行、使之更容易来理解所涉及到的组件的简短概述。通过阅读 应用提交指南 来学习关于在集群上启动应用。
Spark 硬件配置
Spark 开发者都会遇到一个常见问题,那就是如何为 Spark 配置硬件。然而正确的硬件配置取决于使用的场景,我们提出以下建议。
存储系统
因为大多数 Spark 作业都很可能必须从外部存储系统(例如 Hadoop 文件系统或者 HBase)读取输入的数据,所以部署 Spark 时尽可能靠近这些系统是很重要的。我们建议如下 :
- 如果可以,在 HDFS 相同的节点上运行 Spark 。最简单的方法是在相同节点上设置 Spark standalone 集群模式,并且配置 Spark 和 Hadoop 的内存和 CPU 的使用以避免干扰(Hadoop 的相关选项为 : 设置每个任务内存大小的选项 mapred.child.java.opts 以及设置任务数量的选项 mapred.tasktracker.map.tasks.maximum 和 mapred.tasktracker.reduce.tasks.maximum)。当然您也可以在常用的集群管理器(比如 Mesos 或者 YARN)上运行 Hadoop 和 Spark。
- 如果不可以在相同的节点上运行,建议在与 HDFS 相同的局域网中的不同节点上运行 Spark 。
- 对于像 HBase 这样的低延时数据存储系统,在与这些存储系统不同的节点上运行计算作业来可能更有利于避免干扰。
构建 Spark
Apache Maven
构建 Apache Spark 参考了基于 Maven 的构建。构建 Spark 会使用 Maven ,而且需要 3.3.9 或者更新版本的 Maven 以及 Java 7 及以上版本。
Spark 优化指南
大多数 Saprk 计算本质是内存,Spark 程序可以碰到集群中的 CPU、网络带宽或存储 资源上的瓶颈。大多数情况下,如果数据加载到内存中,网络带宽就是瓶颈。但有时候,还需要做一些调整,比如 序列化形式存储 RDD (storing RDDs in serialized),以减少内存使用情况。还涉及两个主要方面:原始数据的系列化,良好的网络性能,以减少内存使用情况。下面做几个主要的讨论。
Spark Standalone 模式
Spark 不仅可以运行在 Mesos 或者 Yarn 上,而且还提供独立部署模式。可以手动启动一个 master 和 多个 worker,或选用我们提供的 脚本 来启动 standalone 集群。