Hadoop入门三:完全分布式运行模式

Hadoop入门三:完全分布式运行模式,第1张

Hadoop入门三:完全分布式运行模式 1、scp、rsync以及集群分发脚本xsync

scp案例(拷贝工具)

将当前主机一个文件完全复制到另一台主机上

scp -r /etc/profile root@主机名或ip:/etc/profile

将一个主机上的文件完全复制到当前主机

scp -r root@主机名或ip:/etc/profile /etc/profile

将一个主机上的文件完全复制到另一个主机上

scp -r root@主机名或ip:/etc/profile root@主机名或ip:/etc/profile

rsync案例(同步工具)

这个命令主要是同步文件中不同的内容,和scp的区别是复制东西比scp快,只对差异文件做更新。

rsync -rvl /etc/profile root@主机名或ip:/etc/profile

集群分发脚本

#!/bin/bash 
#1 获取输入参数个数,如果没有参数,直接退出 
pcount=$# 
if((pcount==0)); then 
echo no args; 
exit; 
fi 

#2 获取文件名称 
p1= 
fname=`basename $p1` 
echo fname=$fname 

#3 获取上级目录到绝对路径 
pdir=`cd -P $(dirname $p1); pwd` 
echo pdir=$pdir 

#4 获取当前用户名称 
user=`whoami` 

#5 循环 
for((host=3; host<5; host++)); do 
    echo ----------------------- hadoop$host --------- 
    rsync -rvl $pdir/$fname $user@hadoop$host:$pdir 
done
2、集群配置

集群部署规划

002

003

004

HDFS

NameNode

DataNode

DataNode

SecondaryNameNode

DataNode

YARN

NodeManager

ResourceManager

NodeManager

NodeManager

配置集群

核心配置

配置core-site.xml



    
        fs.defaultFS
        hdfs://002:9000
    


    
        hadoop.tmp.dir
        /opt/software/hadoop-3.3.1/data/tmp
    

HDFS配置

配置hadoop-env.sh

export JAVA_HOME= 

配置hdfs-site.xml



    
        dfs.replication
        3
    

    
        dfs.namenode.secondary.http-address
        004:9868
    

YARN配置

配置yarn-env.sh

export JAVA_HOME=

配置yarn-site.xml





    
        yarn.nodemanager.aux-services
        mapreduce_shuffle
    


    
        yarn.resourcemanager.hostname
        003
    

    
        yarn.log-aggregation-enable
        true
    


    
        yarn.log-aggregation.retain-seconds
        604800
    

MapReduce配置

配置mapred-env.sh

export JAVA_HOME=

配置mapred-site.xml


    
        mapreduce.framework.name
        yarn
    
    
        yarn.app.mapreduce.am.env
        HADOOP_MAPRED_HOME=${HADOOP_HOME}
    
    
        mapreduce.map.env
        HADOOP_MAPRED_HOME=${HADOOP_HOME}
    
    
        mapreduce.reduce.env
        HADOOP_MAPRED_HOME=${HADOOP_HOME}
    

    
    
        mapreduce.jobhistory.address
        LOONG002:10020
    

    
    
        mapreduce.jobhistory.webapp.address
        LOONG002:19888
    

然后就是给所有节点同步配置

3、集群单节点启动

启动之前先要删除data和logs文件夹,然后格式化

hdfs namenode -format

然后依次启动002的nameNode和dataNode;003的dataNode;004的dataNode

打开可视化页面查看效果,正常就是畅通无阻。

问题是以后面对的节点越来越多,成百上千甚至更多,不可能一个一个启动的啊,太费劲了

4、SSH无密登录配置

基础语法:

ssh 另一台电脑的ip

但是这样需要输密码,下面来看一下免密登录的方法

免密登录:

免密登录原理:

 生成公钥和私钥:

 找到.ssh文件下,输入命令(后按三次回车),得到公钥和私钥

ssh-keygen -t rsa

如图

把公钥拷贝到002和003和004上

ssh-copy-id 主机名

