zoukankan      html  css  js  c++  java
  • 超详细且清晰的hadoop完全分布式集群搭建过程(适合初学者)

    1.集群搭建前准备

    1)基本要求

    - 操作系统: win10/win7

    - 虚拟软件: VMware14

    - 虚拟机:

          主机名       IP

          master  192.168.10.200                

          slave1   192.168.10.201                

          slave2   192.168.10.202

    - 软件包存储路径: /opt/software/

    - 软件安装路径:   /opt/apps/

    - Jdk:   jdk-8u221-linux-x64.tar.gz

    - Hadoop:   hadoop-2.7.6.tar.gz

    - 用户: root


    切记,切记,切记:实际生产环境中,我们不会使用root用户来搭建和管理hdfs,而是使用普通用户。这里 为了方便学习,我们才使用的root用户。

     ps:如果需要相关安装软件或者安装包在下方评论即可

    hdfs和yarn的相关守护进程的布局如下:

    master namenode datanode ResourceManager nodemanager 
    slave1 datanode nodemanager  secondarynamenode  
    slave2 datanode nodemanager     

    2)环境要求

    (1) 三台机器的防火墙必须是关闭的. 
    (2) 确保三台机器的网络配置畅通(NAT模式,静态IP,主机名的配置)
    (3) 确保/etc/hosts文件配置了ip和hostname的映射关系
    (4) 确保配置了三台机器的免密登陆认证(克隆会更加方便)
    (5) 确保所有机器时间同步
    (6) jdk和hadoop的环境变量配置

    a.防火墙关闭确认

    [root@master ~]# systemctl stop firewalld 
    [root@master ~]# systemctl disable firewalld
    #最好也把selinux关闭掉,这是linux系统的一个安全机制,进入文件中将SELINUX设置为disabled 
    [root@master ~]# vi /etc/selinux/config 
    ......... SELINUX=disabled            .........

    情况说明: 如果安装好三台机器,三台机器的防火墙都需要单独关闭和设置开机不启动。如果准备使用 克隆方式,只关闭master机器即可。下面的配置也是如此。

    b.静态IP和主机名配置

    --1. 配置静态IP(确保NAT模式) 
    [root@master ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
     ............ 
    BOOTPROTO=static            #将dhcp改为static
    
    ONBOOT=yes                  #将no改为yes 
    IPADDR=192.168.10.200       #添加IPADDR属性和ip地址 
    PREFIX=24                   #添加NETMASK=255.255.255.0或者PREFIX=24 GATEWAY=192.168.10.2        #添加网关GATEWAY 
    DNS1=192.168.10.2           #添加DNS1和备份DNS
    DNS2=8.8.8.8 
    DNS3=114.114.114.114
    --2. 重启网络服务 
    [root@master ~]# systemctl restart network 或者 
    [root@master ~]# service network restart
    --3. 修改主机名(如果修改过,请略过这一步) 
    [root@localhost ~]# hostnamectl set-hostname master 或者 
    [root@localhost ~]# vi /etc/hostname master

    注意:配置完ip和主机名后,最好reboot一下

    c.配置/etc/hosts文件

    -- 进入hosts文件,配置一下ip和hostname 
    [root@master ~]# sudo vi /etc/hosts 127.0.0.1   
    localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1         
    localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.81.200 master     <=添加本机的静态IP和本机的主机名之间的映射关系  

    d.免密登陆认证

    -1. 使用rsa加密技术,生成公钥和私钥。一路回车即可

    [root@master ~]# cd ~

    [root@master ~]# ssh-keygen -t rsa

    -2. 进入~/.ssh目录下,将id_rsa.pub复制一份文件,文件名为authorized_keys。保证此文件的权限 是600

    [root@master ~]# cd ~/.ssh

    [root@master .ssh]# cp id_rsa.pub authorized_keys

    或者使用ssh-copy-id命令

    [root@master .ssh]# ssh-copy-id -i id_ras.pub root@master

    -3. 进行验证

    [hadoop@master .ssh]# ssh localhost

    [hadoop@master .ssh]# ssh master

    [hadoop@master .ssh]# ssh 0.0.0.0 #输入yes后,不提示输入密码就对了
    注意:三台机器提前安装好的情况下,需要同步公钥文件。如果使用克隆技术。那么使用同一套密钥对就方便 多了。

    2.环境搭建:jdk的安装

    1)检查一下是否已经安装过或者系统内置JDK,如果有内置的,将其卸载

    [root@master ~]# rpm -qa | grep jdk #如果有,请卸载 
    [root@master ~]# rpm -e xxxxxxxx --nodeps      #将查询到的内置jdk代替xxxxxxx

    2)上传jdk1.8

    可使用shell工具上传

    将jdk-8u221-linux-x64.tar.gz上传到/opt/software/目录中

    3)解压jdk到/opt/apps/下

    [root@master ~]# cd /opt/software 
    [root@master software]# tar -zxvf jdk-8u221-linux-x64.tar.gz -C /opt/apps

    4)更名jdk(更名是为了方便配置环境变量,也可不更名)

    [root@master ~]# cd /opt/apps
    [root@master apps]# mv jdk1.8.0_221/  jdk

    5)配置jdk的环境变量

    [root@master apps]# vi /etc/profile
     .........省略........... 
    #jdk environment 
    在最后添加上以下两行
    
    export JAVA_HOME=/opt/apps/jdk export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

    6)更新环境变量

    [root@master apps]# source /etc/profile

    7))验证jdk环境

    [root@master apps]# java -version 
    [root@master apps]# javac

    3.环境搭建:Hadoop的安装步骤

    1)上传并解压Hadoop

    将hadoop软件包上传到/opt/software目录下,然后解压到/opt/apps/目录下 
    [root@master ~]# cd /opt/software/ [root@master software]# tar -zxvf hadoop-2.7.6.tar.gz -C /opt/apps/

    2)更名hadoop

    [root@master software]# cd /opt/apps 
    [root@master apps]# mv hadoop-2.7.6/ hadoop

    3)配置hadoop的环境变量

    [root@master apps]# vi /etc/profile
     .........省略.......... 
    #hadoop environment 
    在最后加入以下两行 export HADOOP_HOME
    =/opt/apps/hadoop export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

    4)使当前配置生效

    [root@master apps]# source /etc/profile

    5)验证hadoop

    [root@master apps]# hadoop version

    如果出现hadoop版本,则代表本地模式已经安装成功。

    4.完全分布式的相关文件的配置

    $HADOOP_HOME/etc/hadoop/目录下的用户自定义配置文件

    - core-site.xml 
    - hdfs-site.xml 
    - mapred-site.xml   复制mapred-site.xml.template而来 
    - yarn-site.xml 

    1)配置core-site.xml文件

    [root@master ~]# cd $HADOOP_HOME/etc/hadoop/
    [root@master hadoop]# vi core-site.xml 
    <configuration>     
        <!-- hdfs的地址名称:schame,ip,port-->    
        <property>      
            <name>fs.defaultFS</name>        
            <value>hdfs://master:8020</value>    
        </property>     
    <!-- hdfs的基础路径,被其他属性所依赖的一个基础路径 -->        
        <property>        
            <name>hadoop.tmp.dir</name>                
             <value>/opt/apps/hadoop/tmp</value>    
        </property> 
    </configuration>
        

    2)配置hdfs-site.xml文件

    [root@master hadoop]# vi core-site.xml 
    <configuration>    
    <!-- namenode守护进程管理的元数据文件fsimage存储的位置-->    
      <property>        
        <name>dfs.namenode.name.dir</name>        
        <value>file://${hadoop.tmp.dir}/dfs/name</value>       </property>     <!-- 确定DFS数据节点应该将其块存储在本地文件系统的何处-->       <property>             <name>dfs.datanode.data.dir</name>        
        <value>file://${hadoop.tmp.dir}/dfs/data</value>       </property>     <!-- 块的副本数-->       <property>             <name>dfs.replication</name>            <value>3</value>       </property>     <!-- 块的大小-->  

     <property>         <name>dfs.blocksize</name>       <value>134217728</value>     </property>     <!-- secondarynamenode守护进程的http地址:主机名和端口号。参考守护进程布局-->       <property>             <name>dfs.namenode.secondary.http-address</name>        
        <value>slave1:50090</value>     </property> </configuration>

    3)配置mapred-site.xml文件

    [root@master hadoop]# cp mapred-site.xml.template  mapred-site.xml
    [root@master hadoop]# vi mapred-site.xml <configuration>
        <!-- 指定mapreduce使用yarn资源管理器-->   
      <property>       
        <name>mapreduce.framework.name</name>       
        <value>yarn</value>   
      </property>   
      <!-- 配置作业历史服务器的地址-->   
      <property>       
        <name>mapreduce.jobhistory.address</name>       
        <value>master:10020</value>   
      </property>   
      <!-- 配置作业历史服务器的http地址-->   
      <property>       
        <name>mapreduce.jobhistory.webapp.address</name>       
        <value>master:19888</value>   
      </property>
    </configuration>

    4)配置hadoop-site.xml文件

    [root@master hadoop]# vi yarn-site.xml <configuration>    
      <!-- 指定yarn的shuffle技术-->    
      <property>        
        <name>yarn.nodemanager.aux-services</name>      
        <value>mapreduce_shuffle</value>    
      </property>    
      <!-- 指定resourcemanager的主机名-->    
      <property>        
        <name>yarn.resourcemanager.hostname</name>        
        <value>master</value>    
      </property>
    </configuration>

    5)配置hadoop-env.sh脚本文件和yarn-env.sh文件

    [root@master hadoop]# vi hadoop-env.sh 
    .........
    # The java implementation to use.
    export JAVA_HOME=/opt/apps/jdk
    .........
    [root@master hadoop]# vi yarn-env.sh 
    ........省略........
    # some Java parameters
    export JAVA_HOME=/opt/apps/jdk
    ........省略........

    6)配置slaves文件,此文件用于指定datanode守护进程所在的机器节点主机名

    [root@master hadoop]# vi slaves 
    master 
    slave1 
    slave2

    5.配置另外两台机器

    当把master机器上的hadoop的相关文件配置完毕后,我们有以下两种方式来选择配置另外几台机器的 hadoop.

    方法一:scp同步

    提示:本方法适用于多台虚拟机已经提前搭建出来的场景。
    --1. 同步hadoop到slave节点上 
    [root@master ~]# cd /opt/apps
    [root@master apps]# scp -r ./hadoop slave1:/opt/apps/
    [root@master apps]# scp -r ./hadoop slave2:/opt/apps/ --2. 同步/etc/profile到slave节点上
    [root@master apps]# scp /etc/profile slave1:/etc/
    [root@master apps]# scp /etc/profile slave2:/etc/ --3. 如果slave节点上的jdk也没有安装,别忘记同步jdk。
    --4. 检查是否同步了/etc/hosts文件

    方法二:克隆master虚拟机

    提示:本方法适用于还没有安装slave虚拟机的场景。通过克隆master节点的方式,来克隆一个slave1和 slave2机器节点,这种方式就不用重复安装环境和配置文件了,效率非常高,节省了大部分时间(免密认证的 秘钥对都是相同的一套)。
    --1. 打开一个新克隆出来的虚拟机,修改主机名 
    [root@master ~]# hostnamectl set-hostname slave1
    --2. 修改ip地址
    [root@master ~]# vi /etc/sysconfig/network-scripts/ifcfg-eh0
      .........省略.........
      IPADDR=192.168.10.201 <==修改为slave1对应的ip地址
      .........省略........
    --3. 重启网络服务
    [root@master ~]# systemctl restart network
    --4. 其他新克隆的虚拟机重复以上1~3步
    --5. 免密登陆的验证
    从master机器上,连接其他的每一个节点,验证免密是否好使,同时去掉第一次的询问步骤
    --6. 建议:每台机器在重启网络服务后,好reboot一下

    6.格式化NameNode

    1)在master机器上运行命令

    [root@master ~]# hdfs namenode -format

    2)格式化的相关信息解读

    --1. 生成一个集群唯一标识符:clusterid 
    --2. 生成一个块池唯一标识符:BlockPoolId
    --3. 生成namenode进程管理内容(fsimage)的存储路径: 默认配置文件属性hadoop.tmp.dir指定的路径下生成dfs/name目录
    --4. 生成镜像文件fsimage,记录分布式文件系统根路径的元数据 --5. 其他信息都可以查看一下,比如块的副本数,集群的fsOwner等

    7.启动集群

    1)启动脚本和关闭脚本介绍

    1. 启动脚本   
      
    -- start-dfs.sh :用于启动hdfs集群的脚本   -- start-yarn.sh :用于启动yarn守护进程
      -- start-all.sh :用于启动hdfs和yarn
    2. 关闭脚本
      -- stop-dfs.sh :用于关闭hdfs集群的脚本
      -- stop-yarn.sh :用于关闭yarn守护进程
      -- stop-all.sh :用于关闭hdfs和yarn

    3. 单个守护进程脚本
      -- hadoop-daemons.sh :用于单独启动或关闭hdfs的某一个守护进程的脚本
      -- hadoop-daemon.sh :用于单独启动或关闭hdfs的某一个守护进程的脚本
      reg:
        hadoop-daemon.sh [start|stop] [namenode|datanode|secondarynamenode]
      -- yarn-daemons.sh :用于单独启动或关闭hdfs的某一个守护进程的脚本
      -- yarn-daemon.sh :用于单独启动或关闭hdfs的某一个守护进程的脚本
      reg:
        yarn-daemon.sh [start|stop] [resourcemanager|nodemanager]

    2)jps查看进程

    master进程:

     slave1进程:

     slave2进程:

     

     3)webui查看

    (需配置本机的hosts文件)

    在浏览器打开:
    (1)
    http://192.168.10.200:50070 (2)http://192.168.10.200:8088

    如有意见或者问题欢迎在评论区指正!!!

  • 相关阅读:
    node
    github
    [模块] pdf转图片-pdf2image
    python 15 自定义模块 随机数 时间模块
    python 14 装饰器
    python 13 内置函数II 匿名函数 闭包
    python 12 生成器 列表推导式 内置函数I
    python 11 函数名 迭代器
    python 10 形参角度 名称空间 加载顺序
    python 09 函数参数初识
  • 原文地址:https://www.cnblogs.com/s1023/p/12439518.html
Copyright © 2011-2022 走看看