在Virtual Box虚拟机上搭建一主两从的Hadoop集群
一.Centos安装与网络配置
1.1 下载VirtualBox虚拟机6.16
1.2 下载centos镜像CentOS-7-x86_64-DVD-1908.iso
1.3 设置镜像
1.4 设置两个网卡:NAT(连接外网)、Host-Only(与主机通信)
1.5 网络配置
centos启动后不能连接外网和主机,还要进行网络配置
- 进入
/etc/sysconfig/network-scripts
目录,修改配置文件ifcfg-enp0s3
,添加BOOTPROTO="dhcp"
- 复制
ifcfg-enp0s3
为ifcfg-enp0s8
,并修改文件内容
cp ifcfg-enp0s3 ifcfg-enp0s8
- 重启网络
service network restart
现在就可以ping通主机和外网了
1.6 复制虚拟机并且修改复制后的虚拟机的网络配置
二.Hadoop集群搭建
经过上面的配置,我们已经有了3台CentOs机器,ip分别为:172.25.78.44、172.25.78.55、172.25.78.66,现在就开始搭建Hadoop集群吧.
2.1 创建Hadoop用户
- 新建用户
useradd -m hadoop -s /bin/bash
- 为用户设置密码
sudo passwd hadoop
- 为hadoop用户添加权限
visudo
在文件98行位置添加
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
hadoop ALL=(ALL) ALL
2.2 修改主机名
vim /etc/hosts
修改为:
172.25.78.44 Master
172.25.78.55 Slave1
172.25.78.66 Slave2
修改完需要重启才能生效
2.3 关闭防火墙
sudo systemctl stop firewalld.service #关闭防火墙
sudo systemctl disable firewalld.service #禁止防火墙开机启动
2.4 安装java并配置环境
- 安装
sudo yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
- 配置环境
vim ~/.bashrc
加入一行
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
执行下面命令使配置生效
source ~/.bashrc
在其余的两台机器上执行上面的所有操作
2.5 设置ssh免密登录
这个环节也可以不设置,但是到时候hadoop集群运行时会老是让你输入密码,很烦,建议还是设置
- 在Master节点上执行
ssh localhost
exit # 退出刚才的 ssh localhost
cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa # 会有提示,都按回车就可以
cat id_rsa.pub >> authorized_keys # 加入授权
chmod 600 ./authorized_keys # 修改文件权限
scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/ #将钥匙远程复制到Slave1节点
- 在Slave1节点上执行
mkdir ~/.ssh # 如果不存在该文件夹需先创建,若已存在则忽略
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
- 这样Master就可以无需密码远程登录了
ssh Slave1
在Slave2上再执行以上操作,使得Master可以远程登录Slave2
2.6 安装Hadoop
在Master机器上执行以下操作
- 下载并安装
cd ~
mkdir download
cd download
wget https://mirrors.cnnic.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz
sudo tar -zxf hadoop-2.7.7.tar.gz -C /usr/local # 解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-2.7.7/ ./hadoop # 将文件夹名改为hadoop
sudo chown -R hadoop:hadoop ./hadoop # 修改文件权限
- 配置环境变量
vim ~/.bashrc
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin #加入这行
- 不要忘了执行下面命令使环境配置生效
source ~/.bashrc
- 验证是否安装成功
hadoop version
2.7 修改Hadoop配置文件
进入/usr/local/hadoop/etc/hadoop
,修改配置文件
- 修改
Slave
文件
Slave1
Slave2
- 修改
core-site.xml
文件
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<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
文件
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<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
文件
默认文件名为默认文件名为 mapred-site.xml.template
,需要先重命名为默认文件名为 mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<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
文件
<?xml version="1.0"?>
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
2.8 将Master上的hadoop文件复制到两个Slave上
我们Master上的hadoop就按照配置完成了,但是我们还需要将配置好的hadoop复制到两个Slave上
Master:
tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先压缩再复制
cd ~
scp ./hadoop.master.tar.gz Slave1:/home/hadoop
Slave1:
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
sudo chown -R hadoop /usr/local/hadoop
Slave2同理
2.9启动Hadoop集群
第一次启动Hadoop集群需要在 Master 节点执行 NameNode 的格式化
hdfs namenode -format # 首次运行需要执行初始化,之后不需要
start-all.sh #启动hadoop集群
在Master,Slave1,Slave2执行jps
,可以看到以下进程说明启动成功