ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 1. 虚拟机准备 需要至少3台虚拟机。 我已安装了一台centos7的虚拟机,并且这台虚拟机也已经安装了jdk和hadoop环境,下面通过复制这台虚拟机来创建另外三个虚拟机。 ```java 如果你没有一台准备了jdk和hadoop环境的虚拟机,可以按照 【hadoop -> hadoop安装】一节来准备一台虚拟机。 ``` **一:创建三台新的虚拟机** 1. 找到我们原先虚拟机文件的安装目录,拷贝3份文件夹并重命名 ![](https://img.kancloud.cn/8d/18/8d1860366c34f35054c873bca863759e_1250x87.png) 2. 在VMware软件打开虚拟机 ![](https://img.kancloud.cn/48/22/48225bab9b995c46b7df908c1c495604_1424x684.png) 3. 重命名三台虚拟机 ![](https://img.kancloud.cn/fe/4d/fe4dd29c3c91e878e7d09db0e25f5308_1178x476.png) 4. 给新的虚拟机新生成一个MAC地址(以Centos7_102为例,剩余的两台也是同样的步骤进行配置) ![](https://img.kancloud.cn/e0/74/e0740f57c12d217ea3aafe41c69f6dd8_1092x819.png) 5. 开启虚拟机 ![](https://img.kancloud.cn/9e/9b/9e9b36d925720d42c76886cbb703e6f2_1220x350.png) 输入账号和密码登录,与原虚拟机一致 ![](https://img.kancloud.cn/dc/c9/dcc93d3b297ca67ce5829599594eb8ed_1073x327.png) 6. 修改网卡 ```xml -- 修改/etc/sysconfig/network-scripts/ifcfg-eno16777736 配置文件 # 修改为上面刚生成的MAC地址 HWADDR="00:50:56:20:74:F0" # 更改为一个新的ip地址,我给139 IPADDR="192.168.64.139" -- 重启网络 # systemctl restart network -- 查看ip是否已经发生变化,我的由原来的138变成了139,修改成功 # ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:50:56:20:74:f0 brd ff:ff:ff:ff:ff:ff inet 192.168.64.146/24 brd 192.168.64.255 scope global dynamic eno16777736 valid_lft 1442sec preferred_lft 1442sec inet 192.168.64.139/24 brd 192.168.64.255 scope global secondary eno16777736 valid_lft forever preferred_lft forever inet6 fe80::250:56ff:fe20:74f0/64 scope link valid_lft forever preferred_lft forever ``` 将剩余的两台也重新生成一个MAC地址,分别修改ip为192.168.64.140、192.168.64.141。<br/> **二:配置上面创建的三台虚拟机** 给三台虚拟机分配的主机名分别为hadoop102、hadoop103、hadoop104。 下面以Centos7_102的配置为例,剩余的两台也按照如下步骤更改。 1. 修改主机和进行端口映射 ```xml -- 在 /etc/hostname 配置文件中更改主机名 hadoop102 -- 在每台虚拟机的 /etc/hosts/ 将三台虚拟机的端口映射 192.168.64.139 hadoop102 192.168.64.140 hadoop103 192.168.64.141 hadoop104 -- 重启虚拟机 # reboot ``` <br/> # 2. SSH无密码登录配置 注意:下面的配置有些虚拟机要配置,而有些不需要。 1. 生成公钥和私钥(三台设备均需要执行) ```xml # cd /root/.ssh # ssh-keygen -t rsa -- 接着输入3个回车 # ls --生成如下三个文件 id_rsa(私钥) id_rsa.pub(公钥) known_hosts(记录ssh访问过计算机的公钥) ``` 2. 合并公钥(仅需在其中一台虚拟机操作即可,我在hadoop102进行操作) ```xml # cd /root/.ssh # ssh root@hadoop102 cat ~/.ssh/id_rsa.pub > authorized_keys # ssh root@hadoop103 cat ~/.ssh/id_rsa.pub >> authorized_keys # ssh root@hadoop104 cat ~/.ssh/id_rsa.pub >> authorized_keys ``` 3. 把hadoop102 服务器的 authorized_keys、known_hosts 复制到 hadoop103、hadoop104服务器的 /root/.ssh 目录 ```xml -- 在hadoop102执行下面的命令,然后在hadoop103和hadoop104服务器就有一个authorized_keys文件 # scp authorized_keys root@hadoop103:/root/.ssh/ # scp authorized_keys root@hadoop104:/root/.ssh/ # scp known_hosts root@hadoop103:/root/.ssh/ # scp known_hosts root@hadoop104:/root/.ssh/ ``` 4. 测试 完成上面的配置后,三台虚拟机可以相互访问,并且不输入任何密码。 ```xml # ssh hadoop102 # ssh hadoop103 # ssh hadoop104 ``` <br/> # 3. 单节点安装及资源分发 进行资源分发,只需要在其中一台虚拟机上操作即可,我选hadoop102。 ```xml -- /opt/install/hadoop/是安装hadoop的目录 # scp -r /opt/install/hadoop/ root@hadoop103:/opt/install # scp -r /opt/install/hadoop/ root@hadoop104:/opt/install ``` <br/> # 4. 集群配置 集群部署规划如下表 | | hadoop102 | hadoop103 | hadoop104 | | --- | --- | --- | --- | | HDFS | NameNode<br/>DataNode | DataNode | SecondaryNameNode<br/>DataNode | | YARN | NodeManager | ResourceManager<br/>NodeManager | NodeManager | 先在hadoop102上进行配置,然后分发到hadoop103和hadoop104机器上。 **一:HDFS的配置** 1. 在 {hadoop_home}/etc/hadoop/core-site.xml 指定NameNode地址。 ```xml <!-- 指定HDFS中NameNode的地址--> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:9000</value> </property> <!-- 指定hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/install/hadoop/data/tmp</value> </property> ``` 2. 在 {hadoop_home}/etc/hadoop/hadoop-env.sh 中找到jdk安装目录 ```xml # The java implementation to use. export JAVA_HOME=/usr/local/software/jdk1.8.0_171 ``` 3. 在 {hadoop_home}/etc/hadoop/hdfs-site.xml 中指定副本数量和副本主服务器 ```xml <!--因为配置了3台虚拟机,所以 指定HDFS副本的数量为3,默认就是3 --> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- 指定副本主服务器为hadoop104 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop104:50090</value> </property> ``` **二:yarn的配置** 1. 在 {hadoop_home}/etc/hadoop/yarn-env.sh 中指定jdk环境。 ```xml # some Java parameters export JAVA_HOME=/usr/local/software/jdk1.8.0_171/ ``` 2. 在 {hadoop_home}/etc/hadoop/yarn-site.xml 指定ResourceManager的地址。 ```xml <!-- reducer获取数据的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定YARN的ResourceManager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop103</value> </property> ``` **三:mapreduce的配置** 1. 在 {hadoop_home}/etc/hadoop/mapred-env.sh 中指定jdk环境。 ```xml export JAVA_HOME=/usr/local/software/jdk1.8.0_171/ ``` 2. 在 {hadoop_home}/etc/hadoop/mapred-site.xml 中指定mapreduce运行在yarn上。 ```xml <!-- 指定MapReduce运行在yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> ``` **四:在hadoop102上将上面的配置分发到hadoop103、hadoop104** ```xml # scp -r /opt/install/hadoop/etc/hadoop/* root@hadoop103:/opt/install/hadoop/etc/hadoop/ # scp -r /opt/install/hadoop/etc/hadoop/* root@hadoop104:/opt/install/hadoop/etc/hadoop/ ``` <br/> # 5. 集群测试 **一:启动集群** 1. 在 {hadoop_home}/etc/hadoop/slaves 文件中配置slave(在hadoop102操作) ```xml # 将localhost删除 hadoop102 hadoop103 hadoop104 ``` 2. 启动HDFS集群(在hadoop102操作) ```xml -- 回到hadoop102中hadoop的安装目录下执行下面命令 -- 首次启动集群需要格式化,后面如果再格式化可能会导致无法启动 # bin/hdfs namenode -format -- 启动集群 # sbin/start-dfs.sh ``` 3. 在三个虚拟机上查看启动情况 ```xml -- 查看启动情况,到hadoop安装目录下执行 [root@hadoop102 hadoop]# jps 4166 NameNode 4482 Jps 4263 DataNode [root@hadoop103 hadoop]# jps 3218 DataNode 3288 Jps [root@hadoop104 hadoop]# jps 3221 DataNode 3283 SecondaryNameNode 3364 Jps ``` 4. 启动yarn 在配置ResourceManager的机器上启动yarn,我的是在hadoop103。 ```xml # sbin/start-yarn.sh ``` 5. web端查看SecondaryNameNode 浏览器访问:http://hadoop104:50090/status.html ,显示如下 ![](https://img.kancloud.cn/0f/16/0f16dc5d34f5ebe2beae4c5e50753e85_1132x299.png)<br/> **二:测试** ```xml -- 在hdfs文件系统上创建一个input目录 # bin/hdfs dfs -mkdir -p /user/hadoop/input -- 将测试文件内容上传到文件系统上 # bin/hdfs dfs -put wcinput/wc.input /user/hadoop/input/ ``` 浏览器访问HDFS系统 http://hadoop102:50070/explorer.html#/ ,显示如下 ![](https://img.kancloud.cn/32/cc/32cc304228ace46b6fcd51b986c35082_1536x523.png) <br/> # 6. 集群时间同步 时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间。 我选择hadoop102作为时间服务器,让hadoop103与hadoop104每10min自动与时间服务器hadoop102同步一次。 下面是hadoop103的配置,hadoop104也需要进行相同配置。 ```xml # crontab -e -- 添加如下脚本 */10 * * * * /usr/sbin/ntpdate hadoop102 -- 为了看到效果,我将hadoop103机器的时间改为2017-9-11 11:11:11 -- 当前时间为2020-12-1 18:30:30 # date -s "2017-9-11 11:11:11" -- 10min后查看时间是否同步了 # date ``` <br/> # 7. 添加新数据节点 随着数据量越来越大,原有的数据节点的容量不能满足存储数据的需求的情况下,需要在原有集群基础上动态添加新的数据节点。 **一:虚拟机配置** 1. 基于hadoop102虚拟机克隆一台新的虚拟机 克隆hadoop102是因为在上面的配置中,将hadoop102作为NameNode节点配置了。 复制hadoop102的安装目录,重命名为Centos7105。 ![](https://img.kancloud.cn/3c/37/3c3710e34fea2beb02fc5a9191f555a1_933x43.png) 2. 在VMware软件中打开该虚拟机并重名为Centos_105 ![](https://img.kancloud.cn/d1/4b/d14b9a089b626466dec75e961146c680_1409x693.png) ![](https://img.kancloud.cn/b0/e0/b0e05c58ca7d7285636852cfd0570866_1146x305.png) 3. 生成新的MAC地址 ![](https://img.kancloud.cn/e0/74/e0740f57c12d217ea3aafe41c69f6dd8_1092x819.png) 4. 开启虚拟机 要将原来的hadoop102关闭掉然后才能开启。 ![](https://img.kancloud.cn/9e/9b/9e9b36d925720d42c76886cbb703e6f2_1220x350.png) 输入账号和密码登录,与原虚拟机一致 ![](https://img.kancloud.cn/dc/c9/dcc93d3b297ca67ce5829599594eb8ed_1073x327.png) 5. 修改网卡 ```xml -- 修改/etc/sysconfig/network-scripts/ifcfg-eno16777736 配置文件 # 修改为上面刚生成的MAC地址 HWADDR="00:50:56:3D:63:9A" # 更改为一个新的ip地址,我给142 IPADDR="192.168.64.142" -- 重启网络 # systemctl restart network -- 查看ip是否已经发生变化,我的由原来的139变成了142,修改成功 # ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:50:56:20:74:f0 brd ff:ff:ff:ff:ff:ff inet 192.168.64.146/24 brd 192.168.64.255 scope global dynamic eno16777736 valid_lft 1442sec preferred_lft 1442sec inet 192.168.64.142/24 brd 192.168.64.255 scope global secondary eno16777736 valid_lft forever preferred_lft forever inet6 fe80::250:56ff:fe20:74f0/64 scope link valid_lft forever preferred_lft forever ``` 6. 在 /etc/hostname 修改主机名为hadoop105 ```xml hadoop105 ``` 7. 在每台机器上的 /etc/hosts 中添加相关机器的端口映射 在hadoop102、hadoop103、hadoop104、hadoop105都添加如下端口映射。 ```xml 192.168.64.139 hadoop102 192.168.64.140 hadoop103 192.168.64.141 hadoop104 192.168.64.142 hadoop105 -- 添加完成后重启每台虚拟机 # reboot ``` 8. 给hadoop105配置ssh无密码登录 ```xml # cd /root/.ssh -- 1. 生成公钥和私钥 # ssh-keygen -t rsa -- 接着输入3个回车 # ls -- 2. 生成如下三个文件 id_rsa(私钥) id_rsa.pub(公钥) known_hosts(记录ssh访问过计算机的公钥) -- 3. 合并公钥(需要将所有的虚拟机开启) # ssh root@hadoop105 cat ~/.ssh/id_rsa.pub > authorized_keys # ssh root@hadoop104 cat ~/.ssh/id_rsa.pub > authorized_keys # ssh root@hadoop103 cat ~/.ssh/id_rsa.pub > authorized_keys # ssh root@hadoop102 cat ~/.ssh/id_rsa.pub > authorized_keys -- 4. 把hadoop105 的 authorized_keys、known_hosts 复制到hadoop102、 -- hadoop103、hadoop104的 /root/.ssh 目录 # scp authorized_keys root@hadoop102:/root/.ssh/ # scp authorized_keys root@hadoop103:/root/.ssh/ # scp authorized_keys root@hadoop104:/root/.ssh/ # scp known_hosts root@hadoop102:/root/.ssh/ # scp known_hosts root@hadoop103:/root/.ssh/ # scp known_hosts root@hadoop104:/root/.ssh/ -- 5. 测试,完成上面的配置后,四台虚拟机可以相互访问 # ssh hadoop102 # ssh hadoop103 # ssh hadoop104 # ssh hadoop105 ``` 9. 删除hadoop105上残留的HDFS文件 ```xml -- 我将HDFS运行时生成的文件放在data目录下 # rm -rf /opt/install/hadoop/data ``` **二:添加新节点** 下面没有特别说明,都是在hadoop105机器上操作。 我的hadoop安装目录在 /opt/install/hadoop 目录,所以所有已有的配置文件都在 /opt/install/hadoop/etc/hadoop/ 目录下 1. 创建 /opt/install/hadoop/etc/hadoop/dfs.hosts 文件并添加所有主机名 ```xml # touch /opt/install/hadoop/etc/hadoop/dfs.hosts -- 在新建的dfs.hosts文件中添加所有主机名 hadoop102 hadoop103 hadoop104 hadoop105 ``` 2. 在 hdfs-site.xml 文件添加dfs.hosts属性 ```xml <property> <name>dfs.hosts</name> <value>/opt/install/hadoop/etc/hadoop/dfs.hosts</value> </property> ``` 3. 切换到hadoop102刷新节点 ```xml -- 切换到hadoop102的hadoop安装目录 # cd /opt/install/hadoop -- 刷新namenode节点 # hdfs dfsadmin -refreshNodes -- 更新resourcemanager节点 # yarn rmadmin -refreshNodes ``` 4. 在hadoop002的 /opt/install/hadoop/etc/hadoop/slaves 文件中新增hadoop105节点 ```xml hadoop102 hadoop103 hadoop104 hadoop105 ``` 5. 切换到hadoop105进行测试 ```xml -- 切换到hadoop安装目录 # cd /opt/install/hadoop -- 启动hadoop105的datanode节点 # sbin/hadoop-daemon.sh start datanode -- 启动hadoop105的nodemanager节点 # sbin/yarn-daemon.sh start nodemanager ``` 浏览器访问: 6. 切换到hadoop102执行面命令实现数据均衡 ```xml -- 切换到hadoop安装目录 # cd /opt/install/hadoop # sbin/start-balancer.sh ```