一:虚拟机准备
- 准备4台虚拟机,静态IP地址,关闭防火墙,设置主机名
IP地址,主机名如下:
192.168.8.101,hadoop101
192.168.8.102,hadoop102
192.168.8.103,hadoop103
192.168.8.104,hadoop104
注意:记得关闭防火墙
修改主机名命令:hostnamectl set-hostname xxx
关闭防火墙命令:systemctl stop firewalld.service
查看防火墙命令:firewall-cmd --state - 4台虚机的/etc/hosts全部配置IP对应主机名
- OK虚拟机准备完毕
二:scp命令
- 从当前服务器拷贝到另外一台服务器
scp -r 当前服务器地址 另外服务器用户名@IP或者主机名:目标服务器地址
例如:scp -r /opt/module/ root@192.168.8.102:/opt - 如何把目标服务器的文件拉取到当前服务器
scp 另外服务器用户名@IP或者主机名:目标服务器地址 当前服务器地址
scp root@192.168.8.102:/opt /opt - 在A服务器上把B服务器上的文件拷贝到C服务器上
scp -r root@192.168.8.102:/opt /opt root@192.168.8.103:/opt /opt
三:SSH无密码登录(102IP冲突,后面改为202)
- 配置ssh准备
a:首先切换到我们要使用的账户kgf,首先我们配置103服务器,并且进入到kgf的根目录
b:ssh访问其它服务器
- 进入.ssh目录下,生成ssh的公钥和私钥
a:生成命令,三次回车即可
ssh-keygen -t rsa
b:将秘钥拷贝给指定的服务器,命令:ssh-copy-id IP地址
效果:可以发现202服务器出现这个文件
- 我们将103生成的秘钥分别拷贝到104和202上,通过 ssh-copy-id命令
- 注意:对当前服务器也要配置ssh
- 我们在当前103服务器,使用root用户也配置一下ssh,并且拷贝秘钥给202,104以及本机
- 下面我们在104节点使用kgf用户配置ssh
将秘钥拷贝到103,202
四:rsync同步命令
- 简介
rsync远程同步工具,主要用于备份和镜像。具有速度快,避免复制相同内容和支持符号链接的优点。 - rsync和scp的区别
用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。 - 基本语法
命令:rsync -rvl 要拷贝的文件路径/名称 目的用户@主机:目的路径
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
选项:
-r递归
-v显示复制过程
-l 拷贝符号链接 - 案例:把103本机/opt/tmp目录同步到hadoop104服务器的root用户下的/opt/tmp目录
a:为kgf用户配置sudo的执行权限,进入vi /etc/sudoers编辑
b:在103本机上opt目录下创建tmp目录
里面存在一个文件
c:下面使用rsync进行同步操作到目标服务器104
查看104服务器效果:可以发现test.txt文件同步过来了。
五:编写集群分发脚本xsync
- 需求分析:循环复制文件到所有节点的相同目录下,当前机器为103服务器
a:在/usr/local/bin这个目录下存放的脚本,可以在系统任何地方直接执行
b:在/usr/local/bin这个目录下创建xsync文件,并修改权限
c:开始编写脚本
#!/bin/bash #首先我们需要获取输入参数的个数,如果没有参数直接退出 pcount=$# if((pcount==0)); then echo no args; exit; fi #获取文件名称 p1=$1 fname=`basename $p1` echo fname=$fname #获取上级目录到绝对路径 pdir=`cd -P $(dirname $p1);pwd` echo pdir=$pdir #获取当前用户名 user=`whoami` #最后做循环操作 for((host=103;host<105;host++)); do echo ----------hadoop$host-------- rsync -rvl $pdir/$fname $user@hadoop$host:$pdir done;
d:在/opt目录下创建tmp目录,并且创建test.txt文件,然后我们使用xsync脚本同步到104上去
e:执行效果如下,注意我们配置过ssh免密登录,无需输入密码,
六:配置集群
- 集群部署规划
a:3个节点,103,104,202
- 在103上配置相关的文件信息,到时候正好通过配置文件向各个服务器分发配置文件
注意:指定使用相关用户kgf
a:修改指定的core-site.xml文件,这个是hadoop核心文件,进入到指定的目录下/opt/module/hadoop-2.7.2/etc/hadoop/
b:在hadoop.env.sh中配置jdk路径,与上面相同目录下,下面b,c,d配置的都是hdfs相关的文件
c:修改hdfs-site.xml,与上面相同目录下
SecondaryNameNode(snn):是用来保存namenode中对HDFS metadata的信息的备份,并减少namenode重启的时间
d:配置slaves节点信息,与上面相同目录下
e:下面我们配置yarn相关的文件yarn-env.sh,与上面相同目录下
f:下面我们配置yarn相关的文件yarn-site.xml,与上面相同目录下
g:下面配置与mapreduce相关的mapred-env.sh配置文件
h:下面配置与mapreduce相关的mapred-site.xml配置文件
- 下面我们需要在集群上分发上面我们配置的所有配置文件,分发到104,202上
a:编写在/usr/local/bin下的xsync脚本
b:在103的服务器上,在/opt/module/hadoop-2.7.2/etc下执行下面命令#!/bin/bash #首先我们需要获取输入参数的个数,如果没有参数直接退出 pcount=$# if((pcount==0)); then echo no args; exit; fi #获取文件名称 p1=$1 fname=`basename $p1` echo fname=$fname #获取上级目录到绝对路径 pdir=`cd -P $(dirname $p1);pwd` echo pdir=$pdir #获取当前用户名 user=`whoami` #最后做循环操作 echo ----------hadoop104-------- rsync -rvl $pdir/$fname $user@hadoop104:$pdir echo ------hadoop202-------- rsync -rvl $pdir/$fname $user@hadoop202:$pdir
七:集群启动及测试
- 进入/opt/module/hadoop-2.7.2目录下,103,104,202三台服务器都要清理之前启动的数据
- 第一次启动集群,需要格式化namenode,进入/opt/module/hadoop-2.7.2目录下,只需要格式化103即可,因为我们
的namenode节点配置在103节点上
命令:bin/hdfs namenode -format
- 下面我们在103这个namenode的节点上去启动集群,当然ssh必须要配置完成的情况下,进入/opt/module/hadoop-2.7.2目录下
命令:sbin/start-dfs.sh 这个命令一次性把namenode和datanode启动起来
我们可以分别到104,202服务器去看看
- 因为我们的resourcemanager是在104上面的,我们在104上启动resourcemanager和nodemanager,
进入/opt/module/hadoop-2.7.2目录下
命令:sbin/start-yarn.sh
可以到103,202服务器上查看,发现NodeManager也启动了,可以对比上面我们的集群规划。 - 集群测试
⑴集群基本测试
①上传文件到集群
a:上传小文件
㈠首先在103的hdfs上创建一个文件夹
命令:hadoop fs -mkdir -p /user/kgf/input
可以通过浏览器50070端口页面看效果:
㈡下面我们创建一个文件通过命令上传到上面刚建的hdfs上的文件夹中
点击发现,三台服务器上都有该文件备份:
b:上传一个大文件试试,大于128M的,因为我们可以发现上面Block Size是128,那么
大于128M时,会怎么样呢? 下面开始上传:
效果:
- 集群时间同步
⑴问题:因为我们配置的是集群,那么我们在跑数据的时候,这几台服务器的时间必须要保持一致,
不然会出现问题。
⑵时间同步的方式
找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如每隔十分钟同步一次。
注意:配置时间同步操作必须使用root用户。
⑶时间服务器配置(必须是root用户)
a:检测ntp是否安装,命令:rpm -qa | grep ntp
b:修改ntp配置文件,路径:/etc/ntp.conf
①设置本地网络上的主机不受限制
②设置为不采用公共的服务器
③添加默认的一个内部时钟数据,使用它为局域网用户提供服务
c:修改/etc/sysconfig/ntpd文件
a:让硬件时间与系统时间一起同步
b:重启ntpd
命令:systemctl status ntpd 查看ntpd状态
启动命令:systemctl start ntpd
c:设置开启自启动ntp服务
执行:systemctl enable ntpd.service
⑷其它机器配置(必须是root用户)
a:在其它机器上配置10分钟与时间服务器同步一次(生产环境一般是10分钟,这里我们演示就1分钟)
命令:crontab -e然后编写下面的脚本命令
*/1 * * * * /usr/sbin/ntpdate 要同步时间的服务器地址
b:下面我们先同步104服务器
c:同理,我们同步202的时间
d:测试,我们分别查看3台服务器时间,三台目前都是这个时间
下面我们将104的时间修改掉
一分钟后.....可以发现时间又同步回来了。