环境:CentOS7 64位 3台
centos7-1 192.168.190.130 master
centos7-2 192.168.190.129 slave1
centos7-3 192.168.190.131 slave2

hadoop 下载地址:http://mirrors.hust.edu.cn/apache/hadoop/common/ 选则3.1.0版本

1.安装三台虚拟机(centos7),安装jdk,实现节点间免密码登陆。

 #安装虚拟机不做说明,可查看相关文章资料。
 #安装jdk,配置JAVA_HOME环境变量,不做说明,自行百度。
 #三个虚拟机都需要修改hostname,修改/etc/hosts
 #vim /etc/hostname              //分别写成master,slave1,slave2,修改后需要重新启动reboot
 #vim /etc/hosts
 #192.168.190.130 master
 #192.168.190.129 slave1
 #192.168.190.131 slave2
 #给三台机器设置面密码ssh登陆
 #ssh-keygen  -t   rsa             //生成密钥,三台机器都需要执行相同的命令

CentOS7-Hadoop安装
#authorized_keys
#touch /root/.ssh/authorized_keys //master节点上
#cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
#把slave1、slave2上的id_rsa.pub都拷贝到master节点上,直接追加到authorized_keys
#scp -r /root/.ssh/id_rsa.pub root@masterIP:/root/.ssh/slave1.id_rsa.pub //slave1
#scp -r /root/.ssh/id_rsa.pub root@masterIP:/root/.ssh/slave2.id_rsa.pub //slave2
#cat /root/.ssh/slave1.id_rsa.pub >> /root/.ssh/authorized_keys //master
#cat /root/.ssh/slave2.id_rsa.pub >> /root/.ssh/authorized_keys //master
#authorized_keys内容如下:
CentOS7-Hadoop安装
#通过scp命令将master的authorized_keys拷贝到slave1\slave2的/root/.ssh/下
#scp -r /root/.ssh/authorized_keys root@Slave1IP:/root/.ssh/
#scp -r /root/.ssh/authorized_keys root@Slave2IP:/root/.ssh/

 #ssh 目标域名                 //master、slave1、slave2,第一次需要确认一下输入yes,后面就不用了
 到此免密码登陆已经完成。    

2.载hadoop,解压tar.gz文件

        #cd /usr
        #mkdir hadoop
        #cd hadoop
        #wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-3.1.0.tar.gz
        #tar  -zxvf hadoop-3.1.0.tar.gz

         解压后,出现hadoop-3.1.0工作目录,既可以使用。
         #cd /usr/hadoop/hadoop-3.1.0
         #mkdir tmp
         #./bin/hadoop -version   //检验是否可以使用

2.设置环境变量,全局(/etc/profile)

    #vim /etc/profile
    设置HADOOP_HOME,并加到PATH路径下
    HADOOP_HOME=/usr/hadoop/hadoop-3.1.0
    PATH=$PATH:$HADOOP_HOME/bin
    #source /etc/profile

3.配置hadoop

    #hadoop主要的文件,路径hadoop-3.1.0/etc/hadoop/下
    hadoop-env.sh             //
    core-site.xml                // 
    hdfs-site.xml                //
    mapred-site.xml          //
    yarn-site.xml               //
    workers                      // 只要配置namenode节点,用于发现slave节点

    a.hadoop-env.sh配置
    export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.171-0.b13.el7_3.x86_64

    b.core-site.xml配置
    <configuration>
        <property>
          <name>fs.default.name</name>  
                <value>hdfs://master:9000</value>
          <description>HDFS的URI,文件系统://namenode标识:端口号</description>   
         </property>     
         <property>      
             <name>hadoop.tmp.dir</name>
                 <value>/usr/hadoop/tmp</value> 
                 <description>namenode上本地的hadoop临时文件夹</description> 
         </property> 
    </configuration>

   c.配置hdfs-site.xml
     <configuration>
         <property>
             <name>dfs.replication</name> 
             <value>1</value>  
             <description>副本个数,配置默认是3,应小于datanode机器数量</description>  
        </property>  
   </configuration>

     d.配置mapred-site.xml
    <configuration>  
        <property>  
            <name>mapreduce.framework.name</nam
            <value>yarn</value> 
        </property>  
    </configuration>

    e.配置yarn-site.xml
     <configuration>  
             <property>  
                         <name>yarn.nodemanager.aux-services</name>  
                         <value>mapreduce_shuffle</value>  
             </property> 
             <property>
                         <name>yarn.nodemanager.aux-services</name>
                         <value>mapreduce_shuffle</value>
            </property>
    </configuration>

    f.配置workers(slaves)文件,这里特别注意一下版本不同可能没有slaves文件,删除localhost,一行一个,填写ip地址也可以(只在namenode节点配置)
    slave1   
    slave2

