完全分布式集群模式(10)

完全分布式:

1.准备三台客户机

    通过克隆复制三台虚拟机hadoop102、hadoop103、hadoop104(从基本的虚拟机(未安装或者安装了jdk、hadoop都行)复制即可)

1)准备3台客户机(关闭防火墙、静态ip、主机名称

2)安装jdk

3)配置环境变量

4)安装hadoop

5)配置环境变量

6)安装ssh

7)配置集群

8)启动测试集群

配置上述一些环境可参考下面的博客:

https://blog.csdn.net/qq_41544550/article/details/102749750

https://blog.csdn.net/qq_41544550/article/details/102788370

2.安装jdk,安装hadoop

    安装包可以从其它虚拟机复制,也可以通过SecureFX复制

    scp -r hadoop-2.7.2.tar.gz atguigu@hadoop103:/opt/software/

    scp -r jdk-8u144-linux-x64.tar.gz atguigu@hadoop103:/opt/software/

    scp -r hadoop-2.7.2.tar.gz atguigu@hadoop104:/opt/software/

    scp -r jdk-8u144-linux-x64.tar.gz atguigu@hadoop104:/opt/software/

    

    解压安装包

    tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/

    tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/

3.配置JAVA_HOME和HADOOP_HOME(三台机器都要root权限下执行:vim /etc/profile)

        #JAVA_HOME

        export JAVA_HOME=/opt/module/jdk1.8.0_144

        export PATH=$PATH:$JAVA_HOME/bin

        #HADOOP_HOME

        export HADOOP_HOME=/opt/module/hadoop-2.7.2

        export PATH=$PATH:$HADOOP_HOME/bin

        export PATH=$PATH:$HADOOP_HOME/sbin

4.使每个节点上的环境变量生效(三台机器都要:source /etc/profile)

        source /etc/profile

配置SSH无密登录(hadoop102和hadoop103都要生成)

[atguigu@hadoop102 hadoop-2.7.2]$ ssh hadoop103

atguigu@hadoop103's password:

Last login: Fri Aug 16 14:34:13 2019 from hadoop102

[atguigu@hadoop103 ~]$ hostname

hadoop103

无密钥配置

hadoop102配置

(1)进入到我的home目录cd  ~/.ssh 

(2)生成公钥和私钥: 

    [atguigu@hadoop102 .ssh]$ ssh-keygen -t rsa 

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

    [atguigu@hadoop102 .ssh]$ ll

    总用量 12

    -rw-------. 1 atguigu atguigu 1675 8月  16 15:30 id_rsa

    -rw-r--r--. 1 atguigu atguigu  399 8月  16 15:30 id_rsa.pub

    -rw-r--r--. 1 atguigu atguigu  814 8月  16 14:06 known_hosts

(3)将公钥拷贝到要免密登录的目标机器上 ssh-copy-id hadoop103、ssh-copy-id hadoop104

    [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop103  输入密码

    [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop104  输入密码

    [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop102  输入密码

(4)在hadoop102下

    [atguigu@hadoop102 .ssh]$ ssh hadoop102

    known_hosts

hadoop103配置

因为ResourceManager是配置在这台机器的,如果是配置在hadoop102上则只需要在102生成

(1)进入到我的home目录cd  ~/.ssh 

(2)生成公钥和私钥:

    [atguigu@hadoop103 .ssh]$ ssh-keygen -t rsa

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

    [atguigu@hadoop103 .ssh]$ ll

    总用量 16

    -rw-------. 1 atguigu atguigu  399 8月  16 15:31 authorized_keys

    -rw-------. 1 atguigu atguigu 1675 8月  17 11:12 id_rsa

    -rw-r--r--. 1 atguigu atguigu  399 8月  17 11:12 id_rsa.pub

    -rw-r--r--. 1 atguigu atguigu 1221 8月  17 10:22 known_hosts

    

(3)将公钥拷贝到要免密登录的目标机器上 ssh-copy-id hadoop103、ssh-copy-id hadoop104

    [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop103  输入密码

    [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop104  输入密码

    [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop102  输入密码

(4)在hadoop103下

    [atguigu@hadoop103 .ssh]$ ssh hadoop102

.ssh文件夹下的文件功能解释

(1)~/.ssh/known_hosts :记录ssh访问过计算机的公钥(public key)

(2)id_rsa :生成的私钥 

(3)id_rsa.pub :生成的公钥 

(4)authorized_keys :存放授权过得无秘登录服务器公钥

5.准备分发脚本 xsync:循环复制文件到所有节点的相同目录下

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 a+x xsync

3)测试

    配置SSH之后

5.配置xcall:在所有主机上同时执行相同的命令

    xcall+命令

    在/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

赋予权限

    [root@hadoop102 bin]# chmod 777 xcall

    执行

    

6.明确集群的配置

    

7.修改配置文件

    核心配置文件

    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.2/data/tmp</value>
 </property>

    hdfs配置文件

    2)hadoop-env.sh

        25行 export JAVA_HOME=/opt/module/jdk1.8.0_144

    3)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>

    yarn配置文件

    4)yarn-env.sh

      23行 export JAVA_HOME=/opt/module/jdk1.8.0_144

    5)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>

    MapReduce配置文件

    6)mapred-env.sh

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

    7)mapred-site.xml

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

    8)slaves

