0. 目录
- 1. 创建虚拟机
- 2.安装centos8
- 3. 配置安装hadoop需要的基本环境
- 4.克隆多台虚拟机
- 5.配置多台虚拟机的网络互通
- 6. Master机安装Hadoop
- 7.启动Hadoop集群
- 8.Hadoop样例试验
- 9.关闭Hadoop
- 10.参考资料
集群配置情况 :win10 + vmware15 + centos8+Hadoop-2.10.0
1. 创建虚拟机
- 点击 创建新的虚拟机 >> 典型 >> 稍后安装操作系统
- 因为 WORKATATION 15 PRO 没有centos8 ,选择 centos 7 64 位
- 虚拟机名称 可以随意命名,我搭建hadoop集群,为了方便区分,集群主机命名为HadoppMaster,集群从机为HadoopSlave1、HadoopSlave2等等。
- 磁盘大小:主机(Master机) 30G(其实我觉得 20G也差不多了)
从机(Slave机)10G~20G 就基本可以了 这里我自己设置了10G
下面的选择,个人习惯是 单个文件(NFTS)
如果是FAT32磁盘格式的话,可能需要选择 拆分成多个文件 - 自定义硬件设置
点击 >> 打印机 >> 移除 这里有时候会引起冲突
点击 >> 声卡 >> 移除 这项可选可不选,反正不会用到声卡
点击 >> 新 CD/DVD(IDE) >> 使用ISO映像文件 >> 浏览选择你下载的centos8镜像 内存大小等设置是之后可以再调整的
点击 完成
2.安装centos8
- 开启虚拟机后,方向键 ↑ 选择 Install CentOS Linux8 回车 开始安装
(初始是中间的选项) - 语言选择界面 默认英语,可以自行选择中文
- Time & Date 点击中国区,如果时间出现不一致后面通过命令解决
- Software Selection 可以选择 Server with GUI (图形界面+浏览器,新手推荐,但是感觉有时候卡卡的)
或者选择Minimal Install (最小安装,只有命令行界面,轻快,传输东西可以用xshell或xftp在win10上操作完传过去)
我Master机选了GUI,Slave机选的是Minimal - Installation Destination 点两次那个磁盘就好了,虚拟机让它默认分就好。
- NETWORK & HOST NAME 一定要打开网络连接的开关,特别是选了最小安装,不然centos8默认不联网,比较麻烦。
然后就可以Begin Installation - 安装过程中可以设置 USER SETTINGS 在这里设置了比较方便,
我Root Password设置为 root 超短密码需要按两次Done
User Creation 创建了 用户名为 hadoop 密码为 hadoop 的账户 - 如果是部署多台从机的话,可以在安装好(含基本的工具)的机子后,利用 VMware 的克隆复制出多台从机。
先不要急 - 安装结束重启后,还需要 √上使用许可 ,就可以进入centos8的系统啦
3. 配置安装hadoop需要的基本环境
centos8的工具(终端,浏览器等都在点击左上角那个 Activies 后展开的菜单里)
- 给 hadoop 用户增加管理员权限 ,终端输入:
su
//输入密码:root
visudo
在下面找到 root ALL=(ALL) ALL 这行,按i插入红线那一行,hadoop为你的用户名
按Esc,输入 :wq!
保存退出
在终端输入exit
退出 su 模式
- 检查ssh(centos8默认安装了)
终端输入
$ rpm -qa | grep ssh
有openssh-clients 和 openssh-server 则可
如果没有,则在终端输入以下命令安装
$ sudo dnf install openssh-clients
$ sudo dnf install openssh-server
//centos8 用 dnf 代替了 yum ,yum也是可以的
测试ssh连接
$ ssh localhost
在红线处输入 yes
在蓝线处输入用户密码:hadoop
$ exit # 退出ssh localhost
- 同步互联网时间
如果虚拟机时间已经和互联网时间一样可以跳过这步,如果不一样则一定要校准,否则后续Hadoop无法运行本来想用ntp ntpdate 但centos8无法直接使用了
用chrony校准时间
$ sudo dnf install chrony
$ sudo dnf install vim #安装vim
$ sudo vim /etc/chrony.conf
#在文件添加入公共ntp服务器,并把第三行的pool..的注释掉,效果如下图
server cn.ntp.org.cn iburst
server ntp.ntsc.ac.cn iburst
#在保存退出后,输入以下
$ systemctl enable chronyd.service #开机自启动
$ systemctl restart chronyd.service #更新chrony服务
$ chronyc sources -v #校准时间
$ date #显示时间,时间和宿主机一致则校对成功
如图:注释掉红色线部 分 (图是注释后效果)
- 安装Java环境
在默认的NAT模式下,同时存在多台虚拟机可能导致网络冲突,请关闭所有虚拟机,开启一台操作。
#安装openjdk-1.8.0
$ sudo dnf install java-1.8.0-openjdk java-1.8.0-openjdk-devel
#安装完成后配置java环境变量
$ vim ~/.bashrc
在文件末加入,(i 键插入)
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk #安装的默认路径
#按ESC 输入 :wq! 退出
检查环境变量是否正确
$ source ~/.bashrc #更新环境变量
$ java -version
$ $JAVA_HOME/bin/java -version #如果两个输出一样则说明设置正确
到此,Master机,Slave机相同的地方已经配置完毕,hadoop的安装与配置只需要在Master机设置好传输到Slave机。现在可以利用配置好的Master机或者Slave样例机克隆出多台Slave机。
4.克隆多台虚拟机
在虚拟机关机的状态下,点击VMware的虚拟机 >> 管理 >> 克隆 >> 克隆自虚拟机中的当前状态 >> 创建完整克隆 >> 命名可以随意(这里我命名为HadoopSlave2)>> 完成
等待克隆完成即可,重复以上可以克隆出HadoopSlave3、HadoopSlave4等等。
没有说到的步骤都是点击下一步
5.配置多台虚拟机的网络互通
在Master机上,安装配置Hadoop之前我们先配置虚拟机之间和虚拟机与宿主机之间的网络互通
我的虚拟机集群的ip如下:(IP可以按照自己的设定)
虚拟机名称 | 网络 IP |
Master机 | 192.168.1.121 |
Slave1机 | 192.168.1.122 |
Slave2机 | 192.168.1.123 |
子网 | 192.168.1.0 |
网上有使用桥接方式建立虚拟机局域网络,但是需要宿主机固定的IP地址,我这里可能实现不了,因此采用NAT方式
- VMware NAT网络配置
点击 编辑 >> 虚拟网络编辑器 >> 更改网络模式 >> 点击NAT模式(名称为VMnet8)
最下面的子网IP 我设置为192.168.1.0 子网掩码设置为 255.255.255.0
然后点击NAT设置 网关IP 设为 192.168.1.1
点击DHCP设置
- 为每台虚拟机设置唯一的MAC地址
在每台虚拟机页面 >> 点击编辑虚拟机设置 >> 网络适配器 >> 高级 >> 在MAC地址处点击 生成 务必确保每台虚拟机的MAC地址不相同,如有相同多点几次生成 - 在每台虚拟机内配置网络IP
(1)关闭防火墙
终端输入
$ su #进入超级用户模式root
$ systemctl stop firewalld.service #关闭防火墙
$ systemctl disable firewalld.service #关闭防火墙自启动
$ nmcli c reload #重启网络
(2)修改虚拟机 ip 地址
$ sudo vim /etc/sysconfig/network-scripts/
打开后会有一个 ensXX的设置文件
在文件中加入
# 加 # 注释掉 BOOTPROTO="dhcp"
BOOTPROTO="static" #设为静态ip模式
IPADDR=192.168.1.121 #对应每台虚拟机的ip地址
PREFIX=24 #掩码位数
NETMASK=255.255.255.0 #子网掩码
GATEWAY=192.168.1.1 #网关,和之前VMware网络设置的对应
样例如下:
(3)设置主机名(虚拟机的hostname)
$ sudo vim /etc/hostname
#加入以下
NETWORKING=yes
HOSTNAME=Master #如果是Slave机,则是Slave1、Slave2等
样例:
(4)修改网络节点映射
$ sudo vim /etc/hosts
#加入集群的所有机子ip映射,我是 1 Master 2 Slave
192.168.1.121 Master
192.168.1.122 Slave1
192.168.1.123 Slave2
蓝色线为原有的,红色框为新添加的
以上4步需要在每台机子上操作一遍
在宿主机win10的网络和Internet >> 网络连接 >> VMnet8(NAT网卡) 设置为
其网络大概是这个样子:
- 虚拟机内网互通检查
要先reboot重启所有机子,使上面的步骤生效
$ ping Master -c 3 #-c 3 表示ping3次,没有该参数要用 ctrl+c 停止
$ ping Slave1 -c 3
$ ping Slave2 -c 3
$ ping www.baidu.com -c 3
能全ping通则OK,如果不能ping通百度,则需要加入dns
$ vim /etc/resolv.conf
#加入
nameserver 223.5.5.5 #两个皆为阿里dns
nameserver 223.6.6.6
- SSH免密码登录
方法一:
Master机操作
$ ssh-keygen -t rsa #生成新密钥,一路回车确认
$ ssh-copy-id Slave1 #输入yes 以及slave1密码
$ ssh Slave1 #测试是否能免密登录,exit退出
重复以上两步直至master能免密登录所有slave机和自己
方法二:比较繁琐
Master 机操作:
$ cd ~/.ssh
$ rm ./id_rsa* #移除先前的密钥
$ ssh-keygen -t rsa #生成新的密钥
$ cat ./id_rsa.pub >> ./authorized_keys
$ chmod 600 ./authorized_keys
$ ssh Master #使用了新的密钥,要重新认证,操作和之前的一样
#输入yes
$ exit
$ scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop #传输密钥到Slave1机(接收机)其他同理
其中要输入接受机的密码
接收机操作(例:Slave1机):
$ mkdir ~/.ssh #如果已存在则不用
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
#防止权限不足,仍要密码认证,给予文件权限
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
$ rm ~/id_rsa_pub
有其他节点Slave机也执行相同的操作
6. Master机安装Hadoop
- 下载Hadoop
centos有浏览器的可以直接到官网下载,如果只有命令行界面则用wget下载
用wget下载命令
$ sudo dnf install wget #安装wget
$ cd ~
$ wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.10.0/hadoop-2.10.0.tar.gz
#从清华源下载会快一点
$ sudo tar -zxf ~/hadoop-2.10.0.tar.gz -C ./ #解压到/home/hadoop目录(主目录)
#如果是用浏览器下载 则改为 ~/download/hadoop-2.10.0.tar.gz
$ sudo mv ./hadoop-2.10.0 ./hadoop #将文件名改为hadoop
$ sudo chown -R hadoop:hadoop ./hadoop #修改文件权限 hadoop:hadoop为 用户:密码
$ cd ./hadoop
$ ./bin/hadoop version #检查hadoop版本,输出有Hadoop 2.10.0 则表示安装成功
为了消除之后运行Hadoop出现Unable to load native-hadoop library for your platform… using builtin-java classes where applicable的警告,执行以下操作
$ sudo cp -r ~/hadoop/lib/native /usr/local/lib/hadoop-native
- 配置PATH变量
$ vim ~/.bashrc
#加入下面两行
export PATH=$PATH:/home/hadoop/hadoop/bin:/home/hadoop/hadoop/sbin
export JAVA_LIBRARY_PATH=/usr/local/lib/hadoop-native
$ source ~/.bashrc #更新环境变量
- 修改Hadoop配置文件
文件内容为Hadoop集群分布文件样式,伪分布式需另行设置
(1)修改slaves文件,确定数据节点datanode
$ cd ~/hadoop/etc/hadoop
$ sudo vim ./slaves
#如果要Master机作为数据节点将localhost改为Master,否则删除
#在后面增加Slave机的名称
Slave1
Slave2
$ sudo vim ./core-site.xml #依次配置下列(2)~(5)文件
如图:
(2)core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/hadoop/tmp<value>
<description>Abase for other temporary dorectories.</description>
</property>
</configuration>
(3)修改hdfs-site.xml,其中dfs.replication一般设为3,但如果slave节点少于3,则等于Slave节点数量+Master节点,或只是Slave节点数量,要与前面slaves相对应
这里考虑Master节点只作为名称节点 还是既作为名称节点又作为数据节点,我自己用后者
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>Master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/hadoop/tmp/dfs/data</value>
</property>
</configuration>
(4)修改mapred-site.xml
这个文件需要先重命名,默认模板名字为mapred-site.xml.template
$ sudo mv ./mapred-site.xml.template ./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>
(5)yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<vallue>Master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
- 将Master机上的Hadoop复制到其他节点上。
如果在Master机上跑过伪分布模式或格式化过Hadoop,要删除 ~/hadoop/tmp
$ sudo rm -rf ~/hadoop/tmp
传输hadoop文件
$ cd ~
$ tar -zcf ./hadoop-master.tar.gz ./hadoop #先打成压缩包
$ scp ./hadoop-master.tar.gz Slave1:/home/hadoop #使用scp传输
在Slave1上执行
$ cd ~
$ tar -zxf ./hadoop-master.tar.gz -C ./
$ sudo chown -R hadoop ~/hadoop
其他Slave机同理。
7.启动Hadoop集群
首次启动hadoop先在Master机进行格式化,如果先前进行过多次格式化或启动失败多次格式后要先将 /home/hadoop/hadoop/tmp 删除
格式化命令 (仅在第一次启动Hadoop前要格式化,之后都不用,否则会导致数据节点不一致而无法运行!!!)
$ hdfs namenode -format
启动Hadoop,所有机子都要在线
$ start-all.sh #旧命令,不建议
#或
$ start-dfs.sh
$ start-yarn.sh
$ mr-jobhistory-daemon.sh start historyserver
分别在Master机、Slave机执行 jps命令可以看到如下
Master机如图, 如果在前面步骤Master机不作为数据节点,则没有蓝色线项,其他项必须有,否则则配置出错
Slave机如下:
8.Hadoop样例试验
$ hadoop jar ./hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.0.jar pi 3 3
出现红框内容,表示正在运算,在map 0% reduce 0% 处可能时间会长一点,如果很长时间都没有进展,建议重新开启Hadoop再试 ctrl+c 中断程序
出现以下界面则计算成功:
可以在浏览器中打开 http://192.168.1.121:50070 和 http://192.168.1.121:8088/cluster 查看Hadoop集群情况
192.168.1.121 是Master机ip,在Master机的浏览器可以用Master 代替
在 http://192.168.1.121:8088/cluster 查看查看任务执行情况如下:
9.关闭Hadoop
关闭Hadoop集群,在Master机上执行
$ stop-all.sh #旧命令,不建议
#或
$ stop-yarn.sh
$ stop-dfs.sh
$ mr-jobhistory-daemon.sh stop historyserver
10.参考资料
[1] Hadoop安装教程_伪分布式配置_CentOS6.4/Hadoop2.6.0 [2] Hadoop集群安装配置教程_Hadoop2.6.0_Ubuntu/CentOS [3] 【问题解决手记】VMWare虚拟机与本地主机不能互ping问题 [4] CentOS8 网卡配置文件 [5] CentOS 8时间同步 [6] Mac和Linux远程连接服务器异常修复(WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!) [7] CentOS配置SSH免密码登录后,仍提示输入密码 [8] CentOS ping www.baidu.com 报错 name or service not know [9] Unable to load native-hadoop library for your platform… using builtin-java classes where applicable