Hadoop运行模式之完全分布式部署Hadoop

Hadoop运行模式之完全分布式部署Hadoop

1 完全分布式部署Hadoop

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

1.1 虚拟机准备
详见之前章节。

1.2 主机名设置
详见之前章节。

1.3 scp
1)scp可以实现服务器与服务器之间的数据拷贝。
2)案例实操
(1)将hadoop101中/opt/module文件拷贝到hadoop102上。

scp -r /opt/module/  root@hadoop102:/opt

(2)将192.168.25.102服务器上的文件拷贝到当前用户下。

scp  root@hadoop102:/etc/profile  /opt/tmp/

(3)实现两台远程机器之间的文件传输(hadoop103主机文件拷贝到hadoop104主机上)

scp atguigu@hadoop103:/opt/test/haha atguigu@hadoop104:/opt/test/

1.4 SSH无密码登录
1)配置ssh
(1)基本语法

    ssh 另一台电脑的ip地址
    ssh hadoop101

2)无密钥配置
(1)进入到我的家目录

    cd  ~/.ssh

(2)生成公钥和私钥:

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

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

ssh-copy-id hadoop103
ssh-copy-id hadoop104

免密登录原理
这里写图片描述

3).ssh文件夹下的文件功能解释
(1)~/.ssh/known_hosts :记录ssh访问过计算机的公钥(public key)
(2)id_rsa :生成的私钥
(3)id_rsa.pub :生成的公钥
(4)authorized_keys :存放授权过得无秘登录服务器公钥

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

man rsync | more

(2)基本语法

rsync  -rvl  $pdir/$fname   $user@hadoop$host:$pdir
命令   命令参数   要拷贝的文件路径/名称   目的用户@主机:目的路径
        选项
        -r 递归
        -v 显示复制过程
        -l 拷贝符号连接

(3)案例实操
把本机/opt/tmp目录同步到hadoop103服务器的root用户下的/opt/tmp目录

