分析:

1)准备3台客户机(关闭防火墙、静态ip、主机名称)
2)安装jdk
3)配置环境变量
4)安装hadoop
5)配置环境变量
6)配置集群
7)单点启动
8)配置ssh
9)群起并测试集群

一、虚拟机准备

详见:

Hadoop运行环境搭建(含Linux网络配置和系统管理操作)

二、编写集群分发脚本xsync

1.scp:secure copy 安全拷贝

(1)scp定义:

scp可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)

(2)举个栗子
 将hadoop101中/opt/module目录下的软件拷贝到hadoop102上。

[admin@hadoop101 /]$ scp -r /opt/module/*  admin@hadoop102:/opt/module
2.rsync

  rsync远程同步工具,主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
  rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。

(1)查看rsync使用说明

man rsync | more

(2)基本语法

rsync -rvl     $pdir/$fname         $user@hadoop$host:$pdir
#命令 命令参数 要拷贝的文件路径/名称   目的用户@主机:目的路径

(3)选项说明

选项

功能

-r

递归

-v

显示复制过程

-l

拷贝符号连接

(4)举个栗子
 把hadoop101机器上的/opt/software目录同步到hadoop102服务器的root用户下的/opt/目录

[admin@hadoop101 opt]$ rsync -rvl /opt/software/* hadoop102:/opt/software/
3.脚本需求分析:循环复制文件到所有节点的相同目录下(批处理循环拷贝)

(1)原始拷贝:

rsync  -rvl     /opt/module          root@hadoop103:/opt/

(2)期望脚本:

xsync 要同步的文件名称

(3)在/home/admin/bin这个目录下存放的脚本,admin用户可以在系统任何地方直接执行。

4.脚本实现

(1)在/home/admin目录下创建bin目录,并在bin目录下创建xsync文件,文件内容如下:

[admin@hadoop102 ~]$ mkdir bin
[admin@hadoop102 ~]$ cd bin/
[admin@hadoop102 bin]$ touch xsync
[admin@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 --------------------- hadoop$host ----------------
        rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done

(2)修改脚本 xsync 具有执行权限

[admin@hadoop102 bin]$ chmod 777 xsync

(3)调用脚本形式:xsync 文件名称

[admin@hadoop102 bin]$ xsync /home/admin/bin

三、集群配置

1.集群部署规划


hadoop102

hadoop103

hadoop104

HDFS

NameNode

DataNode

DataNode

SecondaryNameNode

DataNode

YARN

NodeManager

ResourceManager

NodeManager

NodeManager

2.配置集群

(1)核心配置文件
core-site.xml

[admin@hadoop102 hadoop]$ vi core-site.xml
<!-- 指定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)hdfs配置文件
hadoop-env.sh

[admin@hadoop102 hadoop]$ vi hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
hdfs-site.xml
[admin@hadoop102 hadoop]$ vi hdfs-site.xml
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>

    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop104:50090</value>
    </property>

(3)yarn配置文件
yarn-env.sh

[admin@hadoop102 hadoop]$ vi yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
yarn-site.xml
[admin@hadoop102 hadoop]$ vi yarn-site.xml
    <!-- 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>

(4)mapreduce配置文件
mapred-env.sh

[admin@hadoop102 hadoop]$ vi mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
mapred-site.xml
[admin@hadoop102 hadoop]$ cp mapred-site.xml.template mapred-site.xml
[admin@hadoop102 hadoop]$ vi mapred-site.xml
    <!-- 指定mr运行在yarn上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
3.在集群上分发配置好的Hadoop配置文件
[admin@hadoop102 hadoop]$ xsync /opt/module/hadoop-2.7.2/
4.查看文件分发情况
[admin@hadoop103 hadoop]$ cat /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml

四、集群单点启动

(1)如果集群是第一次启动,需要格式化NameNode

[admin@hadoop102 hadoop-2.7.2]$ hadoop namenode -format

(2)在hadoop102上启动NameNode

[admin@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start namenode
[admin@hadoop102 hadoop-2.7.2]$ jps
3461 NameNode

(3)在hadoop102、hadoop103以及hadoop104上分别启动DataNode

[admin@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[admin@hadoop102 hadoop-2.7.2]$ jps
3461 NameNode
3608 Jps
3561 DataNode
[admin@hadoop103 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[admin@hadoop103 hadoop-2.7.2]$ jps
3190 DataNode
3279 Jps
[admin@hadoop104 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
[admin@hadoop104 hadoop-2.7.2]$ jps
3237 Jps
3163 DataNode

五、SSH无密登录配置

1.配置ssh
(1)基本语法

ssh 另一台电脑的ip地址

(2)ssh连接时出现Host key verification failed的解决方法

[admin@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:de: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

2.无密钥配置

(1)免密登录原理,如图

zabbix监控 hadoop集群 hadoop集群搭建测试步骤_zabbix监控 hadoop集群


(2)生成公钥和私钥:

[admin@hadoop102 .ssh]$ ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

(3)将公钥拷贝到要免密登录的目标机器上

[admin@hadoop102 .ssh]$ ssh-copy-id hadoop102
[admin@hadoop102 .ssh]$ ssh-copy-id hadoop103
[admin@hadoop102 .ssh]$ ssh-copy-id hadoop104
3.ssh文件夹下(~/.ssh)的文件功能解释
(1)known_hosts  :记录ssh访问过计算机的公钥(public key)
(2)id_rsa   :生成的私钥
(3)id_rsa.pub   :生成的公钥
(4)authorized_keys  :存放授权过得无密登录服务器公钥

六、集群测试

1.配置slaves
/opt/module/hadoop-2.7.2/etc/hadoop/slaves
[admin@hadoop102 hadoop]$ vi slaves
hadoop102
hadoop103
hadoop104
2.启动集群

(1)如果集群是第一次启动,需要格式化NameNode

[admin@hadoop102 hadoop-2.7.2]$ bin/hdfs namenode -format

(2)启动HDFS:

[admin@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh
[admin@hadoop102 hadoop-2.7.2]$ jps
4166 NameNode
4482 Jps
4263 DataNode
[admin@hadoop103 hadoop-2.7.2]$ jps
3218 DataNode
3288 Jps

[admin@hadoop104 hadoop-2.7.2]$ jps
3221 DataNode
3283 SecondaryNameNode
3364 Jps

(3)启动yarn

[admin@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh

注意:NameNode和ResourceManger如果不是同一台机器,不能在NameNode上启动 yarn,应该在ResouceManager所在的机器上启动yarn。
(4)web端查看SecondaryNameNode

 (a)浏览器中输入:http://hadoop104:50090/status.html
 (b)查看SecondaryNameNode信息,如图

zabbix监控 hadoop集群 hadoop集群搭建测试步骤_zabbix监控 hadoop集群_02

3.集群基本测试

(1)上传文件到集群
  上传小文件

[admin@hadoop102 hadoop-2.7.2]$ hadoop fs -mkdir -p /user/admin/input
[admin@hadoop102 hadoop-2.7.2]$ hadoop fs -put wcinput/wc.input /user/admin/input

  上传大文件

[admin@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -put
 /opt/software/hadoop-2.7.2.tar.gz  /user/admin/input

(2)上传文件后查看文件存放在什么位置
  查看HDFS文件存储路径

[admin@hadoop102 subdir0]$ pwd
/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0
查看HDFS在磁盘存储文件内容
[admin@hadoop102 subdir0]$ cat blk_1073741825
hadoop yarn
hadoop mapreduce 
admin
admin

(3)拼接

-rw-rw-r–. 1 admin admin 134217728 5月 23 16:01 blk_1073741836
-rw-rw-r–. 1 admin admin 1048583 5月 23 16:01 blk_1073741836_1012.meta
-rw-rw-r–. 1 admin admin 63439959 5月 23 16:01 blk_1073741837
-rw-rw-r–. 1 admin admin 495635 5月 23 16:01 blk_1073741837_1013.meta

[admin@hadoop102 subdir0]$ cat blk_1073741836>>tmp.file
[admin@hadoop102 subdir0]$ cat blk_1073741837>>tmp.file
[admin@hadoop102 subdir0]$ tar -zxvf tmp.file

(4)下载

[admin@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -get
 /user/admin/input/hadoop-2.7.2.tar.gz ./

七、集群启动/停止方式

1.各个服务组件逐一启动/停止

(1)分别启动/停止hdfs组件

hadoop-daemon.sh  start|stop  namenode|datanode|secondarynamenode

(2)启动/停止yarn

yarn-daemon.sh  start|stop  resourcemanager|nodemanager
2.各个模块分开启动/停止(配置ssh是前提)常用

(1)整体启动/停止hdfs

start-dfs.sh
stop-dfs.sh

(2)整体启动/停止yarn

start-yarn.sh
stop-yarn.sh

八、集群时间同步

  时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间。

举个配置时间同步的栗子:
1.时间服务器配置(必须root用户)

(1)检查ntp是否安装

[root@hadoop102 桌面]# rpm -qa|grep ntp
ntp-4.2.6p5-10.el6.centos.x86_64
fontpackages-filesystem-1.41-1.1.el6.noarch
ntpdate-4.2.6p5-10.el6.centos.x86_64

(2)修改ntp配置文件

[root@hadoop102 桌面]# vi /etc/ntp.conf
修改内容如下

  a)修改1(授权192.168.1.0网段上的所有机器可以从这台机器上查询和同步时间)

#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap为
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

  b)修改2(集群在局域网中,不使用其他的网络时间)

server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst  为
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst

  c)添加3(当该节点丢失网络连接,依然可以作为时间服务器为集群中的其他节点提供时间同步)

server 127.127.1.0
fudge 127.127.1.0 stratum 10

(3)修改/etc/sysconfig/ntpd 文件

[root@hadoop102 桌面]# vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes

(4)重新启动ntpd

[root@hadoop102 桌面]# service ntpd status
ntpd 已停
[root@hadoop102 桌面]# service ntpd start
正在启动 ntpd:                                            [确定]

(5)执行:

[root@hadoop102 桌面]# chkconfig ntpd on
2.其他机器配置(必须root用户)

(1)在其他机器配置10分钟与时间服务器同步一次

[root@hadoop103 hadoop-2.7.2]# crontab -e
编写脚本
*/10 * * * * /usr/sbin/ntpdate hadoop102