hadoop102
hadoop103
hadoop104

8.分发配置文件

    

9.集群启动并测试

    注意:先启动HDFS,在启动YARN;关闭时,先关闭YARN,再关闭HDFS

    1)启动集群

    ① 如果集群是第一次启动,则直接进行格式化;如果不是,则需要删除data和logs文件夹在格式化启动

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

  

    ② 启动HDFS

    [atguigu@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh

    启动NameNode、DataNode、SecondryNamenode

    

    

    ③ 启动yarn    

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

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

    web端查看: http://hadoop102:50070/dfshealth.html#tab-datanode

    2)测试集群

    ① 在hadoop下创建wcinput/wc.input,在上传到HDFS上

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

    ② 启动测试用例

        [atguigu@hadoop102 hadoop-2.7.2]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input /user/atguigu/output

    

    小于128M的文件上传之后只有一个block,大于128M的1.1倍的会有多个block

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

  

    3)HDFS上文件存放位置

    /opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-1935757359-192.168.137.102-1566011904417/current/finalized/subdir0/subdir0

    根据Block ID来识别block

    

    3)对HDFS上不同block数据进行拼接

    下面两个block是hadoop的安装包,对两个block进行合并

    -rw-rw-r--. 1 atguigu atguigu 134217728 8月  17 14:33 blk_1073741857

    -rw-rw-r--. 1 atguigu atguigu   1048583 8月  17 14:33 blk_1073741857_1033.meta

    -rw-rw-r--. 1 atguigu atguigu  63439959 8月  17 14:33 blk_1073741858

    -rw-rw-r--. 1 atguigu atguigu    495635 8月  17 14:33 blk_1073741858_1034.meta

        [atguigu@hadoop102 subdir0]$ cat blk_1073741836>>tmp.file

        [atguigu@hadoop102 subdir0]$ cat blk_1073741837>>tmp.file                       

        [atguigu@hadoop102 subdir0]$ tar -zxvf tmp.file   ==> 解压

    

    4)将HDFS上文件下载下来

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

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

11.集群时间同步(必须在root用户下)

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

    [root@hadoop102 atguigu]# rpm -qa|grep ntp

    

    [root@hadoop102 atguigu]# vim /etc/ntp.conf

    

    [root@hadoop102 atguigu]# vim /etc/sysconfig/ntpd

    

    重新启动ntpd

    [root@hadoop102 atguigu]# service ntpd status

    ntpd 已停

    [root@hadoop102 atguigu]# service ntpd start

    正在启动 ntpd:                                            [确定]

    [root@hadoop102 atguigu]# chkconfig ntpd on

 

    其它机器配置(root用户下)

    [root@hadoop103 hadoop-2.7.2]# crontab -e

        编写脚本(每两分钟同步一次)

        */2 * * * * /usr/sbin/ntpdate hadoop102

    [root@hadoop104 hadoop-2.7.2]# crontab -e

        编写脚本(每两分钟同步一次)

        */2 * * * * /usr/sbin/ntpdate hadoop102

    修改任意机器时间

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

    两分钟之后使用date查看时间

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值