如图,可以看到003上已经有002生产的公钥了

注意:

这里003上也要和002一样的步骤生成密钥以及拷贝到各个节点,这些 *** 作一遍,因为002上有NameNode,003上有ResourceManager

5、群起集群 启动HDFS

给文件夹/opt/software/hadoop-3.3.1/etc/hadoop下修改workers文件,将所有DataNode节点的主机名写好

注意:务必严谨,不能有空格和回车

002节点下输入群起命令就OK了

sbin/start-dfs.sh

出现报错...

设置环境变量在/etc/profile导入如下配置

export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
启动YARN

003节点下输入群起命令就OK了

start-yarn.sh

集群基本测试

上传文件

hdfs dfs -put wcinput/wc.input /

网页上能看到上传的文件

而在linux上文件的路径是

/opt/software/hadoop-3.3.1/data/tmp/dfs/data/current/BP-1068672847-172.20.5.228-1640602419075/current/finalized/subdir0/subdir0

集群启动/停止方式总结

单节点

hdfs --daemon start datanode或namenode或secondarynamenode

yarn --daemon start resourcemanager或nodemanager

集群

start-dfs.sh 
stop-dfs.sh

start-yarn.sh 
stop-yarn.sh

注意:

NameNode和ResourceManager不在同一个机器时,不能在NameNode所在的节点上启动Yarn,应该在ResourceManager上启动

6、系统定时任务

基本语法:

启动

service crond restart

crontab [选项]

crontab -e //编辑

crontab -l //查看任务

crontab -r //删除当前所有任务

crontab -e进入编辑界面:

* * * * * 执行任务含义

项目

含义

范围

第一个

分钟

0-59

第二个

小时

0-23

第三个

1-31

第四个

1-12

第五个

星期

0-7(0和7都是星期日)

特殊符号:

特殊符号

含义

*

代表任何时间。比如第一个*就代表每分钟执行一次

代表不连续的时间。比如“0 8,12,16 * * * ”意思是8点12点16点分别执行一次

-

代表连续的时间范围。比如“0 5 * * 1-6”代表周一到周六每天凌晨5点执行

*/n

代表每隔多久执行一次。比如“*/10 * * * *”,代表每隔10十分钟执行一次

练习:特定时间执行命令

22:45执行命令

45 22 * * *

每周一17:00分执行

0 17 * * 1

每月1号和15号凌晨5点执行

0 5 1,15 * *

每月周一到周五凌晨4:40

40 4 * * 1-5

每天凌晨4点,每隔10分钟执行

*/10 4 * * *

每月1号和15号,每周1的0点0分都会执行。

0 0 1,15 * 1

实例:每分钟往特定文件中写入一行字

crontab -e

内容

*/1 * * * * /bin/echo "love" >> /opt/software/abc.txt
7、集群时间同步

(我用的云服务器,就不做相关 *** 作了)

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

1.时间服务器配置(root用户) (1)检查ntp是否安装
rpm -qa | grep ntp
(2)修改ntp配置文件
vim /etc/ntp.conf

第一:授权相应网段机器能够在这台机器上查询和同步时间

如以下语句

restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

第二:集群在局域网中,不使用其他互联网上的时间

如以下语句全部注释掉
#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 127.127.1.0 fudge 127.127.1.0 stratum 10
(3)修改/etc/sysconfig/ntpd 文件
vim /etc/ntp.conf

增加以下内容(让硬件时间与系统时间一起同步)

SYNC_HWCLOCK=yes
(4)重新启动ntpd服务
service ntpd status 查看状态

service ntpd start 启动命令
(5)设置ntpd服务开机启动
chkconfig ntpd on
2.其他机器配置(root用户)

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

crontab -e

编写如下:

*/10 * * * * /usr/sbin/ntpdate 002

(2)修改任意机器时间

date -s "2021-12-18 11:11:11"

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

date

声明:本文内容是学习阿里云社区下大数据学习路线尚硅谷网课总结而来 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5681165.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存