前言
1 | 1.准备3台服务器 |
集群分配脚本配置
虚拟机/服务器配置ip,hosts,hostname
1 | vim /etc/hosts |
编写集群分发脚本xsync
scp(secure copy)安全拷贝
实现数据库之间的数据拷贝
1 | scp –r(递归) 数据源路径 目的地路径 |
rsync 远程同步工具
1 | rsync主要用于备份和镜像.具有速度快、避免复制相同内容和支持符号链接的优点。 |
xsync集群分发脚本
要求:输入xsync +要同步的文件名 即可同步
#!/bin/bash –开头指定文件运行–
1 | #1 获取传入参数,如果没有就直接结束脚本 |
所以之后只需要在100上修改配置分发同步到各个节点即可
集群的配置
集群的部署规划
1 | h100 h101 h102 |
要求
- 1.namenode和secondarynamenode内存规划1:1
所以两个节点不能部署在一台服务器上,那样相当于内存折半性能降低。 - 2.resourceManager是整个集群资源的老大很耗内存,所以需要避开namenode和secondarynamenode节点服务器
配置集群
1.配置core-site.xml
1
2
3
4
5
6
7
8
9
10
11
12vim core-site.xml
1.指定namenode的地址
2.指定hadoop运行产生临时文件存储目录
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-3.3.0/data</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://h100:9000</value>
</property>2.HDFS配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
161.修改环境变量导入java路径
2.修改节点个数
3.修改secondarynamenode辅助名称节点
vim hadoop-env.sh
EXPORT JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-1.el7_9.x86_64/jre/
vim hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>3</value>
<property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>h102:50090</value>
<property>3.配置yarn
1
2
3
4
5
6
71.配置java_home
vim yarn-env.sh
2.配置指定resourcemanager的运行地址 nodemanager
<property>
<name>yarn.resourcemanager.hostname</name>
<value>h101</value>
</property>4.配置mapreduce
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
361.配置java_home
vim mapred-env.sh
2.指定mr运行在yarn上
vim mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/opt/hadoop-3.3.0</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/opt/hadoop-3.3.0</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/opt/hadoop-3.3.0</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>h101:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>h101:19888</value>
</property>
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64/
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64/5.分发配置好的集群文件
1
xsync /opt/hadoop-3.3.0/
集群的单点启动
1 | 1.删除每台服务器对应的data logs |
群起集群
配置ssh无密码连接
1 | 为什么需要ssh无密登录? |
配置slaves 3.0以上为workers
1 | vim etc/hadoop/workers |
执行群起脚本
1 | sbin/start-dfs.sh |
执行群起yarn脚本
注意:yarn群起脚本必须在配置了resourcemanager的那台服务器上执行,否则会报错。
1 | 进入h101 |
至此集群群起完成
群起集群测试
集群的基本测试
- 1.上传小文件和大文件因为每个块的大小为128M所以大文件会分块储存,n=size/128 – block0 – blockn
1
2bin/hdfs dfs –put wcinput/wc.input /
bin/hdfs dfs –put /opt/hadoop-3.3.0.tar.gz /
并且通过replicaiton设置的副本数将数据分别存储到了3台服务器上。 - 注意:我们所传输到hdfs /的路径所存放的数据放在服务器的哪里?
- 放在我们指定的core-site.xml中的hadoop.tmp.dir,当然也可以单独指定hdfs.dfs.dir
所以数据放在/opt/hadoop-3.3.0/data/tmp/dfs/data/current/BP-63934372-10.167.218.160-1606840182184
/current/finalized/subdir0/subdir0
- 放在我们指定的core-site.xml中的hadoop.tmp.dir,当然也可以单独指定hdfs.dfs.dir
1 | touch tmp.txt |
集群启动/停止方式总结
单节点启动
1 | 在每个节点上遍历对应的命令 |
各个按模块整体分开启动
1 | 首要是配置ssh免密登录 |
当然还有全部启动(但不建议使用)
1 | sbin/start-all.sh /stop-all.sh |
集群时间同步
使用crontab定时任务,到了哪个时间起哪个进程哪个任务
crond服务管理
1 | serveice crond restart |
crontab定时任务设置
基础命令
crontab –e 编辑crontab定时任务
crontab –l 查询crontab任务
crontab –r 删除当前用户所有的crontab任务
参数说明
1.* * * * * 执行任务
1
2
3
4
5第一个* 表示一小时当中的第几分钟 0-59
第二个* 一天当中的第几个小时
第三个* 一个月当中的第几天
第四个* 一年当中的第几个月
第五个* 一个星期的星期几2.特殊符号
1
2
3
4
5
6* 代表任何时间,比如第一个“*”就代表一个小时中每分钟都执行一次
,代表不连续的时间,比如“0 8,12,16 * * *”,就代表在每天的8点0分,12点0分,16点0分都执行一次命令
- 代表连续的时间范围,比如“0 5 * * 1-6”代表在周一到周六的凌晨5点0分执行命令
*/n 代表每隔多久执行一次,比如“*/10 * * * *”代表每隔10分钟就执行一遍该命令
如果是过于复杂的命令就换用uz框架实现3.添加一个简单命令
1
*/1 * * * * /bin/echo “11” >> /root/bailongma.txt
集群时间同步
找一台服务器作为时间服务器,所有机器每隔固定时间进行定时同步。
1.检查时间服务器是否安装ntp
1
2
3
4
5
6net time protocol
rpm –qa|grep ntp
能查到这仨个就ok:
fontpackages-filesystem-1.44-8.el7.noarch
ntp-4.2.6p5-25.el7.centos.x86_64
ntpdate-4.2.6p5-25.el7.centos.x86_642.修改ntp时间服务器配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15vim /etc/ntp.conf
1.授权网段10.167.218.0-10.167.218.255可以从这台机器上查询和同步时间
找到这个网段限制:
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
2.(集群在局域网中不使用其他互联网上的时间)
注释掉这个
# 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
3.当节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步。
127.127.1.0
fudge 127.127.1.0 stratum 10(时间同步精度)3.修改/etc/sysconfig/ntpd文件
让硬件时间与系统时间一起同步1
2
3vim /etc/sysconfig/ntpd
添加
SYNC_HWCLOCK=yes4.重启ntp服务设置ntp服务开机启动
1
2
3
4
5service ntpd status
systemctl start ntpd.service
开机启动
systemctl enable ntpd.service(chkconfig ntpd on(centos7以下))5.其他服务器添加crontab –e加上每十分钟同步一次时间
先执行nptdate h100 同步一次时间1
*/10 * * * * /usr/sbin/ntpdate h100(时间服务器ip/域名)