Spark 独立模式

  • 将Spark Standalone安装到群集
  • 手动启动群集
  • 群集启动脚本
  • 将应用程序连接到群集
  • 启动Spark应用程序
  • 资源调度
  • 执行者调度
  • 监控和记录
  • 与Hadoop一起运行
  • 配置网络安全端口
  • 高可用性

Spark还提供了一种简单的独立部署模式。 可以手动启动独立群集,方法是手动启动主服务器,也可以使用我们提供的启动脚本。也可以在一台机器上运行这些守护进程进行测试。

将Spark Standalone安装到群集

要安装Spark Standalone模式,只需在集群上的每个节点上放置已编译的Spark版本即可。您可以在每个版本中获得预构建的Spark版本,也可以自行构建。

手动启动集群

可以通过执行一下命令来启动独立主服务器

./sbin/start-master.sh

一旦启动,master会打印出一个spark://HOST:PORT自己的URL,
可以在master的Web UI上找到此URL ,默认情况下为http:// localhost:8080
同样,你可以启动一个或多个工作人员并通过以下方式将他们连接到master:

./sbin/start-slave.sh 

启动工作程序后,查看master的Web UI(默认情况下为http:// localhost:8080)。您应该看到其中列出的新节点,以及CPU和内存的数量(减去操作系统剩余的1 GB)

最后,可以将以下配置选项传递给master和worker:

  • -h HOST, --host HOST 要收听的主机名
  • -i HOST, --ip HOST 要监听的主机名(不建议使用,请使用-h或--host)
  • -p PORT, --port PORT 要监听的服务端口(默认值:7077用于主服务器,随机用于工作服务)
  • --webui-port PORT Web UI端口(默认值:8080为master,8081为worker)
  • -c CORES, --cores CORES 允许Spark应用程序在计算机上使用的总CPU核心数(默认值:全部可用); 只对工人
  • -m MEM, --memory MEM 允许Spark应用程序在机器上使用的内存总量,格式为1000M或2G(默认值:机器的总RAM减去1 GB); 只对工人
  • -d DIR, --work-dir DIR 用于临时空间和作业输出日志的目录(默认值:SPARK_HOME / work); 只对工人
  • --properties-file FILE 要加载的自定义Spark属性文件的路径(默认值:conf / spark-defaults.conf)

启动集群脚本

要使用脚本启动spark集群,可以在Spark目录中创建一个为conf/slaves的文件,这个文教要包含启动Spark工作的所有计算机的主机名,每行一个。如何con f/slaves不存在,则启动默认为单个计算机(loaclhost),这对测试很方便。主机通过ssh访问每个工作机器。默认情况下,ssh是并行运行的,而且设置无密码访问。想设置密码,则可以设置环境变量SPARK_SSH_FOREGROUND并为每个工作人员提供密码。

设置此文件后,您可以使用以下shell脚本启动或停止群集,这些脚本基于Hadoop的部署脚本,并在SPARK_HOME/sbin以下位置提供:

sbin/start-master.sh - 在执行脚本的机器上启动主实例。
sbin/start-slaves.sh- 在conf/slaves文件中指定的每台计算机上启动从属实例。
sbin/start-slave.sh - 在执行脚本的机器上启动从属实例。
sbin/start-all.sh - 如上所述,启动主设备和多个从设备。
sbin/stop-master.sh- 停止通过sbin/start-master.sh脚本启动的主服务器。
sbin/stop-slaves.sh- 停止conf/slaves文件中指定的计算机上的所有从属实例。
sbin/stop-all.sh - 如上所述停止主站和从站。

请注意,必须在要运行Spark主服务器的计算机上执行这些脚本,而不是本地计算机。
可以选择通过设置环境变量来进一步配置群集conf/spark-env.sh。

开头创建此文件conf/spark-env.sh.template,并将其复制到所有工作计算机以使设置生效。可以使用以下设置:
SPARK_MASTER_HOST 将主服务器绑定到特定的主机名或IP地址,例如公共主机名或IP地址。
SPARK_MASTER_PORT 在另一个端口上启动主服务器(默认值:7077)。
SPARK_MASTER_WEBUI_PORT 主Web UI的端口(默认值:8080)。
SPARK_MASTER_OPTS 仅以“-Dx = y”形式应用于主服务器的配置属性(默认值:无)。请参阅下面的可能选项列表。
SPARK_LOCAL_DIRS 用于Spark中“临时”空间的目录,包括映射输出文件和存储在磁盘上的RDD。这应该位于系统中的快速本地磁盘上。它也可以是不同磁盘上多个目录的逗号分隔列表。
SPARK_WORKER_CORES 允许Spark应用程序在计算机上使用的核心总数(默认值:所有可用核心)。
SPARK_WORKER_MEMORY 的存储器总量以允许火花应用程序在计算机上,例如使用1000m,2g(默认值:总内存减去1 GB); 请注意,每个应用程序的单个内存都使用其spark.executor.memory属性进行配置。

  • SPARK_WORKER_PORT 在特定端口上启动Spark worker(默认值:random)。
  • SPARK_WORKER_WEBUI_PORT 工作者Web UI的端口(默认值:8081)。
  • SPARK_WORKER_DIR 用于运行应用程序的目录,其中包括日志和暂存空间(默认值:SPARK_HOME / work)。
  • SPARK_WORKER_OPTS 仅适用于“-Dx = y”形式的工作线程的配置属性(默认值:无)。请参阅下面的可能选项列表。
  • SPARK_DAEMON_MEMORY 要分配给Spark主服务器和工作服务器守护程序的内存(默认值:1g)。
  • SPARK_DAEMON_JAVA_OPTS Spark主服务器和工作服务器守护程序本身的JVM选项,格式为“-Dx = y”(默认值:无)。
  • SPARK_DAEMON_CLASSPATH Spark主服务器和工作服务器守护程序本身的类路径(默认值:无)。
  • SPARK_PUBLIC_DNS Spark主服务器和工作服务器的公有DNS名称(默认值:无)。

注意:启动脚本目前不支持Windows。要在Windows上运行Spark群集,请手动启动master和workers

SPARK_MASTER_OPTS支持以下系统属性

  • spark.deploy.retainedApplications 200 要显示的已完成应用程序的最大数量。较旧的应用程序将从UI中删除以维持此限制。

  • spark.deploy.retainedDrivers 200 要显示的已完成驱动程序的最大数量。较旧的驱动程序将从UI中删除以维持此限制。

  • spark.deploy.spreadOut 真正 独立集群管理器是应该跨节点扩展应用程序还是尝试将它们合并到尽可能少的节点上。对于HDFS中的数据位置,扩展通常更好,但对于计算密集型工作负载,整合更有效。

  • spark.deploy.defaultCores (无穷) 如果未设置,则在Spark的独立模式下为应用程序提供的默认核心数spark.cores.max。如果未设置,应用程序始终会获得所有可用内核,除非它们- spark.cores.max自行配置 在共享群集上将此值设置得较低,以防止用户默认抓取整个群集。

  • spark.deploy.maxExecutorRetries 10 限制独立集群管理器删除故障应用程序之前可能发生的最大背靠背执行程序故障数。如果应用程序有任何正在运行的执行程序,则永远不会删除它。如果某个应用程序spark.deploy.maxExecutorRetries连续遇到多个 故障,那么没有执行程序成功开始在这些故障之间运行,并且该应用程序没有正在运行的执行程序,那么独立集群管理器将删除该应用程序并将其标记为失败。要禁用此自动删除,请设置spark.deploy.maxExecutorRetries为 -1。

  • spark.worker.timeout 60 独立部署主服务器在没有收到心跳时认为工作程序丢失的秒数。
    SPARK_WORKER_OPTS支持以下系统属性

  • spark.worker.cleanup.enabled 假 启用定期清理worker / application目录。请注意,这仅影响独立模式,因为YARN的工作方式不同。仅清除已停止的应用程序的目录。

  • spark.worker.cleanup.interval 1800(30分钟) 控制工作人员在本地计算机上清理旧应用程序工作目录的时间间隔(以秒为单位)。

  • spark.worker.cleanup.appDataTtl 604800(7天,7 * 24 * 3600) 在每个worker上保留应用程序工作目录的秒数。这是一个生存时间,应该取决于您拥有的可用磁盘空间量。应用程序日志和jar将下载到每个应用程序工作目录。随着时间的推移,工作目录可以快速填满磁盘空间,特别是如果您经常运行作业。

  • spark.worker.ui.compressedLogFileLengthCacheSize 100 对于压缩日志文件,只能通过解压缩文件来计算未压缩文件。Spark缓存压缩日志文件的未压缩文件大小。此属性控制缓存大小。

将应用程序连接到群集
要在Spark集群上运行应用程序,只需将spark://IP:PORTmaster 的URL 传递给SparkContext 构造函数即可
要针对群集运行交互式Spark shell,请运行以下命令:


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

还可以传递一个选项--total-executor-cores 来控制spark-shell在群集上使用的核心数

启动Spark应用程序

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

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="

这在用户可能未单独配置最大核心数的共享群集上很有用。

执行者调度

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

监控和记录

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

此外,每个作业的详细日志输出也会写入每个从属节点的工作目录(SPARK_HOME/work默认情况下)。 将看到每个作业的两个文件,stdout并且stderr所有输出都写入其控制台。

与Hadoop一起运行

可以将Spark与现有Hadoop集群一起运行,只需在同一台计算机上将其作为单独的服务启动即可。要从Spark访问Hadoop数据,只需使用hdfs:// URL(通常hdfs://:9000/path,您可以在Hadoop Namenode的Web UI上找到正确的URL)。或者,您可以为Spark设置单独的群集,并且仍然可以通过网络访问HDFS; 这将比磁盘本地访问慢,但如果您仍然在同一局域网中运行,则可能不会引起关注(例如,您在每个机架上放置了几台Spark机器,您已启用Hadoop)。

配置网络安全端口

Spark大量使用网络,某些环境对使用严密的防火墙设置有严格的要求。有关要配置的端口的完整列表,请参阅 安全性页面。

高可用性

默认情况下,独立调度集群对工作人员故障具有弹性(因为Spark本身可以通过将其移动到其他工作人员而失去工作的弹性)。但是,调度程序使用Master来做出调度决策,这(默认情况下)会创建单点故障:如果Master崩溃,则不能创建新的应用程序。为了避免这种情况,我们有两个高可用性方案,详述如下。

你可能感兴趣的:(Spark 独立模式)