Hdoop完全分布式运行模式(2)----Linux
 
①Hadoop运行的前提是本机已经安装了JDK,配置JAVA_HOME变量
②在Hadoop中启动多种不同类型的进程
        例如NN,DN,RM,NM,这些进程需要进行通信!
        在通信时,常用主机名进行通信!
        
        在192.168.6.100机器上的DN进程,希望访问192.168.6.104机器的NN进程!
        需要在集群的每台机器上,配置集群中所有机器的host映射!
        配置:
            Linux:   /etc/hosts
        不配报错:  
                 DNS映射异常,HOST映射异常
③注意权限
        hadoop框架在运行需要产生很多数据(日志),数据的保存目录,必须让当前启动hadoop进程的用户拥有写权限!
 
    1.准备三台安装了Linux系统的电脑(或者安装了三台Linux的虚拟机)
        1.1关闭防火墙,静态ip,主机名称
            想xshell成功连接每一台linux,需要:
                (1)[admin @slave01~]# sudo vim /etc/hosts------在其余两台slave102,slave103上一样的操作
                                                        192.168.1.101 slave101------对应的普通用户为:admin
                                                        192.168.1.102 slave102------对应的普通用户为:admin
                                                        192.168.1.103 slave103------对应的普通用户为:admin
                            这里的192.168.51.133可以使用ifconfig查到自己Linux的ip地址
                  (2)  [[email protected] ~]# vim /etc/selinux/config
                    Hdoop完全分布式运行模式(2)----Linux
                  (3)  [[email protected] ~]# systemctl status firewalld----查看防火墙是否关闭
                        [[email protected] ~]# systemctl stop firewalld----关闭防火墙
                        [[email protected] ~]# systemctl disable firewalld ---启动时不开防火墙
 
 
编写集群分发脚本xsync(master是伪分布式中的主机名)
         1.2将主机master中的/opt/module复制到3台客户机(我的三台主机分别叫slave101,slave102,slave103,创建的三个普通用户是:admin,admin,admin)
            1)复制
                        [[email protected] /]# scp -r /opt/module  [email protected]:/opt/module-------scp可以实现服务器与服务器之间的数据拷贝
                        [[email protected] /]# scp -r /opt/module  [email protected]:/opt/module
                        [[email protected] /]# scp -r /opt/module  [email protected]:/opt/module
            2)因为是在root下复制的,所以module之下的文件或目录的拥有者和拥有组都是root,这里需要改成admin(以主机slave101为例)
                        [[email protected] ~ ] chown admin:admin -R /opt/module----R是表示递归,使得该文件夹之下的文件或目录都改变
                或     [[email protected] ~]sudo chown admin:admin -R /opt/module
            3)查看是否成功(以slave101为例)
                        [[email protected] ~]# cd /opt/module     ----~表示当前账号的位置,即/home/root
                        [[email protected] module]# ll
                         Hdoop完全分布式运行模式(2)----Linux-
 
        1.3需要分别在/etc/profile中配置JAVA_HOME和HADOOP_HOME
                        [[email protected] ~]$ sudo scp /etc/profile [email protected]:/etc/profile------将master中配置好的复制到slave101,slave102,slave103中
                        [[email protected] ~]$ sudo scp /etc/profile [email protected]:/etc/profile
                        [[email protected] ~]$ sudo scp /etc/profile [email protected]:/etc/profile
            是否复制成功(以slave101为例)
                        [[email protected] ~]$ cat /etc/profile
                        Hdoop完全分布式运行模式(2)----Linux  有这个说明成功了
        记住:
                     [[email protected] ~]$ source /etc/profile-----每台都需要,这相当于更新一下
 
这里很有可能会出现以下情况
                    [[email protected] ~]$java -version
Hdoop完全分布式运行模式(2)----Linux
                    [[email protected] ~]$ javac -version
Hdoop完全分布式运行模式(2)----Linux,不同,是因为Linux自带的jdk没有删除
                    [[email protected] ~]# rpm -qa|grep java
                    Hdoop完全分布式运行模式(2)----Linux
                    [[email protected] ~]# rpm -e --nodeps  java-1.7.0-openjdk-headless-1.7.0.191-2.6.15.5.el7.x86_64---将上面的Java开头的按这种方式删除
