教程基于
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-toolsyum 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
切到root用户
su root
将动态分配地址改为静态分配地址
vim /etc/sysconfig/network-scripts/ifcfg-ens33
即将BOOTPROTO=“DHCP"改为"static”
然后再添加下列配置
IPADDR=192.168.10.100GATEWAY=192.168.10.2DNS1=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 hadoop100192.168.10.101 hadoop101192.168.10.102 hadoop102192.168.10.103 hadoop103192.168.10.104 hadoop104192.168.10.105 hadoop105192.168.10.106 hadoop106192.168.10.107 hadoop107192.168.10.108 hadoop108
重启一下
reboot
验证一下
ifconfig
再看看能不能ping到外网
ping www.baidu.com
配置远程连接 在window主机下配置 主机名映射
C:WindowsSystem32driversetc
hosts文件添加以下内容,可能无法直接添加,建议复制一份修改好后再替换
192.168.10.100 hadoop100192.168.10.101 hadoop101192.168.10.102 hadoop102192.168.10.103 hadoop103192.168.10.104 hadoop104192.168.10.105 hadoop105192.168.10.106 hadoop106192.168.10.107 hadoop107192.168.10.108 hadoop108
配置安装库yum install -y epel-release
关闭防火墙集群内的防火墙一般关闭,在外围(外网)设置一个防火墙(使用堡垒机)
systemctl stop firewalldsystemctl disable firewalld.service
用户管理 增加用户
useradd 用户名
passwd 密码
修改权限
vim /etc/sudoers
配置每次切换root用户不需要密码
位置一定要对。
此后命令前加入 sudo 就可以有root权限了
批量卸载
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-ens33vim /etc/hostname
xshell远程连接
(xshell ctrl+L清屏)
三台依次配好
大概像这样
下载好安装包(jdk8和hadoop3.x)注意看自己的版本号,后续一些命令需要按照自己安装的版本来。
这里以配置hadoop102为例。
tp传输过去到software文件夹下(这些看个人喜好吧,一般是放这的吧)
解压安装(解压到module文件夹)
tar -zxvf jdk-8u202-linux-x64.tar.gz -C /opt/module/
配置环境变量
可以直接修改
vim /etc/profile
也可以在 /etc/profile.d/ 目录下添加sh脚本。因为profile脚本默认会遍历该目录下的脚本逐个启动。
建立一个新的文件写我们自己的配置.
#my_env.sh#JAVA_HOMEexport JAVA_HOME=/opt/module/jdk1.8.0_202export PATH=$PATH:$JAVA_HOME/bin
export用于暴露到全局
保存后退出,重新加载配置文件
source /etc/profile
检测一下是否成功
java -version
解压安装
tar -zxvf hadoop-3.3.1.tar.gz -C /opt/module/
配置环境变量
sudo vim /etc/profile.d/my_env.sh
#HADOOP_HOMEexport HADOOP_HOME=/opt/module/hadoop-3.3.1export PATH=$PATH:$HADOOP_HOME/binexport 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 fname=`basename $p1` echo fname=$fname #3 获取上级目录到绝对路径 pdir=`cd -P $(dirname $p1); pwd` echo pdir=$pdir #4 获取当前用户名称 user=`whoami` #5 循环 for((host=103; host<105; host++)); do echo ------------------- hadoop$host -------------- rsync -rvl $pdir/$fname $user@hadoop$host:$pdir done
修改权限 回退到上级目录使用命令同步
同步环境变量的时候发现权限不够
需要root权限
xsync不是系统命令,是用户命令,所以不能直接加sudo来获取权限,除非指明脚本的绝对路径.
sudo ./bin/xsync /etc/profile.d/my_env.sh
此时输入root的密码
同步成功之后echo $JAVA_HOME没有输出是因为没有重新编译profile文件
sudo vim /etc/profile.d/my_env.sh
查看,发现文件已经复制过来了.
但是要输入密码很麻烦。
ssh免密登陆
ls -al 找到隐藏文件夹 .ssh
进入之后 ssh-keygen -t rsa 生成公钥私钥
通过命令 ssh-copy-id hadoop103发送给其他机器(103)
ssh hadoop103 时就不需要输入密码了
上面的脚本也是基于ssh,因此此时再使用上面的脚本的时候就不需要输入密码了。
依次实现各个服务器免密登陆到其他服务器。
三台集群的配置规划如下。
NameNode、ResourceManager、SecondaryNameNode开销比较大因此错开在三台服务器上面。其中NameNode对应HDFS因此后续HDFS在102启动,ResourceManager对于yarn因此后续yarn在103启动。
位置在
配置 core-site.xml
配置 hdfs-site.xml
配置yarn-site.xml
配置mapred-site.xml
配置workers
hadoop102hadoop103hadoop104
同步配置文件
[dnils@hadoop102 hadoop]$ cd /opt/module/hadoop-3.3.1/etc[dnils@hadoop102 etc]$ ll总用量 4drwxr-xr-x、3 dnils dnils 4096 2月 13 17:32 hadoop[dnils@hadoop102 etc]$ xsync hadoop/
这脚本很爽啊有木有
群起集群 在102上启动HDFS因为之前配置 NameNode在这台机上
启动和初始化 第一次启动集群的时候要初始化
hdfs namenode -format
sbin/start-dfs.sh
看看和集群规划的一不一样,对比HDFS那一栏,因为上面启动的是DFS
除此之外还可以看看HDFS提供的页面(之前配置的)
dfs可视化页面地址
http://hadoop102:9870/
常用这个页面
因为之前配置ResourceManager在这台机上
启动 sbin/start-yarn.sh
yarn可视化页面地址
http://hadoop103:8088/
测试hdfs
hadoop fs -mkdir /wcinput
hadoop fs -put README.txt /wcinput
内容都存储到了data里了,具体要慢慢一层进去看,不是存的原本的文件,有特定的方法(meta)
测试yarn
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /wcinput /wcoutput
注意: 这个测试用例的 /wcinput这个文件夹必须存在 /wcoutput 必须不存在
先把进程全部停掉
sbin/stop-dfs.sh
删除集群的每个机器的历史数据 data logs
rm -rf data/ logs/
格式化
hdsf namenode -format
启动
sbin/start-dfs.sh
修改mapred-site.xml (之前修改过一次)
vim mapred-site.xml
增加下面两行配置
增加修改为注意主机地址(注意分发脚本只会固定分发到103和104 所以从103修改后分发也只能分发到103和104 所以102还是没有改,因此要从102开始改)
分发配置
xsync mapred-site.xml
在hadoop102启动历史服务器
bin/mapred --daemon start historyserver
daemon 守护进程模式
jps 查看是否启动
配置日志聚集功能 日志聚集概念:应用运行完成以后,将程序运行日志信息上传到 HDFS 系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动 NodeManager 、ResourceManager 和 HistoryManager。
yarn-site.xml
增加下列配置
即修改后:
停止历史服务器
mapred --daemon stop historyserver
(然后再启动)
(还要重启yarn 因为改了yarn-site.xml配置)
跑一个测试样例
结果:
点击history
点击logs
各个组件可以单独启动停止某个服务
eg:
hdfs --daemon start namenode
(1)分别启动/停止 HDFS 组件 hadoop-daemon.sh start / stop namenode / datanode / secondarynamenode
(2)启动/停止 YARN yarn-daemon.sh start / stop resourcemanager / nodemanager各个模块分开启动/停止(配置 ssh 是前提)常用
(1)整体启动/停止 HDFS start-dfs.sh / stop-dfs.sh
(2)整体启动/停止 YARN start-yarn.sh / stop-yarn.sh 一键启停脚本
没写,感兴趣可以上网找一下。
集群时间同步 时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时 的同步,比如,每隔十分钟,同步一次时间。
如果生产环境能连接外网就不需要时间同步。
完。