一、集群规划
主机名 IP 部署进程
master 192.168.xxx.101 NameNode、SecondaryNameNode、ResourceManager
slave1 192.168.xxx.102 DataNode、NodeManager
slave2 192.168.xxx.103 DataNode、NodeManager
/etc/hosts(三台机器都要写,不能只写本机):
192.168.xxx.101 master 192.168.xxx.102 slave1 192.168.xxx.103 slave2二、虚拟机与网络基础配置
2.1 分区(OpenEuler / CentOS 手动分区)
挂载点 大小
/boot 300 MB (引导操作系统启动)
swap 4 GB(内存 2 GB 时取两倍。交换分区,大小设置为内存的两倍 4G)
biosboot 1 GB(仅 OpenEuler 需要)
/ (根目录,剩余空间全部分配给根目录)
2.2 静态 IP
编辑网卡配置(以 ens33 为例):
vi/etc/sysconfig/network-scripts/ifcfg-ens33修改:
BOOTPROTO=static ONBOOT=yes文末追加(以 master 为例,slave 改最后一位):
IPADDR=192.168.xxx.101 NETMASK=255.255.255.0 GATEWAY=192.168.xxx.2 DNS1=114.114.114.114修改好就保存并退出
:wq
重启网络(使生效):
systemctl restart network验证(测试网络连通性):
pingwww.163.com2.3 主机名
三台机器分别执行(以 master 为例):
hostnamectl set-hostname master改完永久主机名之后,新开终端或者执行 bash 才会看到新主机名并且使命令生效。
还可以直接重启主机,输入reboot。
补充提示:
(1) 临时性修改主机名称: hostname 主机名 (重启失效)
(2) 永久修改主机名称: hostnamectl set-hostname 主机名
(3) 查看主机名称: hostname
2.4 关闭并禁用防火墙(每台机器)
systemctl stop firewalld systemctl disable firewalld systemctl status firewalld补充:
使用远程连接工具连接虚拟机(推荐)
(1)Finalshell
(2)Mobaxterm
(3)Xshell
三、工作目录与环境变量
压缩包自己去下载好,并且根据自己下载的版本进行配置,特别需要注意自己下载的版本之间是否兼容。(下面以我的版本为示例)
3.1 创建工作目录
mkdir-p/opt/data /opt/module /opt/software/opt/software压缩包存放地,/opt/module解压路径,数据目录一次性创建。
3.2 安装 JDK
将 JDK 压缩包上传到 /opt/software,解压:
tar-zxvf/opt/software/jdk-8u221-linux-x64.tar.gz-C/opt/module配置环境变量:
vi/etc/profile文末追加(路径按实际目录名修改):
exportJAVA_HOME=/opt/module/jdk1.8.0_221exportPATH=$PATH:$JAVA_HOME/bin刷新并验证:
source/etc/profilejava-version3.3 安装 Hadoop
解压:
tar-zxvf/opt/software/hadoop-3.3.4.tar.gz-C/opt/module环境变量(追加到 /etc/profile):
exportHADOOP_HOME=/opt/module/hadoop-3.3.4exportPATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin刷新并验证:
source/etc/profile hadoop version四、克隆与 Slave 节点修改
master 安装配置完成后,克隆出 slave1 和 slave2。克隆后每台 slave 必须改两样东西:
- IP 最后一段:slave1 改为 192.168.xxx.102,slave2 改为 192.168.xxx.103,重启网卡。
- 主机名:
hostnamectl set-hostname slave1# slave2 改为 slave2reboot
克隆后需要修改主机名与ip地址的映射关系(三台机器都需要执行)
Vi /etc/hosts
文末添加:
192.168.xxx.101 master
192.168.xxx.102 slave1
192.168.xxx.103 slave2
保存并退出
五、SSH 免密登录
5.1 生成密钥(三台机器都执行一次)
ssh-keygen-trsa补充提要:
三台机器每台执行一次,一路回车,不设置密钥密码。
错误提醒;ssh-keygen之间没有空格
5.2 本机免密(发送密钥)
cat~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys#cat >> 之后默认权限通常能用,但部分系统对 .ssh 目录和 authorized_keys 权限检查严格,建议补两行。也可根据情况添加。chmod700~/.sshchmod600~/.ssh/authorized_keys5.3 从 master 分发公钥到所有节点
在 master 上执行:
ssh-copy-id master ssh-copy-id slave1 ssh-copy-id slave2补充提要:三台机器全部做完,一共9次ssh-copy-id,每次执行输入一次目标主机密码,一共输入9次密码,实现集群全节点互相免密登录。
验证(应该不输入密码就能返回主机名):
sshmasterhostnamesshslave1hostnamesshslave2hostname如果 slave 节点也要能免密 SSH 到其他节点,按同样方式在 slave 上执行 ssh-copy-id。完全分布式下一键启动脚本从 master 发起,master 到 slave1/slave2 的免密是必须的。
六、Hadoop 核心配置(在 master 上完成)
进入配置目录:
cd$HADOOP_HOME/etc/hadoop6.1 hadoop-env.sh (vi hadoop-env.sh)
在文件头部附近添加(JAVA_HOME 必须替换成你实际的 JDK 路径):
exportJAVA_HOME=/opt/module/jdk1.8.0_221exportHDFS_NAMENODE_USER=rootexportHDFS_SECONDARYNAMENODE_USER=rootexportHDFS_DATANODE_USER=rootexportYARN_RESOURCEMANAGER_USER=rootexportYARN_NODEMANAGER_USER=root6.2 core-site.xml(vi core-site.xml)核心配置文件
<configuration><property><name>fs.defaultFS</name><value>hdfs://master:9000</value></property><property><name>hadoop.tmp.dir</name><value>/opt/data/hadoop</value></property></configuration>fs.defaultFS这段的代码:指定NameNode地址
hadoop.tmp.dir这段代码:指定Hadoop数据存放目录
补充提要:
/opt/data/hadoop
修改成为自己实际的Hadoop的路径
fs.defaultFS 用主机名 master,不要写 IP,也不要写 localhost。主机名必须与 /etc/hosts 一致。
6.3 hdfs-site.xml(vi hdfs-site.xml)编辑HDFS配置文件
<configuration><property><name>dfs.replication</name><value>3</value></property><property><name>dfs.namenode.name.dir</name><value>/opt/data/hadoop/dfs/name</value></property><property><name>dfs.datanode.data.dir</name><value>/opt/data/hadoop/dfs/data</value></property></configuration>3 节点集群 dfs.replication=3 是合理的;如果只是做实验想省磁盘,可以改成 2。
6.4 mapred-site.xml (vi mapred-site.xml)编辑MapReduce配置文件
<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property><property><name>yarn.app.mapreduce.am.env</name><value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.3.4</value></property><property><name>mapreduce.map.env</name><value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.3.4</value></property><property><name>mapreduce.reduce.env</name><value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.3.4</value></property></configuration>6.5 yarn-site.xml (vi yarn-site.xml)编辑YARN配置文件
<configuration><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property></configuration>只跑 MapReduce 的话这一条就够用。
6.6 workers(为了一键启停脚本指定集群的数据节点列表,master通过免密的ssh启停slave1和slave2)
清空原内容,只保留两行,不要有空行、不要有行尾空格:
slave1 slave2七、分发配置到 Slave 节点
在 master 上执行(远程传递分发配置):
scp-r/opt/module/hadoop-3.3.4/etc/hadoop root@slave1:/opt/module/hadoop-3.3.4/etc/scp-r/opt/module/hadoop-3.3.4/etc/hadoop root@slave2:/opt/module/hadoop-3.3.4/etc/八、格式化与启动
8.1 创建数据目录(三台机器都执行)
mkdir-p/opt/data/hadoop/dfs/namemkdir-p/opt/data/hadoop/dfs/datachown-Rroot:root /opt/data/hadoop8.2 格式化 NameNode(只在 master 执行一次)
hdfs namenode-format看见successfully,算格式化成功并且配置没有出现问题
如果没有格式化成功,可以一步步排查
8.3 启动集群
在 master 上:
start-all.sh8.4 验证
jpsmaster 应看到:NameNode、SecondaryNameNode、ResourceManager
slave1 / slave2 应看到:DataNode、NodeManager
如果某个节点少了进程,可以去看一下hadoop-env.sh,看是否有配置错误,可能单词有错误。
停止集群:
stop-all.sh全分布搭建结束