M1芯片 MacBookPro上搭建 hadoop完全分布式集群
电脑以及使用软件:
MacBook pro(M1芯片,作为主机)
Parallels Desktop for Mac 17(虚拟机软件)
Ubuntu 20.04(虚拟机上的操作系统)
hadoop102、hadoop103、hadoop104(3台虚拟机当作三台服务器)
创建好第一台虚拟机后执行以下步骤
步骤一:修改主机名和用户名
虚拟机创建时默认有图形化界面同时也给我默认了一个用户名Parallels和主机名
首先进行主机名修改:
sudo vim /etc/hostname
进入后将里面的名字换成自己想改的主机名字(我改的是 hadoop102 )
其次修改用户名:
1. 首先进入root账户: sudo su
( 一定要先进入root然后将以下步骤一次性完成!!! )
2. Ubuntu20.4自带的 vi很难用,可以安装新的 vim
卸载自带的: sudo apt-get remove vim-common
安装新的: sudo apt-get install vim
3. 修改 shadow 文件: vim /etc/shadow
将里面的所有原用户名换成自己想改的用户名
4.修改用户目录
mv /home/parallels /home/更改的用户名
5 修改 passwd 文件: vim /etc/passwd
将里面的所有原用户名换成自己想改的用户名
6. 修改 group 文件: vim /etc/group
将里面的所有原用户名换成自己想改的用户名
7. 最后重启
步骤二:更改 IP、安装 SSH
先对虚拟机关机后将网络设置为 默认适配器
后进入 /etc/netplan 目录下找到 01-network-manager-all.yaml 文件
对其进行编辑: sudo vim 01-network-manager-all.yaml
network:
version: 2
renderer: NetworkManager
ethernets:
ens33:
dhcp4: no
dhcp6: no
addresses: [192.168.26.102/24] # 配置的静态ip地址和掩码( 我mac联网后的的ip 是 192.168.26。90)
gateway4: 192.168.26.1
nameservers:
addresses: [192.168.26.1, 8.8.8.8] # DNS服务器地址,多个DNS服务器地址
编辑完毕后使其生效: sudo netplan apply
输入 ifconfig 进行查看ip(如果没有 ifconfig命令 则 apt-get install ifconfig 下载)
编辑文件:sudo vim /etc/hosts
在后面加上之后要用到的所有服务器的ip和主机名(三台)
192.168.26.102 hadoop102
192.168.26.103 hadoop103
192.168.26.104 hadoop104
安装ssh:sudo apt-get install openssh-server
编辑文件:sudo vim /etc/ssh/sshd_config
找到: #PermitRootLogin prohibit-password
修改为: PermitRootLogin yes
步骤三:远程访问工具Tabby
因为 Xshell 没有Mac版本,我在网上找到了一个比较好用的免费远程访问工具 Tabby
下面这篇文章有详细的安装和使用教程
https://blog.csdn.net/ygk004/article/details/121768955?spm=1001.2014.3001.5506
在Tabby上连接 hadoop102
进行主机映射: 在Mac的终端 输入 sudo vim /etc/hosts 后在文件里面加入ip和主机(同步骤二最后)
步骤四:关闭防火墙
Ubuntu20.04 默认安装了UFW
直接输入 sudo ufw disable 关闭防火墙
步骤五:为自己的用户配置root权限
修改文件: sudo vim /etc/sudoers
找到这两行:
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
在下面加上:
自己的用户名 ALL=(ALL) NOPASSWD:ALL
步骤六:克隆虚拟机
将hadoop102关机之后,对其进行克隆两次命名为 hadoop103 和 hadoop104
对克隆的这两台服务器进行主机名、IP修改(参照步骤一、二)
在Tabby上连接 hadoop103 hadoop104
步骤七: jdk 和 hadoop 安装和配置
利用 Tabby 上的 SFTP将 jdk 和 hadoop(官网自行下载) 传输到 /opt/software 目录下 (自己创建文件夹)
解压jdk:tar -zxvf jdk文件名 -C /opt/module
配置环境变量:进入目录 /etc/profile.d 后编辑文件 sudo vim my_env.sh
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk-XXX(自己的jdk版本,路径一定要正确)
export PATH=$PATH:$JAVA_HOME/bin
重新启用配置文件: source /etc/profile
查看java是否安装完成:输入java 出现很多java信息且不报错则证明安装成功
hadoop 安装与 jdk 步骤基本一致,环境变量不同:
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-XXX(自己的hadoop版本,路径一定要正确)
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
查看hadoop是否安装完成:输入hadoop 出现很多hadoop信息且不报错则证明安装成功
步骤八: 配置集群
配置计划:
hadoop102上: NameNode (HDFS)
hadoop103上: ResourceManager(YARN)
hadoop104上: SecondaryNameNode(HDFS)
自定义配置文件:
在hadoop目录下 /etc/hadoop下面
hdfs-site.xml 配置:
<configuration>
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
mapred-site.xml 配置:
<configuration>
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
</configuration>
yarn-site.xml 配置
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址-->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天-->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
core-site.xml 配置
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置HDFS网页登录使用的静态用户为ljs(自己的用户名)-->
<property>
<name>hadoop.http.staticuser.user</name>
<value>ljs</value>
</property>
</configuration>
配置workers 在hadoop目录下 /etc/hadoop下面编辑: vim workers
加入三台服务器的主机名(一行一个不能有空格)
hadoop102
hadoop103
hadoop104
hadoop102、hadoop103、hadoop104 三台服务器配置相同
步骤九:无密访问
1. 在hadoop102上进入 .ssh/ : cd ~/.ssh
2. 创建公钥: ssh-keygen -t rsa 之后三次回车
3. 将公钥发送给hadoop103: ssh-copy-id hadoop103
4. 发送公钥至hadoop102、hadoop104
5. 进入hadoop103、hadoop104、hadoop102(root)重复以上步骤
步骤十:启动集群
第一次启动集群需要节点格式化:进入hadoop目录之后输入: hdfs namenode -format
在hadoop102上启动 HDFS ,进入hadoop目录之后输入:sbin/start-dfs.sh
之后可以进入web页面 在浏览器输入 http://hadoop102:9870
在hadoop103上启动 YARN ,进入hadoop目录之后输入:sbin/start-yarn.sh
之后可以进入web页面 在浏览器输入 http://hadoop103:8088
浏览器页面都可以进去则证明成功
至此,完全分布式集群搭建完成。