安装和自定义

使用 Web 界面或 DC/OS CLI 安装 Spark

DC/OS Apache Spark 可在 Universe 中使用,可通过使用 GUI 或 DC/OS CLI 进行安装。

先决条件:

安全模式 服务帐户
已禁用 不可用
宽容 可选
严格 必需

默认安装

要安装 DC/OS Apache Spark服务,在 DC/OS CLI 上运行以下命令。这将安装 Spark DC/OS 服务、Spark CLI、调度程序和可选的历史服务器。请参阅 自定义安装 安装历史服务器。

dcos package install spark

转到 DC/OS GUI 的 服务 > 部署 选项卡,以监控部署。完成部署后 ,访问 Spark:http://<dcos-url>/service/spark/.

您也可以 通过 DC/OS GUI 安装 Spark

Spark CLI

您可以使用此命令安装 Spark CLI。如果您已经拥有运行中的 Spark 集群,但需要 Spark CLI,则会比较有用。

重要信息: 如果通过 DC/OS GUI 安装 Spark,您必须从 DC/OS CLI 作为单独步骤安装 Spark CLI。

dcos package install spark --cli

自定义安装

您可以通过创建 JSON 选项文件并将其传递至 dcos package install --options,来自定义默认配置属性。例如,要使用通用容器运行时间 (UCR) 启动 Dispatcher,创建一个名为 options.json 的文件:

{
  "service": {
    "UCR_containerizer": true
  }
}

使用在 options.json 文件中指定的配置安装 Spark :

dcos package install --options=options.json spark

提示: 运行此命令以查看所有配置选项:

dcos package describe spark --config

自定义 Spark 分布

DC/OS Apache Spark 不支持任意 Spark 分布,但 Mesosphere 提供多个预构建分布,主要用于选择 Hadoop 版本。

若要使用其中一个分布,自 此处 选择您的 Spark 分布,然后自此处选择相应的 Docker 镜像,然后使用这些值设置以下配置变量:

{
  "service": {
    "docker-image": "<docker-image>"
  }
}

最小安装

出于开发目的,您可以在本地 DC/OS 群集上安装 Spark。为此,您可以使用dcos-vagrant

  1. 根据 此处说明安装最小 DC/OS Vagrant。

  2. 安装 Spark:

    dcos package install spark
    
  3. 运行简单的作业:

    dcos spark run --class org.apache.spark.examples.SparkPi http://downloads.mesosphere.com.s3.amazonaws.com/assets/spark/spark-examples_2.10-1.5.0.jar"
    

注意: DC/OS Vagrant 等有限资源环境限制了 DC/OS 中的某些功能 Apache Spark。例如,除非您有足够的资源启动 5 代理群集,您将无法安装 DC/OS HDFS,因此无法启用历史服务器。

另外,有限的资源环境可能限制您的执行程序的大小,例如使用spark.executor.memory

多次安装

安装 DC/OS Apache Spark 包的多个实例提供基本的多团队支持。每个调度程序仅显示给定团队提交给它的作业,并且每个团队都可以被分配不同的资源。

要安装 DC/OS Apache Spark 包的多个实例,在安装过程中,在您的 JSON 配置文件中设置每个 service.name 为唯一名称(例如: spark-dev)。例如,创建 JSON 选项文件名 multiple.json

{
  "service": {
    "name": "spark-dev"
  }
}

使用指定的选项文件安装 Spark:

dcos package install --options=multiple.json spark

要指定使用哪个 Spark 实例,请添加 --name=<service_name> 到 CLI 中,例如

$ dcos spark --name=spark-dev run ...

严格模式的安装(设置服务身份认证)

如果您的集群设置为 严格 安全,则您需要按照以下步骤安装和运行 Spark。