最后
                    [[email protected] ~]# source /etc/profile
                    [[email protected] ~]# java -version
Hdoop完全分布式运行模式(2)----Linux
                    [[email protected] ~]# javac -version 
Hdoop完全分布式运行模式(2)----Linux
 
rsync远程同步工具
    主要用于备份和镜像。具有速度快,避免复制相同内容和支持符号链接的优点。
    rsync与scp区别:用rsync做文件的复制要比scp快,rsync只对差异文件做更新。scp是把所有文件都复制过去
例如:将master中的/opt/software目录同步到slave01的admin用户的/opt/software目录
[[email protected] opt]$ rsync -rvl /opt/software/  [email protected]:/opt/software
a:递归
v:显示复制过程
l:拷贝符号链接
 
 
xsync---集群分发脚本:目的是将一台客户机上所对应的文件夹之下的文件通过这个脚本文件直接发送到别的客户机上
1).放置脚本的地方----/home/admin/bin,admin用户可以在系统任何地方直接执行
[[email protected] ~]$ mkdir bin
[[email protected] ~]$ cd bin/
[[email protected] bin]$touch xsync 
[[email protected] bin]$ vim 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=101; host<104; host++)); do
        echo ------------------- slave$host --------------
        rsync -rvl $pdir/$fname [email protected]$host:$pdir    
done
修改xsync的权限
[[email protected] bin]$ sudo chmod 777 xsync
[[email protected] bin]$ xysnc /usr/local/bin
其中[[email protected] ~]$ basename /opt/module/hadoop-2.7.2-----结果为 :  hadoop-2.7.2
       [[email protected] ~]$ dirname /opt/module/hadoop-2.7.2-------结果为: /opt/moudle
cd -P:P表示追踪绝对路径
        [[email protected] ~]$ mkdir a
        [[email protected] ~]$ ln -s a b---------创建链接b->a
        [[email protected] ~]$ cd -P b---"-P"是对软链接进行操作的
Hdoop完全分布式运行模式(2)----Linux,找到了a
pwd:显示当前的路径
whoami:表示当前的用户名
        [[email protected] ~]$ whoami----结果为:admin01
host=101;host<104;host++---表示主机IP地址的最后一位,如slave101的主机IP为192.168.1.101
 rsync -rvl $pdir/$fname [email protected]$host:$pdir---相当于:[[email protected] ~]$ rsync -rvl /opt/module [email protected]:/opt/module
 
测试
[[email protected] ~]$ cd /opt
[[email protected] opt]$ mkdir test
[[email protected] opt]$ cd test
[[email protected] test]$ touch t.txt
[[email protected] test]$ xysnc test-----是否成功,可以去看slave102中的/opt中是否有test文件
 
(1).这里可能会遇到不能实现,则可以将xsync移到/usr/local/bin
[[email protected] ~]$ cd /home/admin01/bin
[ admin@slave101 bin]$ sudo mv xsync /usr/local/bin
[ admin@slave101 bin]$ cd /usr/local/bin
[[email protected] bin]$ sudo chmod 777 xsync    #修改权限
[[email protected] bin]$ xsync /usr/local/bin
这里我以前slave101对应的用户名为admin01,slave102对应的用户名为admin02------因为user只能得到slave101上的用户admin01,当实现 [[email protected]]$xsync /usr/local/bin时,出现错误,因为slave102对应的用户是admin02,user取不到该用户名,所以我将所以的用户名改成了admin
但是在root下,[[email protected]]$xsync /usr/local/bin可以,因为user可以获得slave102,slave103的root用户
Hdoop完全分布式运行模式(2)----Linux
 
(2).可以在slave101,slave102,slave103中配置(以slave101为例)
    [[email protected]~]# vim /etc/hosts
    192.168.1.101 slave101
    192.168.1.102 slave102
    192.168.1.103 slave103
 
(3).为什么把脚本xsync放置在/home/admin/bin或者/usr/local/bin中,是因为
[[email protected] ~]$ echo $PATH----上面两个都在这个路径下,这表示可以在任何地方使用这个脚本,相当于win10中的环境变量的设置
 

 

