详解 Spark 的 Standalone 集群

已经安装Java,并且正确设置了JAVA_HOHE环境变量的服务器,在$SPARK_HOME路径,通过如下命令即可在单机环境上本地运行交互式Spark shell。Spark shell可以理解为Spark自身提供的交互式应用程序。

./bin/spark-shell --master local[2]

--master,指定分布式集群的Master-Spark-Url。local以一个线程本地运行;local[N]以n个线程本地运行。--master选项默认是local[*]方式启动Spark。

要获得/bin/spark-shell脚本完整的选项列表,请使用--help选项运行spark-shell脚本。


Standalone集群

除了在MesosYARN集群管理器上运行之外,Spark还提供了一个简单的Standalone部署模式。通过手动启动一个Master服务进程和一个或多个Worker服务进程,或者使用提供的集群启动脚本,来启动一个Standalone集群。也可以在一台机器上运行Master和Worker进程进行测试。

Spark中的安全性默认为OFF。这可能意味着默认情况下很容易受到攻击。

安装Spark的Standalone集群

要安装Spark Standalone模式,只需在集群的每个节点上放置一个编译版本的Spark

手动方式启动集群

手动启动集群,不需要配置$SPARK_HOME/conf/slaves文件,只需要在主机执行start-master.sh脚本, 在从机执行start-slave.sh脚本。

通过如下命令,启动一个standalone模式的Master服务。

./sbin/start-master.sh

启动master后,会在控制台打印一个spark://host:portMaster-Spark-Url。也可以在master的Web UI上找到这个Master-Spark-Url,master的Web UI默认路径是http://localhost:8080。
通过Master-Spark-Url将worker进程连接到Master,该Master-Spark-Url可以作为SparkContext的“master”参数传递给SparkContext,从而使Application连接到集群。

通过如下命令,启动worker,并通过以下方式将他们连接到master服务器。

./sbin/start-slave.sh <Master-Spark-Url>

启动了一个worker后,可以在master的Web UI界面看到新启动的worker节点,以及它的CPU和内存数量。

最后,可以将以下配置选项传递给masterworker:

Argument

Meaning

-h HOST, --host HOST

Hostname to listen on

-i HOST, --ip HOST

Hostname to listen on (deprecated, use -h or --host)

-p PORT, --port PORT

Port for service to listen on (default: 7077 for master, random for worker)

--webui-port PORT

Port for web UI (default: 8080 for master, 8081 for worker)

-c CORES, --cores CORES

Total CPU cores to allow Spark applications to use on the machine (default: all available); only on worker

-m MEM, --memory MEM