服务帐户和密钥

  1. 安装 dcos-enterprise-cli 以获取 CLI 安全命令(如果您还没有安装):

    $ dcos package install dcos-enterprise-cli
    
  2. 创建一个密钥对,使用 Enterprise DC/OS CLI 创建 2048 位 RSA 公私密钥对。创建一个 公私密钥对并将每个值保存到当前目录中的单独文件中。

    $ dcos security org service-accounts keypair <your-private-key>.pem <your-public-key>.pem
    

    例如:

    dcos security org service-accounts keypair private-key.pem public-key.pem
    
  3. 创建一个新服务帐户,service-account-id(例如 spark-principal),其中包含公钥, your-public-key.pem.

    $ dcos security org service-accounts create -p <your-public-key>.pem -d "Spark service account" <service-account>
    

    例如:

    dcos security org service-accounts create -p public-key.pem -d "Spark service account" spark-principal
    

    在 Mesos 用语中,一个service-account 称为 principal,所以我们在这里可互换使用这些术语。

    注意: 您可以使用以下命令验证您的新服务帐户

    $ dcos security org service-accounts show <service-account>
    
  4. 创建密钥(例如,spark//<secret-name>) 与您的服务帐户, service-account, 和指定的私钥, your-private-key.pem

    # permissive mode
    $ dcos security secrets create-sa-secret <your-private-key>.pem <service-account> spark/<secret-name>
    # strict mode
    $ dcos security secrets create-sa-secret --strict <private-key>.pem <service-account> spark/<secret-name>
    

    例如,在严格模式 DC/OS 群集上:

    dcos security secrets create-sa-secret --strict private-key.pem spark-principal spark/spark-secret
    

注意: 使用 dcos security secrets list / 命令验证是否已创建密钥:

$ dcos security secrets list /

分配权限

必须创建权限,以便 Spark 服务能够启动 Spark 作业,这样作业本身可以启动代表其执行工作的执行程序。根据您的集群,需要记住几点:

  • RHEL/CenTos 用户当前不能作为用户 nobody以严格模式运行 Spark,必须作为用户 root 才能运行。这是帐户映射到 UID 的方式所致。CorEos 用户不受影响,并可作为 nobody 用户运行。以下我们将用户指定为 spark-user

  • Spark 默认为以 Mesos 默认角色运行,其由 * 符号表示。您可以部署多个 Spark 实例,而不用修改此默认值。如果您想覆盖默认 Spark 角色,您必须相应地修改这些代码样例。我们使用 spark-service-role 指定以下所用角色。

也可通过 UI 分配权限。

  1. 运行以下内容以创建 Spark 所需的权限:

    $ dcos security org users grant <service-account> dcos:mesos:master:task:user:<user> create --description "Allows the Linux user to execute tasks"
    $ dcos security org users grant <service-account> dcos:mesos:master:framework:role:<spark-service-role> create --description "Allows a framework to register with the Mesos master using the Mesos default role"
    $ dcos security org users grant <service-account> dcos:mesos:master:task:app_id:/<service_name> create --description "Allows reading of the task state"
    

    注意上述 dcos:mesos:master:task:app_id:/<service_name> 可能会 dcos:mesos:master:task:app_id:/spark

    例如,续上述:

    dcos security org users grant spark-principal dcos:mesos:master:task:user:root create --description "Allows the Linux user to execute tasks"
    dcos security org users grant spark-principal dcos:mesos:master:framework:role:* create --description "Allows a framework to register with the Mesos master using the Mesos default role"
    dcos security org users grant spark-principal dcos:mesos:master:task:app_id:/spark create --description "Allows reading of the task state"
    
    

    此处,我们正在使用服务帐户 spark-principal 和用户 root

  2. 如果您正在以 root 运行 Apache Spark 服务 (如我们在本例中),您需要增加 Marathon 额外权限:

    dcos security org users grant dcos_marathon dcos:mesos:master:task:user:root create --description "Allow Marathon to launch containers as root"
    

使用必要配置安装 Spark

在安装 Spark 之前,使用以下内容制作配置文件,这些设置也可通过 UI 完成:

$ cat spark-strict-options.json
{
"service": {
      "service_account": "<service-account-id>",
      "user": "<user>",
      "service_account_secret": "spark/<secret_name>"
      }
}

最小的例子是:

{
"service": {
      "service_account": "spark-principal",
      "user": "root",
      "service_account_secret": "spark/spark-secret"
      }
}

然后安装:

$ dcos package install spark --options=spark-strict-options.json

在提交时,向您的 Spark 作业添加必要的配置

要在严格的模式集群上运行作业,您必须添加 principal到命令行。例如,如果您想使用 Docker Engine 而非 Universal Container Runtime,您必须通过 SPARK_USER 环境变量指定用户:

$ dcos spark run --verbose --submit-args=" \
--conf spark.mesos.principal=<service-account> \
--conf spark.mesos.containerizer=mesos \
--class org.apache.spark.examples.SparkPi http://downloads.mesosphere.com/spark/assets/spark-examples_2.11-2.0.1.jar 100"