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=$1 
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

<configuration>
<!--指定HDFS中NameNode的地址-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://002:9000</value>
    </property>

<!--指定Hadoop运行时产生文件的存储目录-->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/software/hadoop-3.3.1/data/tmp</value>
    </property>

</configuration>

HDFS配置

配置hadoop-env.sh

export JAVA_HOME= 

配置hdfs-site.xml

<configuration>
<!--指定HDFS副本数量-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>

    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>004:9868</value>
    </property>
</configuration>

YARN配置

配置yarn-env.sh

export JAVA_HOME=

配置yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->
<!-- Reducer获取数据的方式 -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

<!-- 指定YARN的ResourceManager的地址 -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>003</value>
    </property>

    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>

<!-- 日志保留时间设置7天 -->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>

</configuration>

MapReduce配置

配置mapred-env.sh

export JAVA_HOME=

配置mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>

    <!-- 历史服务器端地址 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>LOONG002:10020</value>
    </property>

    <!-- 历史服务器web端地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>LOONG002:19888</value>
    </property>
</configuration>

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

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿星_Alex

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值