在这之前我们进行了伪分布式的配置,接下来我们开始配置全分布,全分布需要多个结点组成,下面是我的各结点的信息:
| 结点名称 | ip信息 |
|---|---|
| master | 196.168.0.104 |
| slave1 | 196.168.0.105 |
| slave2 | 196.168.0.106 |
1.配置master结点
我们之前已经安装了SSH server、安装了JAVA环境和hadoop,接下来我们只需要修改当前结点主机名**(修改后重启就可以看见机器名的变化了)**,修改自己所用结点的IP映射:
sudo vim /etc/hostname #进入之后直接将里面的内容替换为master就可以了
修改所用结点的IP映射
sudo vim /etc/hosts
例如我使用的三个结点的名称与对应的IP关系如下:
我们在 /etc/hosts 中将该映射关系填写上去即可(一般该文件中只有一个 127.0.0.1,其对应名为 localhost,如果有多余的应删除,特别是不能有 “127.0.0.1 Master” 这样的记录)
在这之前我们只配置了这一个结点,那我们还需要两个结点那我们就直接通过复制就可以进行,操作过程如下:
这里可以修改你自己想要的名称和保存路径,Mac地址选择包含所有网卡
选择完全复制,点击复制按钮等待复制完成之后就好
在复制完之后,新的两个结点的主机名和ip信息都和master结点一样,所以我们在这要将这两个结点的主机名修改为文章顶部表格里的信息,修改主机名的方法就不多描述了。
由于我们之前的ip地址是动态的,动态分布的就会导致我们后面很麻烦,所以在这提供一个更改为静态ip的办法。但是ubantu的版本不同修改为静态ip的办法也会不同,所以在这里只介绍ubantu16.04版本的修改方法,如下:
ifconfig #查看虚拟机的ip,在接下我们会用到自动备援模式的名称也会显示
接下来进入/etc/network文件下
cd /etc/network sudo vim interfaces
进入编辑器之后在原本内容下面加入以下内容并保存:
auto enp0s3 #这里写你自己的自动备援模式名称 iface enp0s3 inet static #表示静态 address 192.168.0.104 #这里可以写你自己想要设定的ip地址 netmask 255.255.255.0 #掩码 gateway 192.168.0.1 #网关 broadcast 192.166.0.255 #广播码
最后我们还需要设置固定的DNS,进入systemd:
cd /etc/systemd sudo vim resolved.conf
找到DNS那行取消掉注释:
DNS=144.144.144.144
配置好各结点之后我们需要在各个结点上执行如下命令,测试是否相互ping得通,如果ping不通,后面就无法顺利配置成功:
ping master -c 3 #只ping三次,超过三次可Ctrl+c 中断 ping slave1 -c 3 ping slave2 -c 3
例如我在Master结点上ping slave1,ping通会显示time,显示的结果如下图所示:
继续下一步配置前,请先完成所有节点的网络配置,修改过主机名的话需重启才能生效。
这个操作是要让 master 节点可以无密码 SSH 登陆到各个 Slave 节点上。
首先生成 master 节点的公匙,在 master 节点的终端中执行(因为改过主机名,所以还需要删掉原有的再重新生成一次):
cd ~/.ssh # 如果没有该目录,先执行一次ssh localhost rm ./id_rsa* # 删除之前生成的公匙(如果有) ssh-keygen -t rsa # 一直按回车就可以
让 Master 节点需能无密码 SSH 本机,在 master 节点上执行:
cat ./id_rsa.pub >> ./authorized_keys
完成后可执行 ssh master 验证一下(可能需要输入 yes,成功后执行 exit 返回原来的终端)。接着在 master 节点将上公匙传输到 slave1,slave2 节点:
scp ~/.ssh/id_rsa.pub hadoop@slave1:/home/hadoop/ scp ~/.ssh/id_rsa.pub hadoop@slave2:/home/hadoop/
接着在 slave1,slave2节点上,将 ssh 公匙加入授权:
mkdir ~/.ssh # 如果不存在该文件夹需先创建,若已存在则忽略 cat ~/id_rsa.pub >> ~/.ssh/authorized_keys rm ~/id_rsa.pub # 用完就可以删掉了
这样,在master结点上就可以无密码SSH到各个slave结点了,可在master结点上执行如下命令进行检验,如下图所示:
集群/分布式模式需要修改 /usr/local/hadoop/etc/hadoop 中的5个配置文件,更多设置项可点击查看官方说明,这里仅设置了正常启动所必须的设置项: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。在配置过程中注意大小写,主机名要一致。
1.文件 slaves,将作为 DataNode 的主机名写入该文件,每行一个,默认为 localhost,所以在伪分布式配置时,节点即作为 NameNode 也作为 DataNode。分布式配置可以保留 localhost,也可以删掉,让 master 节点仅作为 NameNode 使用。
本文让master结点仅作为NameNode使用,英雌将原来的localhost删除,添加内容如下:
slave1 slave2
2.core-site.xml改为下面的配置
fs.defaultFS hdfs://master:9000 hadoop.tmp.dir file:/usr/local/hadoop/tmp Abase for other temporary directories.
3.文件 hdfs-site.xml改为下面呢配置
dfs.namenode.secondary.http-address master:50090 dfs.replication 2 dfs.namenode.name.dir file:/usr/local/hadoop/tmp/dfs/name dfs.datanode.data.dir file:/usr/local/hadoop/tmp/dfs/data
4.文件 mapred-site.xml (可能需要先重命名,默认文件名为 mapred-site.xml.template),然后配置修改如下:
mapreduce.framework.name yarn mapreduce.jobhistory.address master:10020 mapreduce.jobhistory.webapp.address master:19888
5.文件 yarn-site.xml
yarn.resourcemanager.hostname master yarn.nodemanager.aux-services mapreduce_shuffle
配置好后,将 master 上的 /usr/local/Hadoop 文件夹复制到各个节点上。因为之前有跑过伪分布式模式,建议在切换到集群模式前先删除之前的临时文件。在 Master 节点上执行:
cd /usr/local sudo rm -r ./hadoop/tmp # 删除 Hadoop 临时文件 sudo rm -r ./hadoop/logs/* # 删除日志文件 tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先压缩再复制 cd ~ scp ./hadoop.master.tar.gz Slave1:/home/hadoop scp ./hadoop.master.tar.gz Slave2:/home/hadoop
在 slave1,2 节点上执行:
sudo rm -r /usr/local/hadoop # 删掉旧的(如果存在) sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local sudo chown -R hadoop /usr/local/hadoop
首次启动需要先在 master 节点执行 NameNode 的格式化:
hdfs namenode -format #如果出现命令错误就输入下面两行 cd /usr/local/hadoop ./sbin/hdfs namenode -format
接着可以启动 hadoop 了,启动需要在 Master 节点上进行
start-dfs.sh #如果出现命令错误,可使用前面格式化所用方面,使用相对路径 start-yarn.sh mr-jobhistory-daemon.sh start historyserver
最后可以用JPS命令验证是否成功:
也可以通过 Web 页面看到查看 DataNode 和 NameNode 的状态:http://master:50070/。如果不成功,可以通过启动日志排查原因。