4.将/usr/hadoop复制到其他服务器:
#scp -r /usr/hadoop root@目标ip:/usr/hadoop

5.格式化namenode:
#CD /usr/hadoop/hadoop-3.1.0

./bin/hdfs namenode -format

成功的话,会看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若为 “Exitting with status 1” 则是出错;备注:只需格式化namenode,datanode不需要格式化(若格式化了,可将/usr/hadoop/tmp目录下文件都删除),所以先将安装文件夹复制到其他服务器,再格式化

6.启动hadoop
#cd /usr/hadoop/hadoop-3.1.0
#sbin/start-all.sh

8.检查启动结果
#jps
CentOS7-Hadoop安装

总结:
a.访问http://192.168.190.130:9000时发现,端口拒绝访问
    关闭防护墙,依然没有用,查看端口占用情况(netstat -npl | grep 9000)发现没有被占用,后来看到hadoop namenode -format消息发现定位到了127.0.0.1,无法远程访问,通过修改hosts文件可以解决这个问题:
    #cd /etc/hosts               //三台虚拟机都要修改
    #vim /etc/hosts             //将下面的写在文件最前面
    #192.168.190.130 master
    #192.168.190.129 slave1
    #192.168.190.131 slave2
    重新格式化namenode节点:
    #cd /usr/hadoop/hadoop-3.1.0/bin
    #./hadoop namenode -format

b.发现经过a后,可以访问9000端口,但是如下图:

CentOS7-Hadoop安装
但是访问8088端口可以进入,如下:
CentOS7-Hadoop安装
发现只有一个节点启动了,所以现在的问题是:namenode启动起来了,但是slave1,slave2两个datanode没有启动起来,那么这个集群启动就失败了,分别在两台datanode节点查看jps,发现确实没有启动,继续找问题。
查看别人的安装过程,发现有个叫做slaves的文件,作用于namenode节点,用于发现slave节点,在配置文件etc/hadoop中我找了半天没有找到,我最后自己创建slaves文件,依然没有用,然后看这路径里的workers文件发现了些什么,于是就打开一看果然就是他,然后重新操作就可以了。
3.1.0版本的slaves文件换成了workers文件,需要特别注意。
CentOS7-Hadoop安装
c.启动时可以直接把所有都启动,命令如下:
#cd /usr/hadoop/hadoop-3.1.0
#sbin/start-all.sh
d.#sbin/start-dfs.sh执行脚本报错,如下:

ERROR: Attempting to launch hdfs namenode as root

ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting launch.
Starting datanodes
ERROR: Attempting to launch hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting launch.
Starting secondary namenodes [localhost.localdomain]
ERROR: Attempting to launch hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting launch.
解决方法:
在start-dfs.sh 、stop-dfs.sh加如下配置
HDFS_DATANODE_USER=root
 HADOOP_SECURE_DN_USER=hdfs
 HDFS_NAMENODE_USER=root
 HDFS_SECONDARYNAMENODE_USER=root
添加后可能还是会报如下警告:
WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER.
解决办法:替换上述的解决方法
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

d.#sbin/start-yarn.sh执行脚本报错,如下:
Starting resourcemanager

ERROR: Attempting to launch yarn resourcemanager as root
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting launch.
解决办法:start-yarn.sh、stop-yarn.sh添加如下配置
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

本文是查看了网络博客与官方文档,结合自己操作所记录的所有过程,如果有不对或者错误,请留言指正,如有侵权,请联系本人删除。
参考博客:https://www.linuxidc.com/Linux/2018-02/150812.htm