集群配置

    1.集群部署规划

         slave101       slave102   slave103

Hdoop完全分布式运行模式(2)----Linux

 

    2.配置集群

        (1)核心配置文件

        配置core-site.xml

        [[email protected] ~]$ cd /opt/module/hadoop-2.7.2/etc/hadoop

        [[email protected] hadoop]$ sudo vim core-site.xml

Hdoop完全分布式运行模式(2)----Linux

        (2)HDFS配置文件

        配置hadoop-env.sh

        [[email protected] hadoop]$ sudo vim hadoop-env.sh

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

        配置hdfs-site.xml

        [[email protected] hadoop]$ sudo vim hdfs-site.xml

Hdoop完全分布式运行模式(2)----Linux

        (3)YARN配置文件

        配置yarn-env.sh

        [[email protected] hadoop]$ sudo vim yarn-env.sh

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

        配置yarn-site.xml

        [[email protected] hadoop]$sudo vim yarn-site.xml

Hdoop完全分布式运行模式(2)----Linux

        (4)MapReduce配置文件

        配置mapred-env.sh

        [[email protected] hadoop]$ sudo vim mapred-env.sh

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

        配置mapred-site.xml

        [[email protected] hadoop]$ sudo vim mapred-site.xml

Hdoop完全分布式运行模式(2)----Linux

3.在集群上分发配置好的Hadoop配置文件

    [[email protected] hadoop]# xsyn /opt/module/hadoop-2.7.2/

    测试

    [[email protected] hadoop]$ cat core-site.xml

Hdoop完全分布式运行模式(2)----Linux

 

