【头歌实训】Spark 完全分布式的安装和部署

文章目录

  • 第1关: Standalone 分布式集群搭建
    • 任务描述
    • 相关知识
      • 课程视频
      • Spark分布式安装模式
      • 示例集群信息
      • 配置免密登录
      • 准备Spark安装包
      • 配置环境变量
      • 修改 spark-env.sh 配置文件
      • 修改 slaves 文件
      • 分发安装包
      • 启动spark
      • 验证安装
      • 编程要求
      • 测试说明
      • 答案代码
        • 报错问题
        • 基本过程

          第1关: Standalone 分布式集群搭建

          任务描述

          掌握 Standalone 分布式集群搭建。

          相关知识

          我们已经掌握了 Spark 单机版安装,那么分布式集群怎么搭建呢? 接下来我们学习 Standalone 分布式集群搭建。

          课程视频

          如果你需要在本地配置 Spark 完全分布式环境,可以通过查看课程视频来学习。

          课程视频《克隆虚拟机与配置网络》

          课程视频《配置集群免密登录》

          课程视频《Spark配置文件设置》

          课程视频《Spark完全分布式总结》

          Spark分布式安装模式

          Spark 分布式环境安装目前有四种模式:

          1.Standalone:Spark 自带的简单群资源管理器,安装较为简单,不需要依赖 Hadoop;

          2.Hadoop YARN:使用 YARN 作为集群资源管理,安装需要依赖 Hadoop;

          3.Apache Mesos:不常用;

          4.Kubernetes:不常用。

          本地学习测试我们常用 Standalone 模式,生产环境常使用 YARN 模式。

          示例集群信息

          以下表格为本教程所用示例集群节点信息:

          节点名称节点角色
          masterworker,master
          slave1worker
          slave2worker

          我们准备了三台虚拟服务器,连接方式如下:

          服务器SSH密码ip
          masterssh 172.18.0.2123456172.18.0.2
          slave1ssh 172.18.0.3123456172.18.0.3
          slave2ssh 172.18.0.4123456172.18.0.4

          第一步我们需要在 evassh 服务器初始化虚拟服务器:

          cd /home
          wrapdocker
          ulimit -f 1024000
          docker load -i hbase-ssh2_v1.0.tar
          docker-compose up -d
          

          注意:请不要在各个虚拟服务器之间进行 ssh 登录,这种操作会导致无法保存配置数据。正确方法是:在虚拟服务器里执行 exit 后回到 evassh 服务器,再按上述方法登录各虚拟服务器。

          配置免密登录

          Hadoop 集群在启动脚本时,会去启动各个节点,此过程是通过 SSH 去连接的,为了避免启动过程输入密码,需要配置免密登录。

          1、分别在 master、slave1、slave 生成密钥,命令如下:

          ssh-keygen -t rsa
          

          2、 在 master 复制 master、slave1、slave2 的公钥。

          cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys
          ssh root@slave1 cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys
          ssh root@slave2 cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys
          

          3、 分别在 slave1、slave2 复制 master 的 authorized_keys 文件。

          ssh root@master cat ~/.ssh/authorized_keys>> ~/.ssh/authorized_keys
          

          到此,免密已经成功,可以在各个虚拟服务器之间进行 ssh 登录,而不需要输入密码了。

          准备Spark安装包

          把 evassh 服务器的 /usr/local 目录下的 spark 安装包通过 SCP 命令上传到 master 虚拟服务器的 /usr/local 目录下。

          scp -r /usr/local/spark-2.3.4-bin-hadoop2.7 root@172.18.0.2:/usr/local
          

          密码为:123456。

          配置环境变量

          我们将 Spark 的安装目录配置到 /etc/profile 中(在文件末尾添加)。

          不要忘了 source /etc/profile。

          该步骤所有虚拟服务器节点均可执行。

          修改 spark-env.sh 配置文件

          首先生成一份 spark-env.sh 文件(master节点):

          切换目录到:/usr/local/spark-2.3.4-bin-hadoop2.7/conf 执行命令:mv spark-env.sh.template spark-env.sh

          修改 spark-env.sh 文件:

          执行命令:vi spark-env.sh,添加以下内容:

          #指定JAVA安装路径/usr/lib/jvm/jdk1.8.0_111
          export JAVA_HOME=java安装路径
          #指定SCALA安装位置,非必须配置,可不指定
          export SCALA_HOME=scala安装路径
          #指定spark master webui 端口,默认是 8080,跟 tomcat 冲突
          SPARK_MASTER_WEBUI_PORT=8888
          #指定Master节点IP或映射地址
          export SPARK_MASTER_IP=master节点IP或映射地址
          

          修改 slaves 文件

          首先生成一份 slaves 文件(master节点)。

          切换到 Spark 的 conf 目录下, 执行命令: mv slaves.template slaves

          修改 slaves 文件, 执行命令: vi slaves 在该文件中加入作为 worker 节点 ip 或映射主机名。

          master
          slave1
          slave2
          

          分发安装包

          把 master 节点的 spark 安装包分发到 slave1 节点和 slave2 节点(通过 scp 命令)。

          scp -r spark-2.3.4-bin-hadoop2.7/ root@slave1:/usr/local
          

          启动spark

          切换到 master 节点安装目录的 /sbin 目录下 执行命令启动 Spark 集群:./start-all.sh

          验证安装

          输入 jps 命令查看。 master 节点有以下进程:

          master
          worker
          

          slave1 节点有以下进程:

          worker
          

          slave2 节点有以下进程:

          worker
          

          编程要求

          请按照步骤小心安装,安装完成后点击测评即可。

          测试说明

          点击测评后,后台会通过curl http://172.18.0.2:8888/ 命令获取页面,并取其中部分内容来判定你是否安装成功。

          预期输出:

           
        • Alive Workers: 3
        • 课程视频《 Spark 完全分布式搭建总结》

          答案代码

          报错问题

          docker load -i hbase-ssh2_v1.0.tar 加载的镜像时间较长多等一会;

          docker-compose up -d 创建并启动服务器,报错了多试几次(平台的问题),直到 master、slave1、slave2 几个服务器节点都启动,都能 ping 通就行,可以通过 docker ps -n 3 看看容器创建几个了;

          如果运气不好创建一半的时候挂了,出现 /master 已经存在但是 master 服务器还没启动的情况,使用 docker rm master 把它删了重新 docker-compose up -d 创建,或者自己启动 docker start master,slave1、slave2 同理;

          注意:使用 ssh 更换 educoder、master、slave1、slave2 几个服务器节点,没配置 IP 映射直接用 IP 访问。

          避免来回切换,直接开四个命令行,在原来 educoder 的基础上再加三个命令行用于 master、slave1、slave2

          # master
          ssh 172.18.0.2
          # slave1
          ssh 172.18.0.3
          # slave2
          ssh 172.18.0.4
          

          基本过程

          1. 加载并启动服务器;
          2. 进入 master、slave1、slave2 三个节点配置免密登录;
          3. 进入 educoder 节点将 Spark 文件分发给 master 节点;
          4. 在 master 节点上配置好环境,再将 Spark 文件分发给 slave1、slave2 节点;
          5. 运行 Spark
          # step 1
          cd /home
          wrapdocker
          ulimit -f 1024000
          docker load -i hbase-ssh2_v1.0.tar
          docker-compose up -d
          # step 2
          # 172.18.0.2、172.18.0.3、172.18.0.4, password=123456
          ssh-keygen -t rsa # Press Enter three times
          # 172.18.0.2
          cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys
          ssh root@172.18.0.3 cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys
          ssh root@172.18.0.4 cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys
          # 172.18.0.3、172.18.0.4
          ssh root@172.18.0.2 cat ~/.ssh/authorized_keys>> ~/.ssh/authorized_keys
          # step 3: educoder
          scp -r /usr/local/spark-2.3.4-bin-hadoop2.7 root@172.18.0.2:/usr/local
          # step 4: 172.18.0.2
          vim /etc/profile
          # add
          export SPARK_HOME=/usr/local/spark-2.3.4-bin-hadoop2.7
          export PATH=$PATH:$SPARK_HOME/bin
          source /etc/profile
          cd /usr/local/spark-2.3.4-bin-hadoop2.7/conf
          cp spark-env.sh.template spark-env.sh
          vi spark-env.sh
          # add
          export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_111
          export SPARK_MASTER_WEBUI_PORT=8888
          export SPARK_MASTER_IP=172.18.0.2
          vi slaves
          # add(delete localhost if exists)
          172.18.0.2
          172.18.0.3
          172.18.0.4
          # step 4: scp spark to slave1 and slave2
          scp -r /usr/local/spark-2.3.4-bin-hadoop2.7/ root@172.18.0.3:/usr/local
          scp -r /usr/local/spark-2.3.4-bin-hadoop2.7/ root@172.18.0.4:/usr/local
          # step 5: start
          $SPARK_HOME/sbin/start-all.sh