文章目录
Hadoop 相关软件及版本
软件 | 版本 |
---|---|
Linux OS | ubuntu-20.04.1 |
JDK | jdk-8u261-linux-x64 |
VMware | 15.5.6 |
Hadoop | hadoop-2.7.7 |
虚拟机参数配置
- master:1.5G ~ 4G 内存、20G 硬盘、NAT、1 ~ 4 核
- slave1 ~ slave2:1G 内存、20G 硬盘、NAT、1 核
上面的虚拟机参数配置只是参考,可以根据自身机器的实际情况进行调整
准备工作
-
新建虚拟机 master,安装 Ubuntu
-
配置固定 IP
-
安装必要软件(SSH 服务端、安装 Java 环境、安装 Hadoop,并完成配置)
-
克隆 master 到 slave1、slave2
-
修改 slave1 ~ slave2 的 IP,改为固定 IP
分布式模式配置
-
修改主机名
为了便于区分 master 节点 和 Slave 节点,可以修改各个节点的主机名
sudo vi /etc/hostname # master 虚拟机修改为 master # slave1 虚拟机修改为 slave1 # slave2 虚拟机修改为 slave2
(注意:只有重启 Linux 系统才能看到主机名的变化)
扫描二维码关注公众号,回复: 13464837 查看本文章 -
设置 hosts 文件
配置 IP 与 HOSTNAME 的映射(IP 根据自己机器情况设置)
sudo vi /etc/hosts # 3 台虚拟机都配置一样 # 192.168.13.21 master # 192.168.13.22 slave1 # 192.168.13.23 slave2
-
ssh 无密码登录
如果之前已经生成过公钥,必须删除原来生成的公钥
cd ~/.ssh # 如果没有该目录,先执行一次 ssh localhost rm ./id_rsa* # 删除之前生成的公钥(如果已经存在)
生成公钥和密钥
ssh-keygen -t rsa # 执行该命令后,遇到提示信息,一直按 Enter 键就可以了 cd ~/.ssh cat ./id_rsa.pub >> ./authorized_keys # 将公钥赋予给authorized_keys sudo chmod 644 authorized_keys # 修改权限
完成后执行命令
ssh master
如果不用输入密码,则配置成功
在 master 节点上将公钥传输到 slave1 ~ 2 节点
# ssh-copy-id -i ~/.ssh/id_rsa.pub master # ssh-copy-id -i ~/.ssh/id_rsa.pub slave1 # ssh-copy-id -i ~/.ssh/id_rsa.pub slave2 scp ~/.ssh/authorized_keys hadoop@slave1:~/.ssh/ # hadoop改为你的用户 scp ~/.ssh/authorized_keys hadoop@slave2:~/.ssh/
在终端中输入 ssh master、ssh slave1、ssh slave2,如果可直接登录,而不需要输入密码,则 ssh 无密码登录配置成功
-
配置集群/分布式环境
需要修改的文件:
- slaves
slave1 slave2
- core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> </configuration>
- hdfs-site.xml
<configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>master:50090</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/data</value> </property> </configuration>
- mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> </configuration>
- yarn-site.xml
<configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
上述 5 个文件全部配置完成后,需要把 master 节点上的 /usr/local/hadoop 文件复制到各个节点上如果之前运行过伪分布模式,建议删除之前伪分布模式下生产的临时文件
cd /usr/local sudo rm -r ./hadoop/tmp # 删除 Hadoop 临时文件 sudo rm -r ./hadoop/logs/* # 删除日志文件
在 slave1 ~ 2 节点上把旧的 hadoop 删掉(如果存在)
sudo rm -r /usr/local/hadoop/
在 master 节点将配置好的 Hadoop 复制到其他节点
sudo scp -r /usr/local/hadoop/ slave1:/usr/local/ sudo scp -r /usr/local/hadoop/ slave2:/usr/local/
(这里遇到错误请看文章末尾)
- slaves
-
在 master 节点格式化 NameNode
$HADOOP_HOME/bin/hdfs namenode -format
(注意:/usr/local/hadoop/tmp/dfs/name 目录就是前面配置的 dfs.namenode.name.dir 的值) -
集群启动与关闭
启动 Hadoop 集群
cd $HADOOP_HOME # 进入 Hadoop 安装目录 sbin/start-dfs.sh # 启动 HDFS 相关服务 sbin/start-yarn.sh # 启动 YARN 相关服务 sbin/mr-jobhistory-daemon.sh start historyserver # 启动日志相关服务
关闭 Hadoop 集群
cd $HADOOP_HOME # 进入 Hadoop 安装目录 sbin/stop-dfs.sh # 关闭 HDFS 相关服务 sbin/stop-yarn.sh # 关闭 YARN 相关服务 sbin/mr-jobhistory-daemon.sh stop historyserver # 关闭日志相关服务
master 节点
slave 节点
错误
解决方法:
-
把 PermitRootLogin no 改成 PermitRootLogin yes
sudo vi /etc/ssh/sshd_config # 找到PermitRootLogin prohibit-password在后面添加一行 # PermitRootLogin yes
重启sshd服务:
#systemctl restart ssh.service sudo /etc/init.d/ssh restart
-
ubuntu 没法登录 root 用户
更改 slave1 ~2 的 root 用户密码sudo passwd # 重启之后会密码会失效
再次执行输入刚刚改的密码就可以了
-
使 3 台虚拟机 hadoop 文件的用户组相同
sudo chown -R hadoop /usr/local/hadoop # 前面的 hadoop 改为你的用户