Hadoop之完全分布式模式环境搭建

一:虚拟机准备

  1. 准备4台虚拟机,静态IP地址,关闭防火墙,设置主机名
      
     IP地址,主机名如下:
              192.168.8.101,hadoop101
              192.168.8.102,hadoop102
              192.168.8.103,hadoop103
              192.168.8.104,hadoop104

      注意:记得关闭防火墙
      修改主机名命令:
    hostnamectl set-hostname xxx
      关闭防火墙命令:systemctl stop firewalld.service
      查看防火墙命令:firewall-cmd --state
  2. 4台虚机的/etc/hosts全部配置IP对应主机名
     
  3. OK虚拟机准备完毕
             

二:scp命令

  1.  从当前服务器拷贝到另外一台服务器
     scp -r  当前服务器地址 另外服务器用户名@IP或者主机名:目标服务器地址
     例如:scp -r /opt/module/ root@192.168.8.102:/opt
  2. 如何把目标服务器的文件拉取到当前服务器
     scp 另外服务器用户名@IP或者主机名:目标服务器地址 当前服务器地址
     scp root@192.168.8.102:/opt /opt
  3.  在A服务器上把B服务器上的文件拷贝到C服务器上
     scp -r root@192.168.8.102:/opt /opt root@192.168.8.103:/opt /opt        

三:SSH无密码登录(102IP冲突,后面改为202)

  1.  配置ssh准备
          a:首先切换到我们要使用的账户kgf,首先我们配置103服务器,并且进入到kgf的根目录
                
         b:ssh访问其它服务器
              
  2. 进入.ssh目录下,生成ssh的公钥和私钥
      a:生成命令,三次回车即可
            ssh-keygen -t rsa
            
      b:将秘钥拷贝给指定的服务器,命令:ssh-copy-id IP地址
            
           效果:可以发现202服务器出现这个文件
              
            
  3.  我们将103生成的秘钥分别拷贝到104和202上,通过 ssh-copy-id命令
            
     
  4. 注意:对当前服务器也要配置ssh
      
      
  5. 我们在当前103服务器,使用root用户也配置一下ssh,并且拷贝秘钥给202,104以及本机
  6. 下面我们在104节点使用kgf用户配置ssh
       
       
       
     将秘钥拷贝到103,202
      

四:rsync同步命令

  1.  简介
           rsync远程同步工具,主要用于备份和镜像。具有速度快,避免复制相同内容和支持符号链接的优点。
  2. rsync和scp的区别
           用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
  3. 基本语法
           命令:rsync -rvl 要拷贝的文件路径/名称 目的用户@主机:目的路径
           rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
    选项:
           -r递归
          -v显示复制过程
          -l 拷贝符号链接
  4. 案例:把103本机/opt/tmp目录同步到hadoop104服务器的root用户下的/opt/tmp目录
    a:为kgf用户配置sudo的执行权限,进入vi /etc/sudoers编辑
          
    b:在103本机上opt目录下创建tmp目录
          
          里面存在一个文件
          
     c:下面使用rsync进行同步操作到目标服务器104
          
         查看104服务器效果:可以发现test.txt文件同步过来了。
         

五:编写集群分发脚本xsync

  1.  需求分析:循环复制文件到所有节点的相同目录下,当前机器为103服务器
        a:在/usr/local/bin这个目录下存放的脚本,可以在系统任何地方直接执行
        b:在/usr/local/bin这个目录下创建xsync文件,并修改权限
              
       c:开始编写脚本
             
    #!/bin/bash
    #首先我们需要获取输入参数的个数,如果没有参数直接退出
    pcount=$#
    if((pcount==0));
      then
    	echo no args;
      exit;
    fi  
    
    #获取文件名称
    p1=$1
    fname=`basename $p1`
    echo fname=$fname
    
    #获取上级目录到绝对路径
    pdir=`cd -P $(dirname $p1);pwd`
    echo pdir=$pdir
    
    #获取当前用户名
    user=`whoami`
    
    #最后做循环操作
    for((host=103;host<105;host++));
       do
    	 echo ----------hadoop$host--------
    	 rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
    done;

    d:在/opt目录下创建tmp目录,并且创建test.txt文件,然后我们使用xsync脚本同步到104上去
          
     e:执行效果如下,注意我们配置过ssh免密登录,无需输入密码,
          

