独立模式(Standone Mode)启动Spark

来源:互联网 发布:adobe xd windows 编辑:程序博客网 时间:2024/06/07 03:35
手动启动
进入Spark安装根目录
cd ~/Rimon/spark-2.1.0-bin-hadoop2.7/

输入命令以独立模式(Standone Mode)启动Spark
./sbin/start-master.sh

启动成功后,主服务器将打印出一个spark:// HOST:PORT URL,它可以用来将worker连接到它,或者作为“master”参数传递给SparkContext。 可以在浏览器上输入服务器地址(默认情况下为http:// localhost:8080)找到此URL。


输入命令连接到上一步获取到的URL
./sbin/start-slave.sh <master-spark-URL>
连接成功后可以在浏览器的Workers部分看到新的节点,以及它的CPU和内存的数量(减去操作系统的一千兆字节)。

注:可以将以下配置选项传递给主服务器和工作线程
参数说明-h HOST, --host HOST要监听的主机名-i HOST, --ip HOST要侦听的主机名(已弃用,使用-h或--host)-p PORT, --port PORT服务端口监听(默认:主机为7077,节点随机)--webui-port PORT用于Web UI的端口(默认值:主机为8080,节点为8081)-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 worker的所有计算机的主机名,每行一个。 如果conf / slaves不存在,则启动脚本默认为单个计算机(localhost),这对于测试很有用。主机通过ssh访问每个工作机。 默认情况下,ssh并行运行,并且需要设置无密码(使用私钥)访问。 如果您没有无密码设置,可以设置环境变量SPARK_SSH_FOREGROUND,并为每个工作程序连续提供密码。
设置此文件后,可以使用以下shell脚本启动或停止集群,这些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
- 停止通过bin / 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地址,例如公用主机。SPARK_MASTER_PORT在不同的端口上启动主实例(默认值:7077)。SPARK_MASTER_WEBUI_PORT主Web UI的端口(默认值:8080)。SPARK_MASTER_OPTS仅适用于主机的配置属性,格式为“-Dx = y”(默认值:none)。SPARK_LOCAL_DIRS用于Spark中“scratch”空间的目录,包括映射输出文件和存储在磁盘上的RDD。 这应该在您的系统中的快速本地磁盘上。 它也可以是不同磁盘上的多个目录的逗号分隔列表。SPARK_WORKER_CORES允许Spark应用程序在机器上使用的内核总数(默认值:所有可用内核)。SPARK_WORKER_MEMORY允许Spark应用程序在计算机上使用的内存总量,例如 1000m,2g(默认值:总内存减1 GB); 请注意,每个应用程序的单独内存都使用其spark.executor.memory属性配置。SPARK_WORKER_PORT在特定端口上启动从属实例(默认值:随机)。SPARK_WORKER_WEBUI_PORT从属实例Web UI的端口(默认值:8081)。SPARK_WORKER_DIR运行应用程序的目录,其中包括日志和临时空间(默认值:SPARK_HOME / work)。SPARK_WORKER_OPTS仅适用于工作程序的配置属性,格式为“-Dx = y”(默认值:none)。 请参阅下面的可能选项列表。SPARK_DAEMON_MEMORY要分配给Spark主机和工作程序守护程序本身的内存(默认值:1g)。SPARK_DAEMON_JAVA_OPTSSpark主节点和worker守护程序本身的JVM选项的形式为“-Dx = y”(默认值:none)。SPARK_PUBLIC_DNSSpark主机和工作线程的公共DNS名称(默认值:none)。
启动脚本目前不支持Windows。 要在Windows上运行Spark集群,请手动启动master和worker。
SPARK_MASTER_OPTS支持以下系统属性:
属性名称默认值说明spark.deploy.retainedApplications200要显示的已完成应用程序的最大数量。 较旧的应用程序将从UI中删除以维持此限制。spark.deploy.retainedDrivers200要显示的已完成驱动程序的最大数量。 较旧的驱动程序将从UI中删除以维持此限制。spark.deploy.spreadOuttrue独立集群管理器是否应该跨节点传播应用程序,或者尝试将它们合并到尽可能少的节点上。 扩展通常更好地用于HDFS中的数据本地化,但是对于计算密集型工作负载,合并更有效。spark.deploy.defaultCores无穷如果没有设置spark.cores.max,则为Spark独立模式下应用程序提供的默认核心数。 如果未设置,应用程序总是获取所有可用的内核,除非它们自己配置spark.cores.max。 在共享集群上将其设置为较低,以防止用户默认抓取整个集群。spark.deploy.maxExecutorRetries10限制在独立集群管理器删除故障应用程序之前可能发生的背靠背执行程序故障的最大数量。 如果应用程序具有任何正在运行的执行程序,将永远不会被删除。 如果应用程序在一行中遇到多于spark.deploy.maxExecutorRetries故障,则没有任何执行程序成功地在这些故障之间运行,并且应用程序没有运行的执行程序,则独立集群管理器将删除该应用程序并将其标记为失败。 要禁用此自动删除,请将spark.deploy.maxExecutorRetries设置为-1。spark.worker.timeout60秒数,在此秒数之后,独立部署主节点在没有接收到心跳的情况下认为该工作节点丢失。
SPARK_WORKER_OPTS支持以下系统属性:
属性名称默认值说明spark.worker.cleanup.enabledfalse启用对工作程序/应用程序目录的定期清除。 这只影响独立模式,因为YARN工作方式不同。 仅清除已停止应用程序的目录。spark.worker.cleanup.interval1800 (30 minutes)控制工作程序在本地机器上清理旧应用程序工作目录的时间间隔(以秒为单位)。spark.worker.cleanup.appDataTtl7 * 24 * 3600 (7 days)在每个工作程序上保留应用程序工作目录的秒数。 这是一个生存时间,应该取决于您拥有的可用磁盘空间量。 应用程序日志和jar被下载到每个应用程序工作目录。 随着时间的推移,工作目录可以快速填满磁盘空间,特别是如果非常频繁地运行作业。spark.worker.ui.compressedLogFileLengthCacheSize100对于压缩日志文件,只能通过解压缩文件来计算未压缩文件。 Spark缓存压缩日志文件的未压缩文件大小。 此属性控制高速缓存大小。

