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服务,确保集群节点时间同步。