六:配置集群

  1. 集群部署规划
           a:3个节点,103,104,202
                
  2.  在103上配置相关的文件信息,到时候正好通过配置文件向各个服务器分发配置文件
        注意:指定使用相关用户kgf
        a:修改指定的core-site.xml文件,这个是hadoop核心文件,进入到指定的目录下/opt/module/hadoop-2.7.2/etc/hadoop/
               
        b:在hadoop.env.sh中配置jdk路径,与上面相同目录下,下面b,c,d配置的都是hdfs相关的文件
             
        c:修改hdfs-site.xml,与上面相同目录下
             
             SecondaryNameNode(snn):是用来保存namenode中对HDFS metadata的信息的备份,并减少namenode重启的时间
        d:配置slaves节点信息,与上面相同目录下
             
            
      e:下面我们配置yarn相关的文件yarn-env.sh,与上面相同目录下
            
      f:下面我们配置yarn相关的文件yarn-site.xml,与上面相同目录下
            
    g:下面配置与mapreduce相关的mapred-env.sh配置文件
           
    h:下面配置与mapreduce相关的mapred-site.xml配置文件
          
  3. 下面我们需要在集群上分发上面我们配置的所有配置文件,分发到104,202上
         a:编写在/usr/local/bin下的xsync脚本
             
    
    #!/bin/bash
    #首先我们需要获取输入参数的个数,如果没有参数直接退出
    pcount=$#
    if((pcount==0));
      then
            echo no args;
      exit;
    fi
    
    #获取文件名称
    p1=$1
    fname=`basename $p1`
    echo fname=$fname
    
    #获取上级目录到绝对路径
    pdir=`cd -P $(dirname $p1);pwd`
    echo pdir=$pdir
    
    #获取当前用户名
    user=`whoami`
    
    #最后做循环操作
    echo ----------hadoop104--------
    rsync -rvl $pdir/$fname $user@hadoop104:$pdir
    
    echo ------hadoop202--------
    rsync -rvl $pdir/$fname $user@hadoop202:$pdir
    
     b:在103的服务器上,在/opt/module/hadoop-2.7.2/etc下执行下面命令
                    

七:集群启动及测试

  1.  进入/opt/module/hadoop-2.7.2目录下,103,104,202三台服务器都要清理之前启动的数据
      
  2.  第一次启动集群,需要格式化namenode,进入/opt/module/hadoop-2.7.2目录下,只需要格式化103即可,因为我们
     的namenode节点配置在103节点上
      命令:bin/hdfs namenode -format
      
  3. 下面我们在103这个namenode的节点上去启动集群,当然ssh必须要配置完成的情况下,进入/opt/module/hadoop-2.7.2目录下
     命令:sbin/start-dfs.sh  这个命令一次性把namenode和datanode启动起来
             
      我们可以分别到104,202服务器去看看
      
  4. 因为我们的resourcemanager是在104上面的,我们在104上启动resourcemanager和nodemanager,
    进入/opt/module/hadoop-2.7.2目录下
     命令:sbin/start-yarn.sh

     可以到103,202服务器上查看,发现NodeManager也启动了,可以对比上面我们的集群规划。
  5. 集群测试
       ⑴集群基本测试
              ①上传文件到集群
                         a:上传小文件
                                   ㈠首先在103的hdfs上创建一个文件夹
                                              命令:hadoop fs -mkdir -p /user/kgf/input
                                               
                                               可以通过浏览器50070端口页面看效果:
                                               
                                    ㈡下面我们创建一个文件通过命令上传到上面刚建的hdfs上的文件夹中
                                            
                                          
                                          点击发现,三台服务器上都有该文件备份:
                                          
                         b:上传一个大文件试试,大于128M的,因为我们可以发现上面Block Size是128,那么
                               大于128M时,会怎么样呢? 下面开始上传:
                              
                              
                             效果:
                                
                                
                             
                                
  6. 集群时间同步
           ⑴问题:因为我们配置的是集群,那么我们在跑数据的时候,这几台服务器的时间必须要保持一致,
                          不然会出现问题。
           ⑵时间同步的方式
                       找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如每隔十分钟同步一次。
                注意:配置时间同步操作必须使用root用户。
           ⑶时间服务器配置(必须是root用户
                       a:检测ntp是否安装,命令:rpm -qa | grep ntp
                             
                      b:修改ntp配置文件,路径:/etc/ntp.conf
                              ①设置本地网络上的主机不受限制
                                     
                               ②设置为不采用公共的服务器
                                     
                               ③添加默认的一个内部时钟数据,使用它为局域网用户提供服务
                                    
                     c:修改/etc/sysconfig/ntpd文件
                                a:让硬件时间与系统时间一起同步
                                     
                                b:重启ntpd
                                     命令:systemctl status ntpd   查看ntpd状态
                                     启动命令:systemctl start ntpd
                                c:设置开启自启动ntp服务
                                      执行:systemctl enable ntpd.service
            ⑷其它机器配置(必须是root用户)
                  a:在其它机器上配置10分钟与时间服务器同步一次(生产环境一般是10分钟,这里我们演示就1分钟)
                         命令:crontab -e然后编写下面的脚本命令
                          */1 * * * * /usr/sbin/ntpdate 要同步时间的服务器地址
                  b:下面我们先同步104服务器
                           
                           
                  c:同理,我们同步202的时间
                        
                  d:测试,我们分别查看3台服务器时间,三台目前都是这个时间
                       
                       下面我们将104的时间修改掉
                        
                       一分钟后.....可以发现时间又同步回来了。
                        

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值