准备工作
我们在搭建完一台Hadoop机器之后,要再克隆两份机器,我们要将这三台机器的主机名,ip重新配置一下。
三台机器上的节点规划如下
Hadoop中的进程在多台机器运行!
HDFS: 1个nn+N个DN
n个2nn
YARN: 1个RM+N个NM
避免单点故障,NN和RM建议分散到多台机器!
注意负载均衡
hadoop101 hadoop102 hadoop103
DN ----------- DN-------------- DN
NM------------ NM------------- NM
NN------------- RM------------ 2NN
三台机子的时间要时刻保持统一,如下图所示配置自动更新时间
由于定时任务会产生mail,会占据空间,我定期手动将其清空。
最好是切换成你操作hadoop的普通用户再去设置一个更新时间的定时任务。
如果你不想使用克隆,那么你可以安装三台白板机,然后在其中一台上面安装hadoop,然后利用远程同步的方式使另外两台机子上有hadoop,具体操作如下。
安全拷贝
-
scp(安全拷贝)
全量复制!
使用: scp -r 源文件用户名A@主机名1:path1 目标文件用户名B@主机名2:path2
-r: 递归,复制目录如果从本机执行读取或写入,用户名B@主机名2:可以省略! 在主机1上,使用A用户读取path1的文件,再使用用户B登录到主机2,在主机2的path2路径执行写入! 要求: 用户名A@主机名1 对path1有读权限 用户名B@主机名2 对path2有写权限
远程同步
rsync (远程同步)
可以只同步变化的文件(对比文件的修改时间)!增量同步!
使用: rsync -rvlt path1 目标文件用户名B@主机名2:path2
-r: 递归,复制目录
-v: 显示复制的过程
-l: 同步软连接
-t: 基于文件的修改时间进行对比,只同步修改时间不同的文件
只能将本机的文件同步到其他机器!
注意: rsync -rvlt path1 目标文件用户名B@主机名2:path2
path1是个目录,目录以/结尾,只会同步目录中的内容,不会同步目录本身!
path1是个目录,目录不以/结尾,同步目录中的内容,也会同步目录本身!
免密登录
免输入密码登录,借助SSH实现
举例: A机器的a用户,希望在A机器上,使用b用户的身份登录到B机器!
实现步骤: ①A机器的a用户,在A机器上生成一对密钥
ssh-keygen -t rsa
②密钥分为公钥和私钥,a用户需要将公钥拷贝到B机器上b用户的家目录下的
authorithxxxx_keys
a)使用b用户登录到B机器
b)编辑authorithxxxx_keys,将公钥的内容进行添加
在A机器,使用a用户执行以下命令: ssh-copy-id b@B
③A机器的a用户,可以使用 ssh b@B进行登录!
注意: 如果使用ssh 直接登录 主机名
默认使用当前用户对目标主机进行登录!
同步脚本
编写同步脚本xsync
作用: 将当前机器的文件,同步到集群所有机器的相同路径下!
hadoop102:/A/a , 执行脚本后,将此文件同步到集群中所有机器的 /A/a
用户在使用xsync时,只需要传入要同步的文件即可
xysnc a
不管a是一个相对路径还是绝对路径,都需要将a转换为绝对路径!
文件的绝对路径:
父路径: dirpath=$(cd `dirname /home/ygp/hi`; pwd -P)
文件名: filename=`basename hi`
-P是为了获取(软连接)真实路径。
核心命令:
for(())
do
rsync -rvlt path1
done
【注】脚本写在家目录下,并且另外两台机器hadoop的目录结构要提前建好。
如上图,可以弄个bin目录,并赋予执行权限,这样就可以随时随地使用了。
正式搭建分布式集群
我先把配置文件在hadoop1上先弄好,然后分发给另外两个节点。
hadoop1上安装namenode。
hadoop3上面是装辅助节点。
然后配置yarn-site.xml,resourcemanager是在hadoop2上。
Hadoop完全分布式最终版
以上工作都走完后,我们来看第二节。
Hadoop完全分布式终极版