集群单点启动

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

    [[email protected] hadoop-2.7.2]$ hadoop namenode -format

    (2)在slave101上启动namenode

    [[email protected] hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode

    [[email protected] hadoop-2.7.2]$ jps----看是否有namenode

    (3)在slave101,slave102,slave103上分别启动datanode

    [[email protected] hadoop-2,7,2]$ sbin/hadoop-daemon.sh start datanode

Hdoop完全分布式运行模式(2)----Linux

    [[email protected] hadoop-2,7,2]$ sbin/hadoop-daemon.sh start datanode

Hdoop完全分布式运行模式(2)----Linux

    [[email protected] hadoop-2,7,2]$ sbin/hadoop-daemon.sh start datanode

Hdoop完全分布式运行模式(2)----Linux

 

ssh免密码登录

    1.xshell免登陆linux(以主机slave103为例)

    (1).

Hdoop完全分布式运行模式(2)----Linux

    (2).一直点下一步,直到需要输入密码

Hdoop完全分布式运行模式(2)----Linux

    (3).点击保存文件到桌面(id_rsa_2048.pub)

Hdoop完全分布式运行模式(2)----Linux

(4).

[[email protected] ~]$cd .ssh----没有那个文件或目录

[[email protected] ~]$ ssh-****** -t rsa -----连续点击回车键三下,出现如下图表示成功

Hdoop完全分布式运行模式(2)----Linux

ssh-******表示生成**,rsa表示非对称算法,即生成的私钥和公钥不同

图中的id_rsa表示私钥,id_rsa.pub表示公钥

[[email protected] ~]$ cd .ssh

[[email protected] .ssh]ll

Hdoop完全分布式运行模式(2)----Linux

    (5).使用工具Xftp 6将生成的公钥(桌面上的文件id_rsa_2048.pub)拖到/home/admin/.ssh

Hdoop完全分布式运行模式(2)----Linux

Hdoop完全分布式运行模式(2)----Linux

    (6).

[[email protected] .ssh] cat id_rsa_2048.pub >> authorized_keys---将xshell生成的公钥放入authorized_keys,该文件就是slave03该主机允许别的主机免密码访问自己存放别的主机的公钥的地方

Hdoop完全分布式运行模式(2)----Linux

[[email protected] .ssh]$ cat id_rsa_2048.pub

Hdoop完全分布式运行模式(2)----Linux

[[email protected] .ssh]$ cat authorized_keys

Hdoop完全分布式运行模式(2)----Linux---一样

 

(7).在xshell中,右击Hadoop_Slave103,点击属性

Hdoop完全分布式运行模式(2)----Linux

    (8).点击用户身份验证

Hdoop完全分布式运行模式(2)----Linux

    (9).在xshell中右击Hadoop_Slave103,点击打开,就可以免密码连接了

 

2.主机slave103免密码登录主机slave101,slave101

(1).这里还需要配置ssh文件

     [[email protected] ~]$ sudo vim /etc/ssh/sshd_config

Hdoop完全分布式运行模式(2)----Linux

Hdoop完全分布式运行模式(2)----Linux

Hdoop完全分布式运行模式(2)----Linux

(2).[[email protected] ~]$ ssh-****** -t rsa------ssh-******表示生成**,rsa:非对称算法,即生成的公钥和私钥不一样

Hdoop完全分布式运行模式(2)----Linux

(3).[[email protected] ~]$ cd .ssh

     [[email protected] .ssh]$ ssh-copy-id [email protected]即将slave103中的id_rsa.pub公钥复制到authorized_keys中,存放授权过得无密登录服务器公钥

        [[email protected] .ssh]$ ssh [email protected]成功

(4).[[email protected] .ssh]$ ssh-copy-id [email protected]将自己的公钥复制到自己的authorized中,即也可以通过ssh连接自己

(5).这里需要将slave101,slave102,slave103中的公钥分别复制到不同的主机,使得他们之间可以相互通信

注意:这里很有可能会出现slave101去ssh slave102,slave103,死活都连不上,但是slave102去ssh slave101,slave103一下子就连上了,在网上找了很久都没有找到原因,一气之下,把.ssh删了,重新来,就都可以了.

 

 

脚本--xcall---在集群的所有机器上批量执行同一条命令,比如

[[email protected] ~]$ xcall ifconfig----则会显示slave101,slave102,slave103的IP地址

创建过程

[[email protected] ~]$ cd bin 

[[email protected] bin]$ touch xcall

[[email protected] bin]$ vim xcall---加入如下内容:

#!/bin/bash

#在集群的所有机器上批量执行同一条命令

if(($#==0))

then

        echo 请输入您要操作的命令!

        exit

fi

        echo 要执行的命令是$*

#循环执行命令

for((i=101;i<=103;i++))

do

        echo-------------slave$i--------------

        ssh slave$i $*

done

[[email protected] bin]$ chmod u+x xcall

测试

[[email protected] ~]$ xcall jps

Hdoop完全分布式运行模式(2)----Linux

从图可以看到,该命令对于slave102不起作用,这是因为

[[email protected] ~]$ ssh [email protected]

[[email protected] ~]$jps

[[email protected] ~]$ ssh [email protected] jps    这两种写法执行是不同的 

①ssh 目标机器

        登录之后,执行某个命令!

        属于Login-shell,会自动读取 /etc/profile文件中定义的所有的变量!

②ssh 目标机器  命令

        属于non-login-shell

        不会读取/etc/profile

        如果在使用命令时,我们需要使用/etc/profile定义的一些变量,需要在

        目标机器的对应的用户的家目录/.bashrc中添加以下代码

        source /etc/profile

        如果不添加以上代码,在执行start-all.sh | stop-all.sh一定会报错!

 

[[email protected] ~]$ ll -al----查看是否有隐藏文件.bashrc

[[email protected] ~]$ vim .bashrc

Hdoop完全分布式运行模式(2)----Linux

测试

[[email protected] ~]$ xcall jps

Hdoop完全分布式运行模式(2)----Linux

 

群起集群

    1.配置slaves

    [[email protected] hadoop-2.7.2]$ cd etc/hadoop

    [[email protected] hadoop]$ vim slaves

    加入slave101,slave102,slave103

 

    2.启动集群

        2.1如果是第一次启动,需要格式化Namenode

        2.2启动HDFS

        因为前面已经将namenode,datanode 启动了,先关闭

        [[email protected] hadoop-2.7.2]$ xcall sbin/hadoop-daemon.sh stop datanode

        [[email protected] hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop namenode

        2.3测试

        [[email protected] hadoop-2.7.2]$ xcall jps

Hdoop完全分布式运行模式(2)----Linux

 

        2.4启动HDFS

        [[email protected] hadoop-2.7.2]$sbin/start-dfs.sh

Hdoop完全分布式运行模式(2)----Linux

        2.5测试

        [[email protected] hadoop-2.7.2]$xcall jps

Hdoop完全分布式运行模式(2)----Linux

        2.6启动Yarn----NameNode和ResourceManger如果不是同一台机器,不能在NameNode上启动 YARN,应该在ResouceManager所在的机器上启动YARN。

        [[email protected] hadoop-2.7.2]$ sbin/start-yarn.sh

        2.7测试

        [[email protected] hadoop-2.7.2]$ xcall jps

Hdoop完全分布式运行模式(2)----Linux

3.集群测试

[[email protected] haoop-2.7.2]$ mkdir wcinput

[[email protected] hadoop-2.7.2]$cd wcinput

[[email protected] wcinput]$ touch wc.input

[[email protected] wcinput]$ vim wc.input

 

[[email protected] ~]$ hadoop fs -mkdir /input--创建文件

查看http://hadoop101:50070/dfshealth.html#tab-overview

Hdoop完全分布式运行模式(2)----Linux

点击

Hdoop完全分布式运行模式(2)----LinuxHdoop完全分布式运行模式(2)----Linux

        Hdoop完全分布式运行模式(2)----Linux---创建成功

这里有一个疑问:

[[email protected] hadoop-2.7.2]$hadoop fs -mkdir input1,在/和hadoop-2.7.2上都可以创建,但都存在与/

Hdoop完全分布式运行模式(2)----Linux

[[email protected] hadoop-2.7.2]$ hadoop fs -put wcinput  /input/---将文件wcinput传入input中,点击input文件,出现下面结果,说明传入进去了

Hdoop完全分布式运行模式(2)----Linux

[[email protected] hadoop-2.7.2]$ cd share/hadoop/mapreduce

[[email protected] mapreduce]$ ll

Hdoop完全分布式运行模式(2)----Linux ----运行示例

[[email protected] mapreduce]$ hadoop jar hadoop-mapreduce-examples-2.7.2.jar wordcount     /input /wcinput/wc.input    /output                                                                                     例子                          计算词的个数的类名        数据的来源                   结果

 

Hdoop完全分布式运行模式(2)----Linux---出现了output,点击output

Hdoop完全分布式运行模式(2)----Linux----说明运行成功

xshell中查看

[[email protected] hadoop-2.7.2]$ hadoop fs -cat  /output/*

Hdoop完全分布式运行模式(2)----Linux

4.集群启动/停止方式总结

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

    1).分别启动/停止HDFS组件

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

    2).启动/停止yarn

        yarn-daemon.sh start/stop   resourcemanager/nodemanager

 

2.各个模块分开启动/停止

    1).整体启动/停止HDFS

            start-dfs.sh     /   stop-dfs.sh

    2).整体启动/停止yarn

            start-yarn.sh  / stop-yarn.sh

    3).包括HDFS和YARN的启动/停止(resourcemanager需要手动开启和停止)

            start-all.sh   /stop-all.sh

5.时间同步问题

[[email protected] ~]$ xcall date

Hdoop完全分布式运行模式(2)----Linux-----时间不同步

[[email protected] ~]$ sudo ntpdate -u ntp7.aliyun.com----ntpdate是指通过ntp(网路时钟服务),自动请求一个服务器,把这个服务器的时间当成最新的时间(ntp7.aliyun.com为阿里云服务器)

Hdoop完全分布式运行模式(2)----Linux

[[email protected] ~]$ xcall date

Hdoop完全分布式运行模式(2)----Linux---时间同步了

永久的

[[email protected] ~]$ crontab -e---点击回车,编辑

Hdoop完全分布式运行模式(2)----Linux---将这句语句写入,即1个小时就同步一次

相关文章:

  • 2021-11-19
  • 2022-01-01
  • 2021-07-27
  • 2021-04-02
  • 2021-07-11
  • 2022-12-23
猜你喜欢
  • 2022-01-01
  • 2022-01-01
  • 2022-01-01
  • 2021-05-10
  • 2022-01-01
  • 2022-01-01
  • 2022-01-01
相关资源
相似解决方案