一.说明:

1、伪分布式环境是一台虚拟机,自身既是主节点又是从节点,即既是NameNode也是DataNode
2、完全分布式环境,需要多台虚拟机,这里我们使用一主两从配置
3、我们这里的分布式环境搭建基于之前的伪分布式master主机

二、具体步骤

之前搭建伪分布式时,已经有了一台master虚拟主机,现在再安装两台虚拟主机分别为slave1、salve2

要求如下(具体主机名和ip根据自己情况而定):

然后重启虚拟主机。

3台虚拟机的hosts文件都需配置如下信息:

 192.168.217.100 master 192.168.217.101 slave1 192.168.217.102 slave2 

可以将master的修改好后,可以统一远程copy到slave1和slave2,使用指令:

 scp /etc/hosts root@slave1:/etc/hosts scp /etc/hosts root@slave2:/etc/hosts 

查看slave1和slave2的hosts:

永久关闭slave1和slave2的防火墙和selinux
注意:关闭selinux也可以通过远程copy的方法

在slave1和slave2新建hadoop用户,注意用户名和密码必须都和master一致
注意:修改sudoers也可以通过远程copy的方法

为了方便后期整合ZK和HBase集群,我们推荐实现3台机器相互免密登录,逻辑就是:
1)由于在搭建伪分布式时我们就已经在master上生成了公私钥对,并且将公钥cat到了authorized_keys中,现在我们只需在slave1slave2中分别使用root用户生成公私钥对,代码如下:

 ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa 

2)将slave1和slave2中的id_dsa.pub分别远程拷贝到master中,并重命名:

 #在slave1中执行 scp ~/.ssh/id_dsa.pub root@master:~/.ssh/id_dsa_slave1.pub #在slave2中执行 scp ~/.ssh/id_dsa.pub root@master:~/.ssh/id_dsa_slave2.pub 

3)由于我们原先已经将master的id_dsa.pub公钥cat到了authorized_keys,现在只需在master中将id_dsa_slave1.pubid_dsa_slave2.pub公钥cat进去即可:

 #在master中执行 cat ~/.ssh/id_dsa_slave1.pub >> ~/.ssh/authorized_keys cat ~/.ssh/id_dsa_slave2.pub >> ~/.ssh/authorized_keys 

4)将master中的带有这3台主机公钥的文件authorized_keys远程拷贝到slave1和slave2:

 #在master中执行 scp ~/.ssh/authorized_keys root@slave1:~/.ssh/ scp ~/.ssh/authorized_keys root@slave2:~/.ssh/ 

5)然后测试相互之间的免密登录:

 //安装包: scp -rq /usr/java/ slave1:/usr/ scp -rq /usr/java/ slave2:/usr/ //配置文件: scp -rq /etc/profile/ slave1:/etc/ scp -rq /etc/profile/ slave2:/etc/ //文件生效:在slave1和slave2中: source /etc/profile java -version 

耐心等待,不能Ctrl + C中途停止进程
查看slave1和slave2的usr目录和profile
分别测试java -version

注意1:环境变量不需要再次配置
注意2:hdfs-site.xml文件的dfs.replication的value改为2,因为有两个datanode从节点
注意3:hdfs-site.xml再新增SecondaryName的启动路径,默认在主节点上,这里我们将其配置在slave1节点上(此步可忽略,就放在主节点就可以)

 <property>    <name>dfs.namenode.secondary.http-address</name>    <value>slave1:9868</value> </property> 

注意4:yarn-site.xml再新增 resourcemanager启动位置

 <property>    <name>yarn.resourcemanager.hostname</name>    <value>master</value> </property> 

注意5:新增对workers文件配置,配置从节点主机名,这里我们将slave1和slave2作为从节点:

 sudo vi workers 

原:

现:

注意6:将master的/usr/hadoop目录赋予777权限

 sudo chmod -R 777 /usr/hadoop 

注意7:删除hadoopdata目录:
由于我们之前搭建伪分布式时,hdfs格式化过,在hadoop目录中会生成hadoopdata目录(根据你的配置可能路径和名称不一样),我们需要将该目录删除

 rm -rf hadoopdata 

3)将master上的hadoop目录远程copy到slave1和slave2上:

 sudo scp -rq /usr/hadoop/ root@slave1:/usr/ sudo scp -rq /usr/hadoop/ root@slave2:/usr/ 

时间比较长,需要耐心等待

1)格式化hdfs文件系统
我们只需要在master节点执行格式化操作即可:

 hdfs namenode -format 

2)启动hadoop
我们只需在master节点启动hadoop即可:

 start-all.sh 

3)master执行jps命令,有如下进程:

slave1:

slave2:

4)也可以通过web ui进行访问查看
yarn:http://192.168.217.100:8088/cluster
master:http://192.168.217.100:9870
datanode1:http://192.168.217.101:9864
datanode2:http://192.168.217.102:9864
5)停止hadoop

 stop-all.sh