pyspark: автономная (независимая кластерная среда) — сборка и использование

Spark
pyspark: автономная (независимая кластерная среда) — сборка и использование

предисловие

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

image.png

Высокая доступность (механизм, при котором один главный узел выходит из строя, а другой поднимается)

一般来说, 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