(2)修改任意机器时间

[root@hadoop103 hadoop]# date -s "2017-9-11 11:11:11"

(3)十分钟后查看机器是否与时间服务器同步

[root@hadoop103 hadoop]# date

文末彩蛋

其实就是总结,毕竟步骤较为繁琐~

一、基础虚拟机的准备
网络适配器:NAT模式
基础虚拟机的准备:centos100
1.配置IP地址:192.168.1.100
2.配置主机名:hadoop100
3.配置主机名和IP的映射:
    192.168.1.100 hadoop100
    192.168.1.101 hadoop101
    192.168.1.102 hadoop102
    192.168.1.103 hadoop103
    192.168.1.104 hadoop104
    192.168.1.105 hadoop105
    192.168.1.106 hadoop106
    192.168.1.107 hadoop107
    192.168.1.108 hadoop108
4.修改window7的主机映射文件
    192.168.1.100 hadoop100
    192.168.1.101 hadoop101
    192.168.1.102 hadoop102
    192.168.1.103 hadoop103
    192.168.1.104 hadoop104
    192.168.1.105 hadoop105
    192.168.1.106 hadoop106
    192.168.1.107 hadoop107
    192.168.1.108 hadoop108
5.关闭防火墙

注意:虚拟机和windows互相ping一下,保证网络畅通。
二、完全分布式集群搭建(配置步骤)
1.准备三台(以三台为例)客户机(配置IP,配置主机名...)
2.安装jdk,安装hadoop
3.配置JAVA_HOME和HADOOP_HOME
4.使每个节点上的环境变量生效(source /etc/profile)
5.准备分发脚本 xsync
6.明确集群的配置
7.修改配置文件
    **core-site.xml
    **hadoop-env.sh
    **hdfs-site.xml
    **yarn-env.sh
    **yarn-site.xml
    **mapred-env.sh
    **mapred-site.xml
8.分发配置文件
9.删掉data和logs文件夹
10.格式化hdfs(hdfs namenode -format)
11.单节点启动hdfs
12.单节点关闭hdfs
13.配置ssh(hadoop102,hadoop103)
    **为hadoop102配置免密登陆
    **为hadoop103配置免密登陆
14.配置slaves
15.分发配置文件
16.群启hdfs
17.群启yarn