集群管理器
独立的集群管理器
Spark的独立管理器提供一个简单的方式在集群上运行应用程序。它包括一个master和多个workers,每个worker都分配一定数量的内存和CPU核数。当你提交一个应用程序的时候,你可以选择它的executors使用的内存数,以及所有执行程序的核心总数。
启动独立的集群管理器
您可以通过手动启动主人和工作人员,或者在Spark的sbin目录中使用启动脚本启动独立的群集管理器。启动脚本使用最简单的选项,但是需要机器之间通过SSH访问。
使用集群的启动脚本,需要以下步骤:
1.将编译好的Spark版本复制到所有机器上的相同目录下,例如/home/yourname/spark。
2.设置从master到其他的机器的无密码登陆。这需要所有机器使用相同的账户,通过ssh-keygen创建私有SSH key,然后把key添加到所有工作节点的.ssh/authorized_keys文件中。
# On master: run ssh-keygen accepting default options
$ ssh-keygen -t dsa
Enter file in which to save the key (/home/you/.ssh/id_dsa): [ENTER]
Enter passphrase (empty for no passphrase): [EMPTY]
Enter same passphrase again: [EMPTY]
# On workers:
# copy ~/.ssh/id_dsa.pub from your master to the worker, then use:
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ chmod 644 ~/.ssh/authorized_keys
3.编辑master上的conf/slaves文件,将工作节点的主机名添加进入
4.启动集群,在master上运行sbin/start-all.sh。如果所有都启动了,你应该不需要密码,集群管理器的web ui可以从http://masternode:8080地址进行访问。
5.停止集群,可以在master上使用bin/stop-all.sh
如果你没有使用UNIX系统,或者喜欢手动启动集群,那么你可以手动启动master和workers,使用spark-class脚本,在master上可以输入:
bin/spark-class org.apache.spark.deploy.master.Master
在workers上可以输入:
bin/spark-class org.apache.spark.deploy.worker.Worker spark://masternode:7077
(masternode是你的master的主机名)。在windows上使用\替换/。
默认情况下,集群管理器可以自动的分配CPU和内存到每个worker上。
提交应用程序
提交应用程序给独立集群管理器,需要指定spark://masternode:7077给spark-submit。例如:
spark-submit --master spark://masternode:7077 yourapp
最后,独立集群管理器提供了两种发布模式。client模式(默认的),driver会运行在你执行spark-submit的机器上。这就意味着你可以直接看到driver程序的输出,或者发送输入给他(例如,交互的shell),但是它需要从你提交应用的机器上可以快速的连接到workder,并且该连接在你的应用执行期间是可用的。相反的,集群模式,driver在独立集群启动,作为另一个进程在一个worker节点上,然后它会连接回到请求的executor。在这个模式下,spark-submit是“fire-and-forget”因为你可以在应用程序运行时关闭笔记本。通过集群管理器的web ui访问应用程序的日志。你可以切换到集群模式通过传递--deploy-mode cluster给spark-submit。
配置资源使用
在多个应用程序之间共享一个Spark集群的时候,你需要决定怎么样在executors中间分配资源。独立集群管理器有基本计划策略可以限制每个应用程序的使用情况,以便同时运行多个应用程序。Apache Mesos在应用程序运行时支持更多的动态共享,而YARN有一个队列概念,允许您为各种应用程序集合使用。
在独立集群管理器中,资源分配由两种设置控制:
Executor memory
可以在使用spark-submit时候添加参数--executor-memory。每个应用程序在每个worker上都至少有一个executor,这个设置控制应用程序要求worker的内存大小。默认设置是1GB。
最大的核数
这个一个应用程序所有executors的所有核数。默认的是没有限制的;也就是说应用程序会在每个可用的节点上执行executors。在多用户使用的情况下,你应该要求用户限制他们的使用。可以通过spark-submit的--total-executor参数来控制,或者是配置spark.cores.max在配置文件中。验证这个配置可以通过http://masternode:8080。
最后,。例如,假设你有每台4核的机器一共有20个节点的集群,然后你提交一个应用程序--executor-memory 1G和--total-executor-cores 8。Spark将在不同的机器上启动8个执行器,每个执行器具有1 GB的RAM。Spark默认情况下会这样做,使应用程序有机会在同一台机器上运行的分布式文件系统实现数据位置(例如HDFS),因为这些系统的数据通常来说是分布在所有的节点上。如果你愿意,你可以让Spark尽可能少的合并executor,在conf/spark-defaults.conf配置文件中通过设置spark.deploy.spreadOut为false。在这种情况下,之前的应用程序就只有2个executors,每个4核1GB
。此设置会影响独立集群上的所有应用程序,在启动独立集群管理器之前就应该想到。
高可用
在生产模式下,你可以允许集群中的单个节点崩溃。独立模式提供优雅的工作节点失败的策略。如果你也想实现集群主节点的高可用,Spark提供Apache ZooKeeper保证多个准备着的master当有master崩溃之后可以马上进行替换。
Hadoop YARN
YARN是Hadoop2.0中介绍的集群管理器,它允许各种各样的数据处理框架在共享的资源池上运行。在YARN上运行Spark,当数据也存储在相同的节点上时,这样可以使得Spark快速的访问HDFS数据。
在Spark中直截了当的使用YARN:使用spark-submit提交作业时指定Hadoop配置文件的路径。
第一步是弄清楚Hadoop的配置路径,然后将它设置成环境变量HADOOP_CONF_DIR。该文件夹包含了yarn-site.xml和其他的配置文件;通常情况下,它是HADOOP_HOME/conf或者系统路径类似于/etc/hadoop/conf。然后提交你的应用程序像这样:
export HADOOP_CONF_DIR="..."
spark-submit --master yarn yourapp
和独立的集群管理器一样,有两种模式连接你的应用程序到集群:客户端模式,你的应用程序的driver程序运行在在你提交的机器上(例如,你的笔记本),集群模式,driver会在YARN的容器中运行。
Spark交互的shell和pyspark都可以很好的在YARN上运行;简单的设置HADOOP_CONF_DIR和--master参数。注意这些只会运行在client模式中,因为他们需要获得用户的输入。
配置资源使用
在YARN上运行时,Spark应用程序使用一定数量的executor,可以通过spark-submit、spark-shell的--num-executors参数指定。默认是2个,你可能会增加。内存和核数可以通过--executor-memory、--executor-cores指定。在给定的一组硬件资源下,Spark通常习惯使用少量的配置高的executor(多核,大内存),因为较少的executor可以优化通信。注意,一些集群限制executor的最大的大小(默认8GB),它不允许你启动更大的。
一些YARN集群配置为了资源管理的目的安排应用程序到多个“队列”中。使用--queue选项指定队列的名字。
选择哪个集群管理器?
1.如果是新的部署的话最好采用独立集群的模式。独立模式方便安装,如果你只运行Spark的话,该模式提供了与其他集群管理器的相同的特性。
2.如果你想要和其他应用程序一起运行Spark,或者使用更丰富的资源计划能力(例如,队列),YARN和Mesos提供了这些特性。YARN预装到了Hadoop的版本中。
3.Mesos比YARN和独立模式的优势是细粒度共享选项,这允许诸如Sparkshell之类的交互式应用程序缩小其在命令之间的CPU分配,这是的多用户在使用交互环境时更为优雅。
4.在所有的情况下,最好在与HDFS相同的节点上运行Spark,以便快速访问存储。您可以手动将Mesos或独立集群管理器安装在相同的节点上,或者大多数Hadoop发行版已将YARN和HDFS一起安装。
独立的集群管理器
Spark的独立管理器提供一个简单的方式在集群上运行应用程序。它包括一个master和多个workers,每个worker都分配一定数量的内存和CPU核数。当你提交一个应用程序的时候,你可以选择它的executors使用的内存数,以及所有执行程序的核心总数。
启动独立的集群管理器
您可以通过手动启动主人和工作人员,或者在Spark的sbin目录中使用启动脚本启动独立的群集管理器。启动脚本使用最简单的选项,但是需要机器之间通过SSH访问。
使用集群的启动脚本,需要以下步骤:
1.将编译好的Spark版本复制到所有机器上的相同目录下,例如/home/yourname/spark。
2.设置从master到其他的机器的无密码登陆。这需要所有机器使用相同的账户,通过ssh-keygen创建私有SSH key,然后把key添加到所有工作节点的.ssh/authorized_keys文件中。
# On master: run ssh-keygen accepting default options
$ ssh-keygen -t dsa
Enter file in which to save the key (/home/you/.ssh/id_dsa): [ENTER]
Enter passphrase (empty for no passphrase): [EMPTY]
Enter same passphrase again: [EMPTY]
# On workers:
# copy ~/.ssh/id_dsa.pub from your master to the worker, then use:
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ chmod 644 ~/.ssh/authorized_keys
3.编辑master上的conf/slaves文件,将工作节点的主机名添加进入
4.启动集群,在master上运行sbin/start-all.sh。如果所有都启动了,你应该不需要密码,集群管理器的web ui可以从http://masternode:8080地址进行访问。
5.停止集群,可以在master上使用bin/stop-all.sh
如果你没有使用UNIX系统,或者喜欢手动启动集群,那么你可以手动启动master和workers,使用spark-class脚本,在master上可以输入:
bin/spark-class org.apache.spark.deploy.master.Master
在workers上可以输入:
bin/spark-class org.apache.spark.deploy.worker.Worker spark://masternode:7077
(masternode是你的master的主机名)。在windows上使用\替换/。
默认情况下,集群管理器可以自动的分配CPU和内存到每个worker上。
提交应用程序
提交应用程序给独立集群管理器,需要指定spark://masternode:7077给spark-submit。例如:
spark-submit --master spark://masternode:7077 yourapp
最后,独立集群管理器提供了两种发布模式。client模式(默认的),driver会运行在你执行spark-submit的机器上。这就意味着你可以直接看到driver程序的输出,或者发送输入给他(例如,交互的shell),但是它需要从你提交应用的机器上可以快速的连接到workder,并且该连接在你的应用执行期间是可用的。相反的,集群模式,driver在独立集群启动,作为另一个进程在一个worker节点上,然后它会连接回到请求的executor。在这个模式下,spark-submit是“fire-and-forget”因为你可以在应用程序运行时关闭笔记本。通过集群管理器的web ui访问应用程序的日志。你可以切换到集群模式通过传递--deploy-mode cluster给spark-submit。
配置资源使用
在多个应用程序之间共享一个Spark集群的时候,你需要决定怎么样在executors中间分配资源。独立集群管理器有基本计划策略可以限制每个应用程序的使用情况,以便同时运行多个应用程序。Apache Mesos在应用程序运行时支持更多的动态共享,而YARN有一个队列概念,允许您为各种应用程序集合使用。
在独立集群管理器中,资源分配由两种设置控制:
Executor memory
可以在使用spark-submit时候添加参数--executor-memory。每个应用程序在每个worker上都至少有一个executor,这个设置控制应用程序要求worker的内存大小。默认设置是1GB。
最大的核数
这个一个应用程序所有executors的所有核数。默认的是没有限制的;也就是说应用程序会在每个可用的节点上执行executors。在多用户使用的情况下,你应该要求用户限制他们的使用。可以通过spark-submit的--total-executor参数来控制,或者是配置spark.cores.max在配置文件中。验证这个配置可以通过http://masternode:8080。
最后,。例如,假设你有每台4核的机器一共有20个节点的集群,然后你提交一个应用程序--executor-memory 1G和--total-executor-cores 8。Spark将在不同的机器上启动8个执行器,每个执行器具有1 GB的RAM。Spark默认情况下会这样做,使应用程序有机会在同一台机器上运行的分布式文件系统实现数据位置(例如HDFS),因为这些系统的数据通常来说是分布在所有的节点上。如果你愿意,你可以让Spark尽可能少的合并executor,在conf/spark-defaults.conf配置文件中通过设置spark.deploy.spreadOut为false。在这种情况下,之前的应用程序就只有2个executors,每个4核1GB
。此设置会影响独立集群上的所有应用程序,在启动独立集群管理器之前就应该想到。
高可用
在生产模式下,你可以允许集群中的单个节点崩溃。独立模式提供优雅的工作节点失败的策略。如果你也想实现集群主节点的高可用,Spark提供Apache ZooKeeper保证多个准备着的master当有master崩溃之后可以马上进行替换。
Hadoop YARN
YARN是Hadoop2.0中介绍的集群管理器,它允许各种各样的数据处理框架在共享的资源池上运行。在YARN上运行Spark,当数据也存储在相同的节点上时,这样可以使得Spark快速的访问HDFS数据。
在Spark中直截了当的使用YARN:使用spark-submit提交作业时指定Hadoop配置文件的路径。
第一步是弄清楚Hadoop的配置路径,然后将它设置成环境变量HADOOP_CONF_DIR。该文件夹包含了yarn-site.xml和其他的配置文件;通常情况下,它是HADOOP_HOME/conf或者系统路径类似于/etc/hadoop/conf。然后提交你的应用程序像这样:
export HADOOP_CONF_DIR="..."
spark-submit --master yarn yourapp
和独立的集群管理器一样,有两种模式连接你的应用程序到集群:客户端模式,你的应用程序的driver程序运行在在你提交的机器上(例如,你的笔记本),集群模式,driver会在YARN的容器中运行。
Spark交互的shell和pyspark都可以很好的在YARN上运行;简单的设置HADOOP_CONF_DIR和--master参数。注意这些只会运行在client模式中,因为他们需要获得用户的输入。
配置资源使用
在YARN上运行时,Spark应用程序使用一定数量的executor,可以通过spark-submit、spark-shell的--num-executors参数指定。默认是2个,你可能会增加。内存和核数可以通过--executor-memory、--executor-cores指定。在给定的一组硬件资源下,Spark通常习惯使用少量的配置高的executor(多核,大内存),因为较少的executor可以优化通信。注意,一些集群限制executor的最大的大小(默认8GB),它不允许你启动更大的。
一些YARN集群配置为了资源管理的目的安排应用程序到多个“队列”中。使用--queue选项指定队列的名字。
选择哪个集群管理器?
1.如果是新的部署的话最好采用独立集群的模式。独立模式方便安装,如果你只运行Spark的话,该模式提供了与其他集群管理器的相同的特性。
2.如果你想要和其他应用程序一起运行Spark,或者使用更丰富的资源计划能力(例如,队列),YARN和Mesos提供了这些特性。YARN预装到了Hadoop的版本中。
3.Mesos比YARN和独立模式的优势是细粒度共享选项,这允许诸如Sparkshell之类的交互式应用程序缩小其在命令之间的CPU分配,这是的多用户在使用交互环境时更为优雅。
4.在所有的情况下,最好在与HDFS相同的节点上运行Spark,以便快速访问存储。您可以手动将Mesos或独立集群管理器安装在相同的节点上,或者大多数Hadoop发行版已将YARN和HDFS一起安装。