在《hadoop(01)、windows平台下hadoop环境搭建》一文中,我们在windows平台上搭建了单机模式的hadoop,本文我们将在linux(CentOS7)下搭建hadoop集群模式,以便实践更多场景下hadoop的使用,尤其是在实际的生产模式中,必定是以集群模式存在。
   一、准备工作
        1.三台CentOS7-64的机器(本文已经在VM中搭建好了)
        2.JDK-LINUX-64的程序包(jdk-8u151-linux-x64.tar.gz)
        3.hadoop-2.8.2的程序包(hadoop-2.8.2.tar.gz)
        4.SSH连接工具(git bash)
        5.FTP传输工具(8uftp)
        
         准备的三台虚拟机:
         192.168.100.10   Master主节点
         192.168.100.20   Slaver从节点1
         192.168.100.30   Slaver从节点2
         
          准备的相关程序包
   二、环境准备
         分别打开三台虚拟机:
        1.向三台主机使用FTP传文件
          打开FTP工具
        注意:如果最小化安装的系统,需要在centos安装ftp服务:yum -y install vsftpd
        特别注意:如果安装ftp服务时不能解析域名,需要配置dns解析:vi /etc/resolv.conf
        nameserver 8.8.8.8
        nameserver 8.8.4.4
        
       安装完成FTP服务,这时候使用FTP服务还是连接不上,我们修改vsftpd的配置文件:
       vi /etc/vsftpd/vsftpd.conf
       
       此时,使用命令: netstat -ntlp,此时FTP服务的21端口已经打开,
       
       使用FTP服务上传hadoop的服务包到/home/hadoop/目录下:
       
       
      上传JDK的程序包/home/java/目录下:
       
       
       2.因为hadoop是java环境下的,于是我们首先安装jdk环境
          进入/home/java 目录使用 ls命令查看文件:
          
         这时能看到刚才使用FTP上传的hadoop的程序包,然后我们使用解压命令:tar -zxvf <file>
         经过一会解压过程,文件解压完成:
         注:文件名太长可写首字母后用tab自动补齐
         
         然后在/etc/profile文件中,配置环境变量,让JDK在所有用户生效:vi /etc/profile
         在文件的最后添加以下设置:
         注:使用某些SSH工具可以直接ctrl+c+v操作,不用手动输入,文本使用的git bash就可以
         export JAVA_HOME=/home/java/jdk1.8.0_151
        export JRE_HOME=$JAVA_HOME/jre 
        export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib 
        export PATH=$JAVA_HOME/bin:$PATH
         
         保存退出后,让修改的环境变量生效:source /etc/profile
         此时环境变量已经生效,我们验证下jdk安装的是否成功: java -version
         
         特别提醒:
         1.禁止防火墙:
                             systemctl stop firewalld.service  停止防火墙
                             systemctl disable firewalld.service 静止开机启动
         2.禁止Selinux:
                             /usr/sbin/sestatus -v  查看Selinux状态                 
                             修改/etc/selinux/config 文件将SELINUX=enforcing改为SELINUX=disabled
   三、集群搭建
        经过前面的所有工作,此时准备工作已经完成。
        1.解压hadoop的程序包
         进入/home/hadoop 目录使用 ls命令查看文件:
         
         这时能看到刚才使用FTP上传的hadoop的程序包,然后我们使用解压命令:tar -zxvf <file>
         经过一会解压过程,文件解压完成:
         
         2.配置环境变量
           执行vi /etc/profile命令,并在文件末尾添加以下:
          export HADOOP_HOME=/home/hadoop/hadoop-2.8.2
          export HADOOP_CONF_HOME=$HADOOP_HOME/etc/hadoop
          export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
          
          保存退出后,让修改的环境变量生效:source /etc/profile
       3.修改配置文件
          <1>.修改启动脚本
          vi /home/hadoop/hadoop-2.8.2/etc/hadoop-env.sh
          vi /home/hadoop/hadoop-2.8.2/etc/yarn-env.sh
          在这来那个文件都添加export JAVA_HOME=/home/java/jdk1.8.0_151
          <2>.修改配置信息
                 首先配置核心文件:vi  /home/hadoop/hadoop-2.8.2/etc/hadoop/core-site.xml
                 <configuration>
                <property>
                <name>fs.defaultFS</name>
                <value>hdfs://192.168.100.10:10000</value>
                </property>
                <property>
                <name>io.file.buffer.size</name>
                <value>131072</value>
                </property>
                <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/home/hadoop/hadoop-2.8.2/tmp</value>
                <description>Abase for other temporary directories.</description>
                </property>
                <property>
                <name>hadoop.proxyuser.root.hosts</name>
                <value>*</value>
                </property>
                <property>
                <name>hadoop.proxyuser.root.groups</name>
                <value>*</value>
                </property>
                </configuration>
                 
                 然后配置HDFS文件:vi  /home/hadoop/hadoop-2.8.2/etc/hadoop/hdfs-site.xml
                <configuration>
               <property>
               <name>dfs.namenode.name.dir</name>
               <value>file:/home/hadoop/hadoop-2.8.2/data/hdfs/name</value>
               </property>
               <property>
               <name>dfs.datanode.data.dir</name>
               <value>file:/home/hadoop/hadoop-2.8.2/data/hdfs/data</value>
               </property>
               <property>
               <name>dfs.replication</name>
               <value>3</value>
               </property>
               <property>
               <name>dfs.namenode.secondary.http-address</name>
               <value>192.168.100.10:20000</value>
               </property>
               <property>
               <name>dfs.webhdfs.enabled</name>
               <value>true</value>
               </property>
               </configuration>
                 
                 再配置YARN文件:yarn-site.xml
                 <configuration>
                <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
                </property>
                <property>
                <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
                <value>org.apache.hadoop.mapred.ShuffleHandler</value>
                </property>
                <property>
                <name>yarn.resourcemanager.scheduler.address</name>
                <value>192.168.100.10:8030</value>
                </property>
                <property>
                <name>yarn.resourcemanager.address</name>
                <value>192.168.100.10:8032</value>
                </property>
                <property>
                <name>yarn.resourcemanager.admin.address</name>
                <value>192.168.100.10:8033</value>
                </property>
                <property>
                <name>yarn.resourcemanager.resource-tracker.address</name>
                <value>192.168.100.10:8035</value>
                </property>
                <property>
                <name>yarn.resourcemanager.webapp.address</name>
                <value>192.168.100.10:8088</value>
                </property>
                </configuration>
                 
                 最后修改slaves配置文件:
                 192.168.100.10
                 192.168.100.20
                 192.168.100.30
                 
       4.从节点安装
         将刚刚主节点配置的hadoop复制到我们准备好的两个从节点的机器上,如果目录一致则不需要修改环
         境变量,不一样修改对应的环境变量。(本文使用了快捷的方式,直接将主节点的虚拟机镜像手动克隆
         了两份作为从节点,该方法快捷简单,可以参考《VMware Workstation player 克隆多个CentOS实
          践》),这样两个从节点也都配置好了。
       5.配置主结点SSH免密登录子结点
         在主节点机器上执行:ssh-keygen -t rsa
         然后回车一直到完成:
         
         将id_rsa.pub重定向到authorized_keys:cat id_rsa.pub>>authorized_keys
          
         同理,两个从节点也都执行此步骤。
         
         
        在主节点机器上将两个从节点的id_rsa.pub追加到authorized_keys
        ssh hdpc02 cat /root/.ssh/id_rsa.pub>>authorized_keys
        ssh hdpc03 cat /root/.ssh/id_rsa.pub>>authorized_keys
        
        出现不能解析域名的问题,我们需要在三个节点的机器上配置下hosts:vi /etc/hosts
        
        然后执行:
        
        在主节点机器将authorized_keys分发到两个从节点的/root/.ssh目录下
        scp authorized_keys hdpc02:/root/.ssh/
        scp authorized_keys hdpc03:/root/.ssh/
         
         此时主节点机器对两个从节点机器的免密登陆配置完成,我们测试下:
         ssh hdpc02
         
         ssh hdpc03
          
  
   四、集群验证
        1.在主节点上格式化
          hadoop namenode -format 或者 hdfs namenode -format
          
         此时已经成功格式化。
        2.在主节点启动集群
          执行start-all.sh
          
          
          
          
         使用hadoop dfsadmin -report查看个节点信息:
         
         
        3.web页面查看:192.168.100.10:50070
          
           4.web查看集群信息:192.168.100.10:8088
             
           5.停止集群
             执行stop-all.sh
             
   五、总结
        本文是完整的hadoop集群搭建过程,通过这过hadoop集群的工作方式有了更深的认识,同时也是整体能力的一个考验,为什么这么说,因为搭建过程中遇到很多额外的知识,比如我在搭建过程中遇到很多坑,FTP21号端口被防火墙拦截等问题。最后一步步解决各种问题,成功实践hadoop集群的搭建,在此记录一下,顺道帮助更多学习的同学。