前言
教程基于
https://www.bilibili.com/video/BV1Qp4y1n7EN?from=search&seid=14180453186861163521&spm_id_from=333.337.0.0
详细可以看这个,他们也有给文档,但是是老版的(hadoop2.x),当时看得时候顺便做了一点笔记,可以配合这视频看。前面创建虚拟机部分就不赘述了,可以依照视频来。后续一些脚本、命令和配置和视频保持一致,和他们给的文档略有不同。还有一些自己遇到的问题
硬件
创建虚拟机
自定义
先不要安装操作系统,后面再装
选择对应系统,以及硬件配置
虚拟机存放位置
磁盘存放位置
总核心数不要超过电脑的配置(2核n线程 硬盘50G)
软件
查看电脑有没有开启虚拟化
ctrl+shift+esc快捷键打开资源管理器,性能那一栏可以看到左下角显示已经开启虚拟化了。
如果没有开启就进入bios界面开启(SVM选项),详细自行百度。
如果没有开启虚拟化VMware是无法正常启动虚拟机的。
如果电脑开启了hyper-V,也需要关闭hyper-V
bcdedit /set hypervisorlaunchtype off
安装操作系统(centos)
在官网下载一个镜像
http://isoredirect.centos.org/centos/7/isos/x86_64/
在设备的CD/DVD插入系统(选择下载好的镜像)
GNOME桌面 或者 最小安装
熟悉linux的可以最小安装,但是记得安装一些常用的工具包,后面默认你已经安装好了
即要安装net-tool工具包,包含ifconfig,还要安装vim
yum install -y net-tools
yum install -y vim
分配磁盘
/boot 启动 1g 文件系统选择ext4
/swap 共享内存 4g
/ 根目录 剩下的全部容量
KDUMP 系统崩溃备份一部分数据,可以暂时不用
网络和主机名称配置
root账号密码
配置网络
修改虚拟机网络适配器
edit -> virtual Network Editor -> VMnet8
以10网段为例
设置子网地址 Subnet IP 192.168.10.0
设置NAT 默认网关 NAT Settings -> 192.168.10.2 网关地址一般为2
修改window主机网络适配器
修改linux网络适配器
切到root用户
su root
将动态分配地址改为静态分配地址
vim /etc/sysconfig/network-scripts/ifcfg-ens33
即将BOOTPROTO=“DHCP"改为"static”
然后再添加下列配置
IPADDR=192.168.10.100
GATEWAY=192.168.10.2
DNS1=192.168.10.2
IPADDR 本机地址
GATEWAY 网关地址
DNS1 域名服务器地址
途中截取的为hadoop102的地址,现在配置的是hadoop100,因此IPADDR=192.168.10.100
注意这里要理解,不要盲目照抄。
保存退出(ESC退出编辑模式 输入冒号进入命令模式 输入“wq”回车执行保存并退出命令)
配置主机名称(便于后期更改ip)
vim /etc/hostname
配置主机名称和ip映射
vim /etc/hosts
添加以下映射(考虑到后期添加九台服务器)不是在本地建集群的话,将ip改为服务器的公网ip地址。
(实际上本教程只用到了104)
192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
192.168.10.105 hadoop105
192.168.10.106 hadoop106
192.168.10.107 hadoop107
192.168.10.108 hadoop108
重启一下
reboot
验证一下
ifconfig
再看看能不能ping到外网
ping www.baidu.com
配置远程连接
在window主机下配置 主机名映射
C:\Windows\System32\drivers\etc
hosts文件添加以下内容,可能无法直接添加,建议复制一份修改好后再替换
192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
192.168.10.105 hadoop105
192.168.10.106 hadoop106
192.168.10.107 hadoop107
192.168.10.108 hadoop108
配置安装库
yum install -y epel-release
关闭防火墙
集群内的防火墙一般关闭,在外围(外网)设置一个防火墙(使用堡垒机)
systemctl stop firewalld
systemctl disable firewalld.service
用户管理
增加用户
useradd 用户名
passwd 密码
修改权限
vim /etc/sudoers
配置每次切换root用户不需要密码
位置一定要对。
此后命令前加入 sudo 就可以有root权限了
卸载自带jdk(最小安装不用)
批量卸载
rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
rpm -qa 查询所有安装的rpm软件包
grep -i 忽略大小写
xargs -n1 表示每次只传递一个参数
rpm -e --nodeps 强制卸载软件
验证一下效果
rpm -qa | grep -i java
重启虚拟机 reboot
目前为止已经配置好了一台虚拟机所需要的基本配置了。接下来通过克隆这个虚拟机三份作为集群。先配置好java和Hadoop环境再克隆也行。但是考虑到这一台虚拟机将来的可复用性,以及后续会有专门的集群分发脚本,因此配置到这个程度就可以开始克隆了。
多台配置 克隆虚拟机
先关机然后
第一个linked相当于快捷方式,我们要选第二个完全克隆
选择地址就好
复制好之后开机
修改相关配置,这些之前配过,这里自己灵活处理。
vim /etc/sysconfig/network-scripts/ifcfg-ens33
vim /etc/hostname
xshell远程连接
(xshell ctrl+L清屏)
三台依次配好
大概像这样
安装开发环境
下载好安装包(jdk8和hadoop3.x)注意看自己的版本号,后续一些命令需要按照自己安装的版本来。
这里以配置hadoop102为例。
tp传输过去到software文件夹下(这些看个人喜好吧,一般是放这的吧)
配置jdk
解压安装(解压到module文件夹)
tar -zxvf jdk-8u202-linux-x64.tar.gz -C /opt/module/
配置环境变量
可以直接修改
vim /etc/profile
也可以在 /etc/profile.d/
目录下添加sh脚本。因为profile脚本默认会遍历该目录下的脚本逐个启动。
建立一个新的文件写我们自己的配置.
#my_env.sh
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_202
export PATH=$PATH:$JAVA_HOME/bin
export用于暴露到全局
保存后退出,重新加载配置文件
source /etc/profile
检测一下是否成功
java -version
配置Hadoop
解压安装
tar -zxvf hadoop-3.3.1.tar.gz -C /opt/module/
配置环境变量
sudo vim /etc/profile.d/my_env.sh
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.3.1
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
保存后退出,重新加载配置文件
source /etc/profile
检测一下是否成功
hadoop
成功的话他会输出一堆东西
可以看看目录结构
bin目录下有我们以后经常用到的一些命令 hdfs mapred yarn 等
etc/hadoop/ 下有很多以后要用到的配置文件
现在在hadoop102已经配置好了,需要将配置分发到103和104
集群分发
scp(secure copy) 安全拷贝
可以实现服务器与服务器之间的数据拷贝
scp -r $pdir/$fname $user@$host:$pdir/$fname
递归的将要拷贝的文件拷贝到目的用户@主机:目的路径/名称
eg:
在102主机上实现从102推送文件到103
scp -r jdk1.8.0_202/ dnils@hadoop103:/opt/module/
在103主机上实现从102拉取文件到103
scp -r dnils@hadoop102:/opt/module/hadoop-3.3.1 ./
在103主机上实现从102传输文件到104
scp -r dnils@hadoop102:/opt/module/* dnils@hadoop104:/opt/module/
rsync远程同步工具
主要用于备份和镜像,速度快,避免重复,只对差异文件更新
rsync -av $pdir/$fname $user@$host:$pdir/$fname
上面介绍的方法了解就好,可以不实操.
xsync集群分发脚本
希望脚本在全局生效就要设置为全局变量
查看全局变量 echo $PATH
发现用户下的bin目录已经被加入到全局变量里了,因此可以在这个目录下写脚本
但是一开始是没有这目录的因此要创建
去bin目录下写脚本xsync(这脚本略有缺陷,高手可以自己改进一下)
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1