将应用程序连接到集群
要在Spark集群上运行应用程序,只需将Spark的主机的spark:// IP:PORT URL传递给SparkContext构造函数。
使用交互式Spark shell运行集群,请运行以下命令:
./bin/spark-shell --master spark://IP:PORT
您还可以传递选项--total-executor-cores <numCores>以控制spark-shell在群集上使用的核心数。

启动Spark应用程序
spark提交脚本提供了将编译的Spark应用程序提交到集群的最直接的方式。对于独立集群,Spark当前支持两种部署模式。在客户端模式下,驱动程序在与提交应用程序的客户端相同的进程中启动。然而,在集群模式下,驱动程序从集群中的一个Worker进程启动,并且客户端进程在履行其提交应用程序的职责后立即退出,而不等待应用程序完成。
如果您的应用程序是通过Spark提交启动的,那么应用程序jar将自动分发到所有工作节点。对于您的应用程序依赖的任何其他jar,您应该通过--jars标志使用逗号作为分隔符(例如--jars jar1,jar2)指定它们。要控制应用程序的配置或执行环境,请参阅Spark配置。
此外,独立集群模式支持在使用非零退出代码退出时自动重新启动应用程序。要使用此功能,您可以在启动应用程序时将--supervise标志传递到spark-submit。然后,如果您希望杀死重复失败的应用程序,您可以通过以下方式:
./bin/spark-class org.apache.spark.deploy.Client kill <master url> <driver ID>
您可以通过独立的Master Web UI在http:// <master url>:8080找到驱动程序ID。

资源调度
独立集群模式当前只支持跨应用程序的简单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设置为小于infinite的应用程序的默认值。 通过在conf / spark-env.sh中添加以下内容来执行此操作:
export SPARK_MASTER_OPTS =“ - Dspark.deploy.defaultCores = <value>”
这在用户可能没有单独配置最大数量的核心的共享集群上很有用。

