Hadoop集群运行模式搭建

    Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式。
    因为在生产当中我们基本都使用完全分布式模式,所以在此只学习完全分布式集群搭建。

1.分析:
(1) 准备3台客户机(关闭防火墙、静态ip、主机名称)
(2) 安装jdk
(3) 配置环境变量
(4) 安装hadoop
(5) 配置环境变量
(6) 编写集群分发脚本
(7) 配置集群
(8) 单点启动
(9) 配置ssh
(10) 群起并测试集群
    由于上面的前五步我们在之前有详细讲解,在此不在演示。

2.编写集群分发脚本xsync
    脚本需求分析:循环复制文件到所有节点的相同目录下。
(1)原始拷贝:rsync  -rvl    /opt/module   root@hadoop103:/opt/
(2)期望脚本:xsync要同步的文件名称
(3)在/home/luomk/bin这个目录下存放的脚本,luomk用户可以在系统任何地方直接执行。
(4)脚本实现:
    (1)在/home/luomk目录下创建bin目录,并在bin目录下xsync创建文件,文件内容如下:
        [luomk@hadoop102 ~]$ mkdir bin
        [luomk@hadoop102 ~]$ cd bin/
        [luomk@hadoop102 bin]$ touch xsync
        [luomk@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=102; host<105; host++)); do
        echo --------------------- hadoop$host ----------------
        rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
    (2)修改脚本 xsync 具有执行权限
        [luomk@hadoop102 bin]$ chmod 777 xsync
    (3)调用脚本形式:xsync 文件名称    
        [luomk@hadoop102 bin]$ xsync /home/luomk/bin

3.集群配置
(1)集群部署规划
  hadoop102 hadoop103 hadoop104
HDFS
 
NameNode
DataNode
 
DataNode
SecondaryNameNode
DataNode
YARN
 
NodeManager
ResourceManager
NodeManager
 
