• Hadoop系列005-Hadoop运行模式(下)


    本人微信公众号,欢迎扫码关注!

    Hadoop运行模式(下)

    2.3、完全分布式部署Hadoop
    • 1)分析:

      • 1)准备3台客户机(关闭防火墙、静态ip、主机名称)
      • 2)安装jdk
      • 3)配置环境变量
      • 4)安装hadoop
      • 5)配置环境变量
      • 6)安装ssh
      • 7)配置集群
      • 8)启动测试集群
    • 2)操作

      • (1) 虚拟机准备

        • 克隆三台干净的虚拟机
      • (2) 主机名设置

      • (3) scp

        • 1)scp可以实现服务器与服务器之间的数据拷贝。

        • 2)案例实操

          • (1)将hadoop101中/opt/module和/opt/software文件拷贝到hadoop102、hadoop103和hadoop104上。

            [root@hadoop101 /]# scp -r /opt/module/  root@hadoop102:/opt
            [root@hadoop101 /]# scp -r /opt/software/  root@hadoop102:/opt
            [root@hadoop101 /]# scp -r /opt/module/  root@hadoop103:/opt
            [root@hadoop101 /]# scp -r /opt/software/  root@hadoop103:/opt
            [root@hadoop101 /]# scp -r /opt/module/  root@hadoop104:/opt
            [root@hadoop101 /]# scp -r /opt/software/  root@hadoop105:/opt
            
          • (2)将192.168.1.102服务器上的文件拷贝到当前用户下。

            [root@hadoop101 opt]# scp  root@hadoop102:/etc/profile  /opt/tmp/
            
          • (3)实现两台远程机器之间的文件传输(hadoop103主机文件拷贝到hadoop104主机上)

            [atguigu@hadoop102 test]$ scp atguigu@hadoop103:/opt/test/haha atguigu@hadoop104:/opt/test/
            
      • (4)SSH无密码登录

        • 1)配置ssh

          • (1)基本语法

            ssh 另一台电脑的ip地址
            
          • (2)ssh连接时出现Host key verification failed的解决方法

            问题再现
            [root@hadoop2 opt]# ssh 192.168.1.103
            The authenticity of host '192.168.1.103 (192.168.1.103)' can't be established.
            RSA key fingerprint is cf:1e:de:d7:d0:4c:2d:98:60:b4:fd:ae:b1:2d:ad:06.
            Are you sure you want to continue connecting (yes/no)? 
            Host key verification failed.
            
            解决办法
            输入yes,然后输入目标机器的密码即可
            
        • 2)无密钥配置

          • (1)进入到我的home目录

            cd  ~/.ssh
            
          • (2)生成公钥和私钥:

            ssh-keygen -t rsa 
            然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
            
          • (3)将公钥拷贝到要免密登录的目标机器上

            ssh-copy-id 目标机器主机名或IP地址
            
        • 3).ssh文件夹下的文件功能解释

          • (1)~/.ssh/known_hosts :记录ssh访问过计算机的公钥(public key)
          • (2)id_rsa :生成的私钥
          • (3)id_rsa.pub :生成的公钥
          • (4)authorized_keys :存放授权过得无秘登录服务器公钥
      • (5)rsync

        rsync远程同步工具,主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。

        • 1)查看rsync使用说明

          man rsync | more
          
        • 2)基本语法

          rsync  -rvl                 $pdir/$fname                       $user@hadoop$host:$pdir
          命令   命令参数   要拷贝的文件路径/名称   目的用户@主机:目的路径
          
        • 3)案例实操

          把本机/opt/tmp目录同步到hadoop103服务器的root用户下的/opt/tmp目录

          rsync –rvl /opt/tmp/*  root@hadoop103:/op	t/tmp
          
      • (6)编写集群分发脚本xsync

        • 1)需求分析:循环复制文件到所有节点的相同目录下。

          • (1)原始拷贝:

            rsync  –rvl     /opt/module  root@hadoop103:/opt/
            
          • (2)期望脚本:

            xsync 要同步的文件名称

          • (3)在/usr/local/bin这个目录下存放的脚本,可以在系统任何地方直接执行,需要制定路径。

        • 2)案例实操:

          • (1)在/usr/local/bin目录下创建xsync文件

            #!/bin/bash
            #1 获取输入参数个数,如果没有参数,直接退出
            pcount=$#
            if((pcount==0)); then
            echo no args;
            exit;
            fi
            
            #2 获取文件名称
            p1=$1
            fname=`basename $p1`
            echo fname=$fname
            
            #3 获取上级目录到绝对路径
            pdir=`cd -P $(dirname $p1); pwd`
            echo pdir=$pdir
            
            #4 获取当前用户名称
            user=`whoami`
            
            #5 循环
            for((host=103; host<105; host++)); do
                    #echo $pdir/$fname $user@hadoop$host:$pdir
                    echo --------------- hadoop$host ----------------
                    rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
            done
            
          • (2)修改脚本 xsync 具有执行权限

            [root@hadoop102 bin]# chmod 777 xsync
            
          • (3)调用脚本形式:xsync 文件名称

      • (7)编写分发脚本xcall

        • 1)需求分析:在所有主机上同时执行相同的命令

          xcall +命令
          
        • 2)具体实现

          • (1)在/usr/local/bin目录下创建xcall文件

            #!/bin/bash
            pcount=$#
            if((pcount==0));then
                    echo no args;
                    exit;
            fi
            
            echo -------------localhost----------
            $@
            for((host=101; host<=108; host++)); do
                    echo ----------hadoop$host---------
                    ssh hadoop$host $@
            done
            
          • (2)修改脚本 xcall 具有执行权限

            [root@hadoop102 bin]# chmod 777 xcall
            
          • (3)调用脚本形式: xcall 操作命令

            [root@hadoop102 ~]# xcall rm -rf /opt/tmp/profile 
            
      • (8) 基于伪分布式部署集群

        • 1)集群部署规划

          规划原则:尽量将耗内存的任务分散开来

          Hadoop102 Hadoop103 Hadoop104
          HDFS NameNode SecondaryNameNode
          DataNode DataNode DataNode
          YARN NodeManager ResourceManager NodeManager
        • 2)配置文件

          • (1)core-site.xml

            <!-- 指定HDFS中NameNode的地址 -->
            <property>
            	<name>fs.defaultFS</name>
            	<value>hdfs://hadoop102:8020</value>
            </property>
            
            <!-- 指定hadoop运行时产生文件的存储目录 -->
            <property>
            	<name>hadoop.tmp.dir</name>
            	<value>/opt/module/hadoop-2.7.2/data/tmp</value>
            </property>
            
          • (2)Hdfs

            • hadoop-env.sh

              export JAVA_HOME=/opt/module/jdk1.7.0_79
              
            • hdfs-site.xml

              <configuration>	
                  <property>
                  	<name>dfs.replication</name>
                  	<value>3</value>
                  </property>
              
                  <property>
                  	<name>dfs.namenode.secondary.http-address</name>
                  	<value>hadoop104:50090</value>
                  </property>
              </configuration>
              
            • slaves

              hadoop102
              hadoop103
              hadoop104
              
          • (3)yarn

            • yarn-env.sh

              export JAVA_HOME=/opt/module/jdk1.7.0_79
              
            • yarn-site.xml

              <configuration>
                  <!-- Site specific YARN configuration properties -->
                  <!-- reducer获取数据的方式 -->
                  <property>
                  	<name>yarn.nodemanager.aux-services</name>
                  	<value>mapreduce_shuffle</value>
                  </property>
              
                  <!-- 指定YARN的ResourceManager的地址 -->
                  <property>
                  	<name>yarn.resourcemanager.hostname</name>
                  	<value>hadoop103</value>
                  </property>
              </configuration>
              
          • (4)mapreduce

            • mapred-env.sh

              export JAVA_HOME=/opt/module/jdk1.7.0_79
              
            • mapred-site.xml

              <configuration>
                  <!-- 指定mr运行在yarn上 -->
                  <property>
                      <name>mapreduce.framework.name</name>
                      <value>yarn</value>
                  </property>
              </configuration>
              
        • 3)在集群上分发以上所有文件

          cd /opt/module/hadoop-2.7.2/etc/hadoop
          xsync /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
          xsync /opt/module/hadoop-2.7.2/etc/hadoop/yarn-site.xml
          xsync /opt/module/hadoop-2.7.2/etc/hadoop/slaves
          
        • 4)查看文件分发情况

          xcall cat /opt/module/hadoop-2.7.2/etc/hadoop/slaves
          
      • (9)集群启动及测试

        • 1)启动集群

          • (0)如果集群是第一次启动,需要格式化namenode

            [root@hadoop2 hadoop-2.7.2]# bin/hdfs namenode –format
            
          • (1)启动HDFS

            [intflag@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh
            
            启动之后验证
            [intflag@hadoop102 hadoop-2.7.2]$ jps
            3690 DataNode
            9550 Jps
            3583 NameNode
            
            [intflag@hadoop103 hadoop-2.7.2]$ jps
            9095 Jps
            3435 DataNode
            
            [intflag@hadoop104 hadoop-2.7.2]$ jps
            3432 DataNode
            9371 Jps
            3518 SecondaryNameNode
            
          • (2)启动yarn

            注意:Namenode和ResourceManger如果不是同一台机器,不能在NameNode上启动 yarn,应该在ResouceManager所在的机器上启动yarn。

            sbin/start-yarn.sh
            
            
        • 2)集群基本测试

          • (1)上传文件到集群

            • 上传小文件

              bin/hdfs dfs –mkdir –p /user/atguigu/tmp/conf
              bin/hdfs dfs –put etc/hadoop/*-site.xml /user/atguigu/tmp/conf
              
              
            • 上传大文件

              [atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -put /opt/software/hadoop-2.7.2.tar.gz  /user/atguigu/input
              
              
          • (2)上传文件后查看文件存放在什么位置

            • 文件存储路径

              [atguigu@hadoop103 subdir0]$ pwd
              /opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0
              
              
            • 查看文件内容

              [atguigu@hadoop108 subdir0]$ cat blk_1073741825
              hadoop
              atguigu
              atguigu
              
              
          • (3)拼接

            -rw-rw-r--. 1 atguigu atguigu 134217728 5月  23 16:01 blk_1073741836
            -rw-rw-r--. 1 atguigu atguigu   1048583 5月  23 16:01 blk_1073741836_1012.meta
            -rw-rw-r--. 1 atguigu atguigu  63439959 5月  23 16:01 blk_1073741837
            -rw-rw-r--. 1 atguigu atguigu    495635 5月  23 16:01 blk_1073741837_1013.meta
            [atguigu@hadoop107 subdir0]$ cat blk_1073741836>>tmp.file
            [atguigu@hadoop107 subdir0]$ cat blk_1073741837>>tmp.file
            [atguigu@hadoop107 subdir0]$ tar -zxvf tmp.file
            
            
          • (4)下载

            [atguigu@hadoop107 hadoop-2.7.2]$ bin/hadoop fs -get /user/atguigu/input/hadoop-2.7.2.tar.gz
            
            
        • 3)集群性能测试

          • 写海量数据
          • 读海量数据
      • (9)Hadoop启动停止方式

        • 1)各个服务组件逐一启动

          • (1)分别启动hdfs组件

            hadoop-daemon.sh  start|stop  namenode|datanode|secondarynamenode
            
            
          • (2)启动yarn

            yarn-daemon.sh  start|stop  resourcemanager|nodemanager
            
            
        • 2)各个模块分开启动(配置ssh是前提)常用

          • (1)整体启动/停止hdfs

            start-dfs.sh
            stop-dfs.sh
            
            
          • (2)整体启动/停止yarn

            start-yarn.sh
            stop-yarn.sh
            
            
          • 3)全部启动(不建议使用)

            start-all.sh
            stop-all.sh
            
            
      • (11)配置集群常见问题

        • 1)防火墙没关闭、或者没有启动yarn

          INFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:8032
          
          
        • 2)主机名称配置错误

        • 3)ip地址配置错误

        • 4)ssh没有配置好

        • 5)root用户和atguigu两个用户启动集群不统一

        • 6)配置文件修改不细心

        • 7)未编译源码

          Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
          17/05/22 15:38:58 INFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:8032
          
          
        • 8)datanode不被namenode识别问题

          Namenode在format初始化的时候会形成两个标识,blockPoolId和clusterId。新的datanode加入时,会获取这两个标识作为自己工作目录中的标识。
          
          一旦namenode重新format后,namenode的身份标识已变,而datanode如果依然持有原来的id,就不会被namenode识别。
          
          解决办法,删除datanode节点中的数据后,再次重新格式化namenode。
          
          
  • 相关阅读:
    Hibernate--Day01
    Java语言基础之数组
    Java语言基础之方法的设计
    Jmeter-文件目录
    Jmeter-简介及安装
    测试基础-测试策略与类型
    测试基础-软件测试计划
    测试基础-软件测试流程与测试模型
    测试基础-软件测试的环境
    测试基础-软件测试目的与对象
  • 原文地址:https://www.cnblogs.com/intflag/p/10049500.html
Copyright © 2020-2023  润新知