Total amount of memory to allow Spark applications to use on the machine, in a format like 1000M or 2G (default: your machine's total RAM minus 1 GB); only on worker

-d DIR, --work-dir DIR

Directory to use for scratch space and job output logs (default: SPARK_HOME/work); only on worker

--properties-file FILE

Path to a custom Spark properties file to load (default: conf/spark-defaults.conf)

集群启动脚本

要用启动脚本启动一个Standalone模式的spark集群,需要在$SPARK_HOME/conf目录中创建一个名称为slaves文件,该文件必须包含要启动spark workers的所有机器的主机名,每行一个。如果$SPARK_HOME/conf/slaves文件不存在,则启动脚本默认为一台机器(localhost),这对于测试很有用。
注意,Master节点通过ssh访问每个Worker节点。默认情况下,ssh并行运行,并且需要设置集群节点间的无秘钥访问。如果没有设置集群节点间的无秘钥访问,则可以设置环境变量SPARK_SSH_FOREGROUND,并为每个worker连续提供密码。

设置好$SPARK_HOME/conf/slaves文件后,使用以下shell脚本启动或停止集群,这些脚本在$SPARK_HOME/sbin中。

脚本说明
start-master.sh

在执行脚本的节点上启动Master服务。

start-slave.sh在执行脚本的节点上启动Worker服务。
start-slaves.sh在conf/slaves文件中指定的每个节点上启动一个Worker服务。
start-all.sh启动一个Master服务和多个Worker服务,如上所述。
stop-master.sh停止通过sbin/start-master.sh脚本启动的Master服务。
stop-slaves.sh停止conf/slaves文件中指定的节点上的所有Worker服务。
stop-all.sh停止一个Master服务和多个Worker服务,如上所述。

请注意,除start-slave.sh脚本之外,其他脚本必须在要运行Master服务的节点上执行。

可以通过在conf/spark-env.sh中设置环境变量来进一步配置集群。该文件默认不存在,需要将conf/spark-env.sh.template文件重命名为conf/spark-env.sh,并将其复制到所有worker节点上,以使设置生效。以下设置可用:

环境变量

含义

SPARK_MASTER_HOST

将Master绑定到特定的主机名或IP地址,例如公共主机名或IP地址。

SPARK_MASTER_PORT

Start the master on a different port (default: 7077).

SPARK_MASTER_WEBUI_PORT

Port for the master web UI (default: 8080).

SPARK_MASTER_OPTS

以“-Dx=y”(默认值:无)形式,仅适用于Master的配置属性。有关可能选项的列表,请参见下面。

SPARK_LOCAL_DIRS

Directory to use for "scratch" space in Spark, including map output files and RDDs that get stored on disk. This should be on a fast, local disk in your system. It can also be a comma-separated list of multiple directories on different disks.

SPARK_WORKER_CORES

Total number of cores to allow Spark applications to use on the machine (default: all available cores).

SPARK_WORKER_MEMORY

Total amount of memory to allow Spark applications to use on the machine, e.g. 1000m, 2g (default: total memory minus 1 GB); note that each application's individual memory is configured using its spark.executor.memory property.

SPARK_WORKER_PORT

Start the Spark worker on a specific port (default: random).

SPARK_WORKER_WEBUI_PORT

Port for the worker web UI (default: 8081).

SPARK_WORKER_DIR

Directory to run applications in, which will include both logs and scratch space (default: SPARK_HOME/work).

SPARK_WORKER_OPTS

Configuration properties that apply only to the worker in the form "-Dx=y" (default: none). See below for a list of possible options.

SPARK_DAEMON_MEMORY

Memory to allocate to the Spark master and worker daemons themselves (default: 1g).

SPARK_DAEMON_JAVA_OPTS

JVM options for the Spark master and worker daemons themselves in the form "-Dx=y" (default: none).

SPARK_DAEMON_CLASSPATH

Classpath for the Spark master and worker daemons themselves (default: none).

SPARK_PUBLIC_DNS

The public DNS name of the Spark master and workers (default: none).

将应用程序连接到群集

要在Spark集群上运行application,只需将Master服务的spark://host:port传递给SparkContext构造函数即可。

要在集群上运行交互式Spark shell,请运行以下命令

./bin/spark-shell --master spark://IP:PORT

通过选项--total-executor-cores <numCore>来控制Spark Shell在集群上使用的核心数。

启动Spark应用程序

$SPARK_HOME/bin/spark-submit脚本提供了向集群提交已编译的Spark应用程序的最直接方法。

对于standalone模式的集群,Spark目前支持两种部署模式:
client模式下driver程序直接在spark-submit进程中启动,该进程充当应用程序的client;
cluster模式下driver程序是从集群内的一个worekr进程启动的,client在履行提交应用程序的职责而不等待应用程序完成时立即退出。

如果应用程序是通过spark-submit脚本启动的,那么应用程序的jar包将自动分发到所有Worker节点。
对于所提交的应用程序依赖的任何其他jar包,通过--jar选项指定,多个jar包使用逗号作为分隔符(例如--jars jar1,jar2)。
此外,Standalone模式下使用cluster部署模式的应用程序,退出时使用非零退出代码支持自动重新启动应用程序。要使用这个特性,可以在启动应用程序时使用--supervise选项。

要控制应用程序的配置或执行环境,请参见Spark配置

可以通过以下方式,终止一个反复失败的应用程序。

./bin/spark-class org.apache.spark.deploy.Client kill <master url> <driver ID>

可以在Master的Web UI界面页面(http://<master url>:8080)找到driver ID

资源调度

standalone集群模式目前只支持跨应用程序的简单FIFO(先进先出)调度程序。
为了允许多个并发用户,可以控制每个应用程序将使用的最大资源数。默认情况下,它将获取集群中的所有核心,这只有在一次运行一个应用程序时才有意义。可以通过在SparkConf中设置spark.cores.max来限制核心的数量。例如:

val conf = new SparkConf()
  .setMaster(...)
  .setAppName(...)
  .set("spark.cores.max", "10")
val sc = new SparkContext(conf)

此外,可以在集群主进程上配置spark.deploy.defaultCores参数,以更改未将spark.cores.max设置为小于无穷大的应用程序的默认值。为此,请将以下内容添加到conf/spark-env.sh:

export SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=<value>"

这对于共享集群很有用,因为在共享集群中,用户可能没有单独配置最大数量的核心。

executors调度

分配给每个executor的核心数量是可配置的。当spark.executor.cores被显式设置时,如果worker有足够的内核和内存,那么可以在同一个worker上启动来自同一应用程序的多个executor。否则,每个executor默认获取worker上的所有可用核心,在这种情况下,在一个单独的计划迭代期间,每个应用程序只能在每个worker上启动一个executor。

监控和日志记录

Spark的standalone模式提供了一个基于Web的用户界面来监视集群。Master服务和每个Worker服务都有自己的Web UI,用于显示集群和作业统计信息。默认情况下,通过8080端口访问Master的Web UI。可以在配置文件中或通过命令行选项更改端口。

此外,每个job的详细日志输出也会写入每个Worker节点的work目录(默认为$SPARK_HOME/work)。在work目录中将看到每个作业有stdoutstderr两个文件,所有输出都写入其控制台。

与Hadoop一起运行

想要将Spark集群与Hadoop集群一起运行,可以在相同的节点上分别启动Hadoop服务和Spark服务。要从Spark访问Hadoop数据,只需使用hdfs://url(通常是hdfs://<namenode>:9000/path,可以在Hadoop NamenodeWeb UI上找到正确的url)。
或者,可以为
Spark设置一个单独的集群,并让它通过网络访问HDFS;这将比本地磁盘访问慢,但是如果仍然在相同的局域网中运行例如,在Hadoop所在的每个机架上放置一些Spark机器,那么这可能不是问题。

为网络安全配置端口

一般来说,Spark集群及其服务并不部署在公网环境中。它们通常是私有服务,应该只能在部署Spark的组织的网络中访问。对Spark服务使用的主机和端口的访问应该仅限于需要访问服务的原始主机。

这对于使用standalone资源管理器的集群尤其重要,因为它们不支持像其他资源管理器那样的细粒度访问控制。

有关要配置的端口的完整列表,请参见安全性页面。

HA

待补充……

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值