предисловие
Spark提供了一个简单的standalone部署模式。
你可以手动启动 master节点和 worker节点 来启动 standalone 集群.
搭建 Spark Standalone 集群,只需要将编译好的spark安装包部署在集群中的每个节点上即可。
1/Подготовка
先准备好几台服务器,最少3台。
确定好哪台是master节点,剩下的是slave节点(worker节点).
设置好master节点到其他work节点的ssh无密码登陆,这需要所有机器上有相同的用户账号。
如何实现ssh无密码登陆?
把master节点的.ssh/id_das.pub文件的内容写入到每台worker节点的.ssh/authorized_keys文件中
具体实现步骤:
<1>在主节点master上:运行ssh-keygen并接受默认选项
$ ssh-keygen -t dsa
Enter file in which to save the key (/home/you/.ssh/id_dsa): [回车]
Enter passphrase (empty for no passphrase): [空]
Enter same passphrase again: [空]
<2>在工作节点worker上:
# 把主节点的~/.ssh/id_dsa.pub文件复制到工作节点上,然后使用:
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
本文假设有4台服务器,如下所示:

2/Войти на сервер главного узла (все следующие операции выполняются на главном узле)
Перейдите на официальный сайт, чтобы загрузить установочный пакет spark (определить операционную систему и номер версии) и загрузить его на сервер главного узла.
Декомпрессия
tar -zxvf spark-2.3.1-bin-hadoop2.6.tgz
Измените имя файла (вы можете изменить имя или нет)
mv spark-2.3.1-bin-hadoop2.6 spark-2.3.1
перейдите в каталог conf инсталляционного пакета и измените файл slaves.template
cd spark-2.3.1
mv slaves.template slaves
Откройте ведомые файлы, измененные в , и добавьте имя хоста узла в кластере.
vi slaves
slaves文件必须包含所有需要启动的worker节点的主机名,且每个主机名占一行.
Centoshadoop2
Centoshadoop3
Centoshadoop4
Измените имя файла spark-env.sh.template на spark-env.sh, а затем отредактируйте файл spark-env.sh.
mv spark-env.sh.template spark-env.sh
填写如下内容
JAVA_HOME:配置java_home路径
SPARK_MASTER_HOST:master的ip
SPARK_MASTER_PORT:提交任务的端口,默认是7077
SPARK_WORKER_CORES:每个worker从节点能够支配的core的个数
SPARK_WORKER_MEMORY:每个worker从节点能够支配的内存数
Синхронизируйте пакет установки spark на главном узле с другими рабочими узлами.
scp -r ~/spark hadoop@centoshadoop2:~
scp -r ~/spark hadoop@centoshadoop3:~
scp -r ~/spark hadoop@centoshadoop4:~
注意:worker节点存放spark安装包的路径要和master节点一样。
Войдите в каталог sbin и выполните ./start-all.sh в текущем каталоге.
注意:在主节点上运行sbin/start-all.sh(要在主节点上运行而不是在工作节点上)以启动集群。
要停止集群,在主节点上运行sbin/stop-all.sh
Мастер доступа: порт 8080

Высокая доступность (механизм, при котором один главный узел выходит из строя, а другой поднимается)
一般来说, standalone集群调度对于worker节点的失败都是有一定弹性的(会将失去连接的worker从 worker中移除, 并将任务分配给其他worker.)
然而, 调度器使用的是master节点去进行调度决策,如果master节点一旦崩溃, 则不会有任何application 能够被创建, 为了规避这一点, 有如下高可用性方案:
安装Zookeeper:
使用zk提供leader的选举和存储一些状态. 我们可以通过启动多个masters并连接到同一个Zookeeper,
其中一个master会被选举为leader, 其他的节点会维持在备用状态,
如果当前leader宕机, 则会从备份中选取一个master作为新的leader, 恢复master状态, 并恢复调度.
从master宕机开始到另一个master恢复启用, 应该会用1~2分钟的时间.
注意 这种延迟仅仅会影响调度新的application, 在master挂掉期间, 正在运行的application是不受影响的.
需要了解到的一个小细节是:在哪一台机器上先启动master,哪个master就是主master(alive)状态,
但这并不会影响driver节点所在的位置,以及executor的分布, executor的分布与上面提到过的参数 spark.deploy.spreadOut 有关。
通过这个属性, 新的master可以在任何时候被创建, 所以你唯一需要担心的是, 新的application 和 worker 能够找到它, 假设它成为了新的leader. 一旦成功注册, 你就不需要担心了.
3/Отправить задачу
./spark-submit --master spark://node01:7077 --class org.apache.spark.examples.SparkPi …/examples/jars/spark-examples_2.11-2.3.1.jar 100