监控和日志
Spark的独立模式提供了一个基于Web的用户界面来监控集群。 主人和每个工人都有自己的Web UI,显示集群和作业统计信息。 默认情况下,您可以访问主机的端口8080的Web UI。可以在配置文件中或通过命令行选项更改端口。
此外,每个作业的详细日志输出也写入每个从节点的工作目录(SPARK_HOME /缺省情况下为工作目录)。 您将看到每个作业的两个文件,stdout和stderr,并将所有输出写入其控制台。

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

配置网络安全的端口
Spark大量使用网络,并且一些环境对使用严格的防火墙设置有严格的要求。 有关要配置的端口的完整列表,请参阅security page

高可用性
默认情况下,独立调度集群对于Worker失败是有弹性的(只要Spark本身可以通过将其移动到其他worker来恢复正常工作)。 但是,调度程序使用主机进行调度决策,这(默认情况下)会创建单点故障:如果主机崩溃,则不能创建新的应用程序。 为了规避这一点,我们有两个高可用性方案,详细如下。

主实例ZooKeeper支持
概述
利用ZooKeeper提供领导选举和一些状态存储,您可以在连接到同一个ZooKeeper实例的集群中启动多个主服务器。一个人将被选为“领导者”,其他人将保持待命模式。如果当前的领导者死亡,则选择另一个主机,恢复旧的主机的状态,然后恢复调度。整个恢复过程(从第一个领导者失效的时间)应该需要1到2分钟。此延迟仅影响调度新应用程序 - 在主故障切换期间已在运行的应用程序不受影响。
配置
为了启用此恢复模式,您可以通过配置spark.deploy.recoveryMode和相关spark.deploy.zookeeper。*配置在spark-env中设置SPARK_DAEMON_JAVA_OPTS。可能的问题:如果您的群集中有多个主机,但无法正确配置主机使用ZooKeeper,主机将无法发现彼此,并认为他们都是领导者。这不会导致健康的集群状态(因为所有主机都将独立调度)。
细节
在设置了ZooKeeper群集后,启用高可用性非常简单。只需在具有相同ZooKeeper配置(ZooKeeper URL和目录)的不同节点上启动多个主进程。可以随时添加和删除主机。
为了调度新应用程序或将Worker添加到集群,他们需要知道当前leader的IP地址。这可以通过简单地传递一个大师列表例如将SparkContext指向spark:// host1:port1,host2:port2。这将导致您的SparkContext尝试注册两个主机 - 如果host1关闭,这个配置仍然是正确的,因为我们会找到新的领导者host2。
在“注册到主机”和正常操作之间有一个重要的区别。 启动时,应用程序或工作人员需要能够找到并注册当前的领导。如果发生故障转移,新的领导将联系所有以前注册的应用程序和从属实例,以通知他们领导的变化,所以他们甚至不需要在启动时知道新主机的存在。
由于这个属性,可以在任何时候创建新的大师,唯一需要担心的是,万一它成为领导者新的应用程序和从属实例可以找到它注册。

使用本地文件系统的单节点恢复
概述
ZooKeeper是生产级别高可用性的最佳方式,但如果你只是想要能够重新启动失败的主机,文件系统模式就可以解决。当应用程序和从属实例注册时,它们有足够的状态写入提供的目录,以便在重新启动主进程时可以恢复它们。
设置
为了启用此恢复模式,您可以使用此配置在spark-env中设置SPARK_DAEMON_JAVA_OPTS:
系统属性说明spark.deploy.recoveryMode设置为FILESYSTEM以启用单节点恢复模式(缺省值:NONE)。spark.deploy.recoveryDirectorySpark将存储恢复状态的目录,可从主控角度访问。
细节
此解决方案可以与过程监视器/管理器(如monit)一起使用,或只是通过重新启动启用手动恢复。
虽然文件系统恢复似乎比没有做任何恢复更好,但是这种模式可能是次优的某些开发或实验目的。 特别是,通过stop-master.sh杀死主机不会清除它的恢复状态,所以每当你启动一个新的主机,它将进入恢复模式。 如果需要等待所有先前注册的Worker /客户端超时,这可能会将启动时间增加最多1分钟。
虽然不是官方支持的,但是可以挂载一个NFS目录作为恢复目录。 如果原始主节点完全死机,则可以在不同的节点上启动主服务器,这将正确恢复所有先前注册的Worker /应用程序(等效于ZooKeeper恢复)。

0 0
原创粉丝点击