zoukankan      html  css  js  c++  java
  • hadoop-2.8.0 完全分布式运行模式

    1.虚拟机准备

      准备三台客户机(安装JDK8,关闭防火墙,静态ip,主机名称)

      修改etc/hosts文件

    192.168.138.102 hadoop102
    192.168.138.103 hadoop103
    192.168.138.104 hadoop104

    2.编写集群分发脚本xsync

      2.1 scp(secure copy)安全拷贝

        2.1.1 scp定义

          scp可以实现服务器与服务器之间的数据拷贝;

        2.1.2 基本语法

    scp  -r  $pdir/$fname      $user@hadoop$host:$pdir/$fname
    命令 递归  要拷贝的文件路径/名称  目的用户@主机:目的路径/名称

        2.1.3 在192.168.138.55主机上,将192.168.138.187中的/opt/module目录下的软件拷贝到192.168.138.66上;

    scp -r 192.168.138.55:/opt/module/hadoop 192.168.138.66:/opt/module

        2.1.4 在192.168.138.77主机上,将0192.168.138.55服务器上的/opt/module目录下的软件拷贝到192.168.138.77上;

    scp -r 192.168.138.55:/opt/module/hadoop 192.168.138.77:/opt/module

      2.2 rsync运城同步工具

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

        rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所以文件都复制过去;

        2.2.1 查看rsync使用说明

    man rsync | more

        2.2.2 基本语法

    rsync -rvl     $pdir/$fname         $user@hadoop$host:$pdir
    #命令 命令参数  要拷贝的文件路径/名称    目的用户@主机:目的路径

        2.2.3 选项说明

          

        2.2.4 将55机器上的/opt/sodtware目录同步到66服务器的/opt目录下

    rsync -rvl /opt/software/* 192.168.138.66:/opt/software/

        2.2.5 原始拷贝

    rsync  -rvl     /opt/module    192.168.138.77:/opt/

        2.2.6 脚本实现

    #!/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=102; host<104; host++)); do
           echo --------------------- hadoop$host ----------------
           rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
    done

        2.2.7 修改脚本xsync具有执行权限

    chmod 777 xsync

        2.2.8 执行脚本文件

    ./xsync xsync 

    3.集群配置

      1.集群部署规划

              hadoop55     hadoop66    hadoop77

        HDFS    NameNode      DataNode    SecondaryNameNode

              DataNode              DataNode

        YARN   NodeManager    ResourceManager

                        NodeManager    NodeManager

      2.配置集群(三台机器)

        2.1 配置core-site.xml文件【/hadoop/etc/hadoop】目录下

    <configuration>
         <!--NameNode的IP地址和端口-->
         <property>
              <name>fs.defaultFS</name>
              <value>hdfs://hadoop102:9000</value>
         </property>
          <!--指定hadoop运行时产生文件的存储目录-->
          <property>
               <name>hadoop.tmp.dir</name>
               <value>/opt/module/hadoop/data/temp</value>
          </property>
    </configuration>

        2.2 配置hdfs-site.xml文件

    <configuration>
         <!--指定HDFS副本的数量-->
         <property>
             <name>dfs.replication</name>
           <value>3</value>
         </property>
        <property>
            <name>dfs.namenode.secondary.http-address</name>
            <value>hadoop104:50090</value>
        </property>
    </configuration>

        2.3 配置hadoop-env.sh文件

    # The java implementation to use.
    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64

        2.4 配置yarn-env.sh文件

    # some Java parameters
    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64

        2.5 配置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>

        2.6 配置mapred-env.sh问价

    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64

        2.7 配置mapred-site.xml文件

    <configuration>
    <!-- 指定MR运行在YARN上 -->
         <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
         </property>
    </configuration>

        2.8 在集群上分发配置好的hadoop配置文件

    ./xsync /opt/module/hadoop/

    4.集群单点启动

      4.1 如果集群是第一次启动,需要格式化NameNode

    bin/hdfs namenode -format

        

      4.2 在hadoop55上启动NameNode

    hadoop-daemon.sh start namenode

      4.3 在hadoop55,hadoop66,hadoop77上分别启动DataNode

    hadoop-daemon.sh start datanode

      4.4 在hadoop77上启动SecondaryNameNode

    hadoop-daemon.sh start secondarynamenode

      4.5 访问

        

      4.6 hadoop完全分布式环境下,DataNode正常启动,但是网页上显示DataNode节点

        解决方案如下:

          1.查看/etc/hosts是否配置了所有从节点的hostname到ip的映射关系;

          2.在namenode的机器上修改hafs.site.xml文件,加入配置后,DataNode重新启动

    <property>
         <name>dfs.namenode.datanode.registration.ip-hostname-check</name>
         <value>false</value>
    </property>

    5.SSH无密登录配置

      5.1 配置ssh

        5.1.1 ssh基本原理

          SSH之所以能够保证安全,原因在于它采用了公钥加密,过程如下:

            1.远程主机收到用户的登录请求,把自己的公钥发给用户;

            2.用户使用这个公钥,将登录密码加密后,发送回来;

            3.远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录;

        5.1.2 基本语法

          假如用户名为java,登录远程主机名为Linux,命令如下:

            $ssh java@linux

          SSH默认端口为22,也就是说,你的登录请求会发进远程主机的22端口。使用p参数,可以修改这个端口,例如改为88端口,命令如下:

            $ssh -p 88@linux

          注意:如果出现错误提供:ssh:Could not resolve hostname linux:Name or service not known,则是因为Linux主机为添加本主机的Name Server中,故不能识别,需要在/etc/hosts里添加进该主机及对应IP即可:

            linux  192.168.138.102

      5.2 无密钥配置

        5.2.1 免密登录原理

          Master作为客户端,要实现无密码公钥认证,连接搭到服务器salve上时,需要在master上生成一个密钥对,包含一个公钥和一个私钥,而后将公钥复制到所以逇salve上。当master通过ssh连接salve是,salve就会生成一个随机数并用master的公钥对随机数进行加密,并发送给master。master收到加密数之后再用私钥解密,并将解密后数回传给slave确认解密数无误之后就允许master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。

        5.2.2 在master主机(hadoop102)上生成一个无密码密钥对  

    ssh-keygen -t rsa

          运行后询问其保存路径时直接回车即可,采用默认路径;

          生成的密钥对:id_rsa(私钥),id_rsa.pub(公钥),默认存储在‘/用户名/.ssh’目录下;

          

        5.2.3 查看密钥对

    cd .ssh

          

        5.2.4 将master(hadoop102)节点上的公钥传送到远程主机上

    ssh-copy-id hadoop103

          

          查看hadoop103是否传送成功

          

        5.2.5 测试无密码登录

    ssh hadoop103

          

      5.3 ssh文件夹下的文件功能解释

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

    6.群起集群

      6.1 配置Slaves

    cd /opt/module/hadoop/etc/hadoop/
    vim slaves

        

        配置完成后,分发给其他节点

    ./xsync /opt/module/hadoop/etc/hadoop/

      6.2 启动集群

        6.2.1 如果第一次启动,需要格式化NameNode

    bin/hdfs namenode -format

        6.2.2 在hadoop102机器上启动HDFS

    start-dfs.sh

          

          

          

          

        6.2.3 在hadoop103机器上启动yarn

    start-yarn.sh

          

           

          

          

        6.2.4 访问

          HDFS:http://192.168.138.102:50070

            

          YARN:http://192.168.138.103:8088

            

    7.启动MapReduce程序进行测试

      7.1 在hadoop目录下创建一个文件夹名为wcinput

    mkdir wcinput

      7.2 在wcinput文件夹里创建一个wc.input文件并编译

    cd wcinput
    touch wc.input
    vim wc.input

        

      7.3 返回/opt/module/hadoop 目录下

      7.4 执行程序

    hadoop fs -put wcinput /

        

      7.5 执行MapReduce程序

    hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.0.jar wordcount /wcinput /wcoutput

        

      7.6 查看运行结果

    hadoop fs -cat /wcoutput/*

    8.集群启动/停止方式总结

      8.1 各个组件逐一启动/停止

        8.1.1 分别启动/停止hdfs组件

    hadoop-daemon.sh  start|stop  namenode|datanode|secondarynamenode

        8.1.2 分别启动/停止yarn组件

    yarn-daemon.sh  start|stop  resourcemanager|nodemanager

      8.2 各个模块分开启动/停止(配置ssh前提)常用

        8.2.1 整体启动/停止hdfs

    start-dfs.sh 
    stop-dfs.sh

        8.2.2 整体启动/停止yarn

    start-yarn.sh 
    stop-yarn.sh

     9.集群时间同步

      时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间。

      9.1 检查是否安装

    rpm -qa|grep ntp

        

      9.2 查看ntpd服务是否开启 

    service ntpd status

        

        如果开启需要关闭,然后进行下面的操作;

      9.3 修改ntp配置文件

    vim /etc/ntp.conf

        9.3.1 修改1(授权192.168.1.0网段上的所有机器可以从这台机器上查询和同步时间)

    #restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap为
    restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

        9.3.2 修改2(集群在局域网中,不使用其他的网络时间)

          

        9.3.3 添加3(当该节点丢失网络连接,依然可以作为时间服务器为集群中的其他节点提供时间同步)

    server 127.127.1.0
    fudge 127.127.1.0 stratum 10

      9.4 修改/etc/sysconfig/ntpd文件 

    vim /etc/sysconfig/ntpd

        增加内容如下(让硬件时间与系统时间一起同步)

    SYNC_HWCLOCK=yes

      9.5 重新启动ntpd服务

    service ntpd start

      9.6 设置ntpd服务器开启启动

        9.6.1 在其他机器上配置1分钟与时间服务器同步一次

    crontab -e

          编写内容如下:

    */1 * * * * /usr/sbin/ntpdate hadoop102

        9.6.2 修改任意机器的时间

    date -s "2017-9-11 11:11:11"

        9.6.3 一分钟后查看机器是否与时间服务器同步

    date

          

  • 相关阅读:
    洛谷 P2922 [USACO08DEC]秘密消息Secret Message
    HDU 1542 Atlantis
    洛谷 P2146 软件包管理器
    rabbitmq
    POJ——T2446 Chessboard
    洛谷—— P3375 【模板】KMP字符串匹配
    洛谷——P3370 【模板】字符串哈希
    POJ——T1860 Currency Exchange
    洛谷—— P3386 【模板】二分图匹配
    python(1)- 初识python
  • 原文地址:https://www.cnblogs.com/wnwn/p/12521746.html
Copyright © 2011-2022 走看看