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
声明:本文内容是学习阿里云社区下大数据学习路线尚硅谷网课总结而来