rsync -rvl /opt/tmp/*  root@hadoop103:/opt/tmp

1.6 编写集群分发脚本xsync
1)需求分析:循环复制文件到所有节点的相同目录下。
(1)原始拷贝:

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

(2)期望脚本:
xsync 要同步的文件名称
(3)在/usr/local/bin这个目录下存放的脚本,可以在系统任何地方直接执行。
2)案例实操:
(1)在/usr/local/bin目录下创建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

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

[root@hadoop102 bin]# chmod 777 xsync

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

1.7 编写分发脚本xcall
1)需求分析:在所有主机上同时执行相同的命令
xcall +命令
2)具体实现
(1)在/usr/local/bin目录下创建xcall文件

#!/bin/bash
pcount=$#
if((pcount==0));then
        echo no args;
        exit;
fi

echo -------------localhost----------
$@
for((host=101; host<=108; host++)); do
        echo ----------hadoop$host---------
        ssh hadoop$host $@
done

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

[root@hadoop102 bin]# chmod a+x xcall

(3)调用脚本形式: xcall 操作命令

[root@hadoop102 ~]# xcall ls /opt/tmp/profile

1.8 配置集群
1)集群部署规划
这里写图片描述

2)配置文件
(1)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.4/data/tmp</value>
    </property>

(2)Hdfs
hadoop-env.sh

export JAVA_HOME=/opt/module/jdk1.8

hdfs-site.xml

<configuration> 
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>

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

slaves

hadoop102
hadoop103
hadoop104

(3)yarn
yarn-env.sh

export JAVA_HOME=/opt/module/jdk1.8

yarn-site.xml

<configuration>

    <!-- 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>
</configuration>

(4)mapreduce
mapred-env.sh

export JAVA_HOME=/opt/module/jdk1.8

mapred-site.xml

<configuration>
    <!-- 指定mr运行在yarn上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

3)在集群上分发以上所有文件

xsync /opt/module/hadoop-2.7.4

4)查看文件分发情况

xcall cat /opt/module/hadoop-2.7.2/etc/hadoop/slaves

1.9 集群启动及测试

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

[root@hadoop102 hadoop-2.7.2]# bin/hdfs namenode -format

(1)启动HDFS:

[root@hadoop102 hadoop-2.7.2]# sbin/start-dfs.sh
[root@hadoop102 hadoop-2.7.2]# jps
4166 NameNode
4482 Jps
4263 DataNode

[root@hadoop103 hadoop-2.7.2]# jps
3218 DataNode
3288 Jps

[root@hadoop104 hadoop-2.7.2]# jps
3221 DataNode
3283 SecondaryNameNode
3364 Jps

(2)启动yarn

sbin/start-yarn.sh
注意:Namenode和ResourceManger如果不是同一台机器,不能在NameNode上启动 yarn,应该在ResouceManager所在的机器上启动yarn。

2)集群基本测试
(1)上传文件到集群

    创建文件件   
hadoop fs -mkdir -p /user/zhihua/input
    上传小文件
hadoop fs -put test/ /user/zhihua/input
    上传大文件
hadoop fs -put /opt/software/hadoop-2.7.4-with-centos-6.7.tar.gz /user/zhihua/input

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

/opt/module/hadoop-2.7.4/data/tmp/dfs/data/current/BP-515947719-192.168.25.102-1534487195790/current/finalized/subdir0/subdir0

查看文件内容

[zhihua@hadoop102 subdir0]$ cat blk_1073741825
hello

这里写图片描述
(3)拼接

[zhihua@hadoop102 subdir0]$ cat blk_1073741826 >> tmp.file
[zhihua@hadoop102 subdir0]$ cat blk_1073741827 >> tmp.file
[zhihua@hadoop102 subdir0]$ tar -zxvf tmp.file

这里写图片描述
(4)下载

hadoop fs -get /user/zhihua/input/hadoop-2.7.4-with-centos-6.7.tar.gz

3)集群性能测试
写海量数据
读海量数据

1.10 Hadoop启动停止方式
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

3)全部启动(不建议使用)

    start-all.sh
    stop-all.sh

1.11 集群时间同步
时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间。
配置时间同步实操:
1)时间服务器配置(必须root用户)
(1)检查ntp是否安装

        rpm -qa | grep ntp

(2)修改ntp配置文件

vi /etc/ntp.conf
a)修改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
        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 文件

vim /etc/sysconfig/ntpd
增加内容如下
SYNC_HWCLOCK=yes

(4)重新启动ntpd

service ntpd status
service ntpd start

(5)执行:

chkconfig ntpd on

2)其他机器配置(必须root用户)
(1)在其他机器配置10分钟与时间服务器同步一次

crontab -e
编写脚本
*/10 * * * *   /usr/sbin/ntpdate hadoop102

(2)修改任意机器时间

    date -s "2017-11-11 11:11:11"

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

date

1.12 配置集群常见问题
1)防火墙没关闭、或者没有启动yarn
2)主机名称配置错误
/etc/hosts
3)ip地址配置错误
4)ssh没有配置好
root
为了使用xsync脚本
atguigu
为了集群启动
5)root用户和atguigu两个用户启动集群不统一
6)配置文件修改不细心
7)未编译源码
8)datanode不被namenode识别问题
9)不识别主机名称
解决办法:
(1)在/etc/hosts文件中添加192.168.25.102 hadoop102
(2)主机名称不要起hadoop hadoop000等特殊名称
10)datanode和namenode进程同时只能工作一个。
datanode和namenode进程同时只能有一个工作问题分析.pptx
11)执行命令不生效,粘贴word中命令时,遇到-和长–没区分开。导致命令失效
解决办法:尽量不要粘贴word中代码。
12)jps发现进程已经没有,但是重新启动集群,提示进程已经开启。原因是在linux的根目录下/tmp目录中存在启动的进程临时文件,将集群相关进程删除掉,再重新启动集群。

猜你喜欢

转载自blog.csdn.net/chen1092248901/article/details/81912855