1 虚拟机准备
1.1 虚拟机要求
三台虚拟机要求如下:
1)命名建议:hadoop+首位非零数字。(首位是零的话,shell脚本要麻烦点)
本篇命名:hadoop102、hadoop103、hadoop104.
2)关闭防火墙;
3)安装scp服务:
# yum install openssh-clients
4)安装rsync服务:
# yum install rsync
5)建立SSH无密码登陆
1.2 SCP服务
scp 可以实现服务器与服务器之间的数据拷贝。
操作方式:
(1)将本服务器内容拷到其他服务器
命令如下:
#scp -r 原文件绝对路径 user@hostname:目标路径
举例:
[root@hadoop101 /]# scp-r /opt/module/ root@hadoop102:/opt
[root@hadoop101 /]# scp-r /opt/software/ root@hadoop102:/opt
[root@hadoop101 /]# scp-r /opt/module/ root@hadoop103:/opt
[root@hadoop101 /]# scp-r /opt/software/ root@hadoop103:/opt
[root@hadoop101 /]# scp-r /opt/module/ root@hadoop104:/opt
[root@hadoop101 /]# scp-r /opt/software/ root@hadoop105:/opt
(2)将其他服务器内容拷到本服务器
命令如下:
#scp user@hostname:原文件绝对路径 目标路径
举例:
[root@hadoop102 opt]# scp root@hadoop101:/etc/profile /etc/profile
(3)远程两台服务器上内容拷贝
命令如下:
#scp user1@hostname1:原文件绝对路径 user2@hostname2:目标路径
举例:
[root@hadoop102 test]# scp root@hadoop103:/opt/test/hahaatguigu@hadoop104:/opt/test/
1.3 rsync服务
rsync远程同步工具,主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
(1)查看rsync使用说明
man rsync | more
(2)基本语法
rsync -rvl 同步文件目录 user@hostname:目的路径
命令 命令参数 要拷贝的文件路径/名称 目的用户@主机:目的路径
选项
-r递归
-v显示复制过程
-l拷贝符号连接
(3)举例
把本机/opt/tmp目录同步到hadoop103服务器的root用户下的/opt/tmp目录
[atguigu@hadoop102 opt]$ rsync-rvl /opt/tmp root@hadoop103:/opt/
1.4 SSH无密码登陆
1.4.1 配置ssh
(1)基本语法
ssh 另一台电脑的ip地址
(2)ssh连接时出现Host key verification failed的解决方法
[root@hadoop102 opt]# ssh 192.168.1.103
The authenticity of host ‘192.168.1.103 (192.168.1.103)’ can’t be established.RSA key fingerprint is cf:1e??d7:d0:4c:2d:98:60:b4:fd:ae:b1:2d:ad:06.
Are you sure you want to continue connecting (yes/no)?
Host key verification failed.
(3)解决方案如下:直接输入yes
1.4.2 无密钥配置
(1)进入到我的home目录
[root@hadoop102 opt]# cd ~/.ssh
(2)生成公钥和私钥:
[atguigu@hadoop102 .ssh]# ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
(3)将公钥拷贝到要免密登录的目标机器上
[root@hadoop102 .ssh]# ssh-copy-id hadoop103
[root@hadoop102 .ssh]# ssh-copy-id hadoop104
1.4.3 ssh 文件夹下的文件功能解释
(1)~/.ssh/known_hosts:记录ssh访问过计算机的公钥(public key)
(2)id_rsa:生成的私钥
(3)id_rsa.pub:生成的公钥
(4)authorized_keys:存放授权过得无秘登录服务器公钥
1.5 编写集群分发脚本xsync
1.5.1 脚本需求分析及规划
需求分析:循环复制文件到所有节点的相同目录下。
(1)原始拷贝:rsync-rvl /opt/module root@hadoop103:/opt/
(2)期望脚本:xsync 要同步的文件名称
(3)在/usr/local/bin这个目录下存放的脚本,可以在系统任何地方直接执行。
1.5.2 编辑脚本
创建脚本:
[root@hadoop102 bin]# touch xsync
[root@hadoop102 bin]# vi 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 $pdir/$fname $user@hadoop$host:$pdir
echo---------------hadoop$host----------------
rsync-rvl $pdir/$fname $user@hadoop$host:$pdir
done
1.5.3 运行脚本
非root账户在运行时要修改文件权限。
[root@hadoop102 opt]$ xsync tmp/
2 配置集群
2.1 集群规划
先确定好有多少个节点,每个节点安装哪些进程。
hadoop102 | hadoop103 | hadoop104 | |
HDFS | NameNode DataNode | DataNode | DataNode SecondaryNameNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
2.2 配置参数
2.2.1 core-site.xml
存储路径:/opt/module/hadoop-2.7.2/etc/hadoop
<!--指定HDFS中NameNode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:9000</value>
</property>
<!--指定hadoop运行时产生文件的存储目录--><property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
2.2.2 配置hadoop
hadoop-env.sh
存储路径:/opt/module/hadoop-2.7.2/etc/hadoop
export JAVA_HOME=/opt/module/jdk1.8.0_144
hdfs-site.xml
存储路径:/opt/module/hadoop-2.7.2/etc/hadoop
由于HDFS默认三个副本,因此如过还是三个副本的话,第一段可以删掉或者注释掉。
#<property>
# <name>dfs.replication</name>
#<value>3</value>
#</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:50090</value>
</property>
laves
存储路径:/opt/module/hadoop-2.7.2/etc/hadoop
[root@hadoop102 hadoop]$ vi slaves
hadoop102
hadoop103
hadoop104
NameNode和DataNode是master-slaver关系,所以要配置slaves。
2.2.3 配置yarn
yarn-env.sh
存储路径:/opt/module/hadoop-2.7.2/etc/hadoop
export JAVA_HOME=/opt/module/jdk1.8.0_144
yarn-site.xml
存储路径:/opt/module/hadoop-2.7.2/etc/hadoop
<!--reducer获取数据的方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定YARN的ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
2.2.4 配置mapreduce
mapred-env.sh
存储路径:/opt/module/hadoop-2.7.2/etc/hadoop
export JAVA_HOME=/opt/module/jdk1.8.0_144
mapred-site.xml
存储路径:/opt/module/hadoop-2.7.2/etc/hadoop
<!--指定mr运行在yarn上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
2.3 同步参数
在第一个节点部署完成后,要通过xsync脚本将数据同步给其他节点。
将/opt/module/hadoop-2.7.2/etc/hadoop/所有文件同步
# xsync /opt/module/hadoop-2.7.2/etc/hadoop/
3 启动集群
3.1 格式化namenode
第一次启动需格式化,后期不需要。如果不是第一次部署hadoop集群,还要删除data和logs下的文件。
3.2 启动/停止HDFS
# sbin/start-dfs.sh
# sbin/stop-dfs.sh
3.3 启动yarn
# sbin/start-yarn.sh
# sbin/stop-yarn.sh
整体启动、关闭(不建议使用)
start-all.sh
stop-all.sh
4 设置集群时间同步
配置ntp服务,确保集群节点时间同步。