NodeManager
(2)配置集群
    ①  核心配置文件:core-site.xml
        [luomk@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>
    ② hdfs配置文件
        a.hadoop-env.sh
        [luomk@hadoop102 hadoop]$ vi hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
        b. hdfs-site.xml
        [luomk@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>
     ③ yarn配置文件: 
        a.yarn-env.sh
        [luomk@hadoop102 hadoop]$ vi yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
        yarn-site.xml
 [luomk@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配置文件:
    a.mapred-env.sh
    [luomk@hadoop102 hadoop]$ vi mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
    b.mapred-site.xml
    [luomk@hadoop102 hadoop]$ cp mapred-site.xml.template mapred-site.xml
    [luomk@hadoop102 hadoop]$ vi mapred-site.xml
<!-- 指定mr运行在yarn上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
(3) 在集群上分发配置好的Hadoop配置文件
    [luomk@hadoop102 hadoop]$ xsync /opt/module/hadoop-2.7.2/
(4) 查看文件分发情况
    [luomk@hadoop103 hadoop]$ cat /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml

4.集群单点启动
(0)如果集群是第一次启动,需要格式化NameNode
        [luomk@hadoop102 hadoop-2.7.2]$ hadoop namenode -format
(1)在hadoop102上启动NameNode
        [luomk@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start namenode
        [luomk@hadoop102 hadoop-2.7.2]$ jps
        3461 NameNode
        3531 Jps
(2)在hadoop102、hadoop103以及hadoop104上分别启动DataNode
        [luomk@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
        [luomk@hadoop102 hadoop-2.7.2]$ jps
        3461 NameNode
        3608 Jps
        3561 DataNode
        [luomk@hadoop103 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
        [luomk@hadoop103 hadoop-2.7.2]$ jps
        3190 DataNode
        3279 Jps
        [luomk@hadoop104 hadoop-2.7.2]$ hadoop-daemon.sh start datanode
        [luomk@hadoop104 hadoop-2.7.2]$ jps
        3237 Jps
        3163 DataNode

5.SSH无密登录配置
(1) 配置ssh
    ① 基本语法:ssh 另一台电脑的ip地址
    ② ssh连接时出现Host key verification failed的解决方法
        [luomk@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.
    ③ 解决方案如下:直接输入yes
(2) 无密钥配置
    ① 生成公钥和私钥:
        [luomk@hadoop102 .ssh]$ ssh-keygen -t rsa
    然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
    ② 将公钥拷贝到要免密登录的目标机器上
        [luomk@hadoop102 .ssh]$ ssh-copy-id hadoop102
        [luomk@hadoop102 .ssh]$ ssh-copy-id hadoop103
        [luomk@hadoop102 .ssh]$ ssh-copy-id hadoop104
    ③  ssh文件夹下(~/.ssh)的文件功能解释
    (1)known_hosts    :记录ssh访问过计算机的公钥(public key)
    (2)id_rsa    :生成的私钥
    (3)id_rsa.pub    :生成的公钥
    (4)authorized_keys    :存放授权过得无密登录服务器公钥

6.集群测试
(1) 配置slaves
[luomk@hadoop102 hadoop-2.7.2]$ cd /opt/module/hadoop-2.7.2/etc/hadoop/slaves
[luomk@hadoop102 hadoop]$ vi slaves
hadoop102
hadoop103
hadoop104
(2) 启动集群
    ① 如果集群是第一次启动,需要格式化NameNode
        [luomk@hadoop102 hadoop-2.7.2]$ bin/hdfs namenode -format
    ② 启动HDFS:
        [luomk@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh
        [luomk@hadoop102 hadoop-2.7.2]$ jps
4166 NameNode
4482 Jps
4263 DataNode
[luomk@hadoop103 hadoop-2.7.2]$ jps
3218 DataNode
3288 Jps
[luomk@hadoop104 hadoop-2.7.2]$ jps
3221 DataNode
3283 SecondaryNameNode
3364 Jps
    ③ 启动yarn
        [luomk@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh
        注意:NameNode和ResourceManger如果不是同一台机器,不能在NameNode上启动 yarn,应该在ResouceManager所在的机器上启动yarn。    
    ④ web端查看SecondaryNameNode
    (a)浏览器中输入: http://hadoop104:50090/status.html
    (b)查看SecondaryNameNode信息。

(3) 集群基本测试
    ① 上传文件到集群
    上传小文件
[luomk@hadoop102 hadoop-2.7.2]$ hadoop fs -mkdir -p /user/luomk/input
[luomk@hadoop102 hadoop-2.7.2]$ hadoop fs -put wcinput/wc.input /user/luomk/input
    上传大文件
[luomk@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -put /opt/software/hadoop-2.7.2.tar.gz  /user/luomk/input
    ② 上传文件后查看文件存放在什么位置
    查看HDFS文件存储路径
    [luomk@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在磁盘存储文件内容
[luomk@hadoop102 subdir0]$ cat blk_1073741825
hadoop yarn
hadoop mapreduce
    ③ 下载
[luomk@hadoop102 hadoop-2.7.2]$ hadoop fs -get /user/luomk/input/hadoop-2.7.2.tar.gz ./


7.集群启动/停止方式
(1) 各个服务组件逐一启动/停止
    ① 分别启动/停止hdfs组件
hadoop-daemon.sh  start|stop  namenode|datanode|secondarynamenode
    ② 启动/停止yarn
yarn-daemon.sh  start|stop  resourcemanager|nodemanager
(2) 各个模块分开启动/停止(配置ssh是前提)常用
    ① 整体启动/停止hdfs
start-dfs.sh
stop-dfs.sh
    ② 整体启动/停止yarn
start-yarn.sh
stop-yarn.sh
(3) 全部启动/停止集群(不建议使用)
start-all.sh
stop-all.sh

   
8.集群时间同步
    时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间。
配置时间同步实操:
(1) 时间服务器配置(必须root用户)
(1)检查ntp是否安装
[root@hadoop102 hadoop-2.7.2]#  rpm -qa|grep ntp
fontpackages-filesystem-1.41-1.1.el6.noarch
ntpdate-4.2.6p5-10.el6.centos.x86_64
ntp-4.2.6p5-10.el6.centos.x86_64
(2)修改ntp配置文件
[root@hadoop102 hadoop-2.7.2]#  vi /etc/ntp.conf
    修改内容如下:
    ① 修改1(设置本地网络上的主机不受限制。)
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
    ② 修改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
    ③ 添加3(添加默认的一个内部时钟数据,使用它为局域网用户提供服务)
server 127.127.1.0
fudge 127.127.1.0 stratum 10
    (3)  修改/etc/sysconfig/ntpd 文件
[root@hadoop102 hadoop-2.7.2]# vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
    (4) 重新启动ntpd
[root@hadoop102 hadoop-2.7.2]# service ntpd stop
[root@hadoop102 hadoop-2.7.2]# service ntpd start
    (5) 执行:
[root@hadoop102 hadoop-2.7.2]#  chkconfig ntpd on

(2) 其他机器配置(必须root用户)
    ① 在其他机器配置10分钟与时间服务器同步一次
[root@hadoop103 hadoop-2.7.2]# crontab -e
编写脚本
*/10 * * * * /usr/sbin/ntpdate hadoop102
    ② 修改任意机器时间
[root@hadoop103 hadoop103]# date -s "2017-9-11 11:11:11"
    ③ 十分钟后查看机器是否与时间服务器同步
[root@hadoop103 hadoop]# date

         

猜你喜欢

转载自blog.csdn.net/luomingkui1109/article/details/80323659