完全分布式
集群分发脚本 xsync
即循环复制文件到所有节点的同步目录下,使用命令为
## 与scp相似
rsync -rvl 目录 远程目录
脚本内容如下:
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if ((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
## basename 获取相对路径或者绝对路径的文件的文件名
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
## dirname 获取路径的目录名称
## cd -P 进入到真是目录,如果是软链接则进入到软链接真实的目录下
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
## whoami 获取当前用户名称
user=`whoami`
#5 循环
for((host=113; host<116; host++)); do
echo ------------------- hadoop$host --------------
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
集群配置
部署规划
hadoop113 | hadoop114 | hadoop115 | |
---|---|---|---|
HDFS | NameNode、DataNode | DataNode | SecondaryNameNode、DataNode |
YARN | NodeManager | ResourceManger、NodeManager | NodeManager |
环境变量文件hadoop-env.sh、yarn-env.sh、mapred-env.sh等需要配置JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
core-site.xml
<!-- 指定 HDFS 中 NameNode 的地址 -->
<!-- 默认值为file:/// 为本地模式,也就是说不配置的话默认使用本地文件系统 -->
<!-- 配置了hdfs:// 之后本地模式则不能使用了 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop113:9000</value>
</property>
<!-- 指定 Hadoop 运行时产生文件的存储目录 -->
<!-- 默认存储到/tmp/hadoop-${user.name}中 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
hdfs-site.xml
<!-- 指定 HDFS 副本的数量,副本的概念是在x台服务器上存储了相同的数据,容错 -->
<!-- 伪分布式设置为1,默认为3 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定 Hadoop 辅助名称节点主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop115:50090</value>
</property>
yarn-site.xml
<!-- Reducer 获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 YARN 的 ResourceManager 的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop114</value>
</property>
mapred-site.xml(没有的话,将mapred-site.xml.template重命名即可)
<!-- 指定 MR 运行在 YARN 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
每个服务器上进行相关,可以使用xsync来进行分发。
集群启动
首次启动的时候记得去格式化NameNode,记得将相关进程以及文件夹删除。
hadoop namenode -format
为了解决一个一个节点启动导致时间的浪费,那么需要进行群起集群。
ssh无密码登录配置
免密登录原理
# 在113和114上配置,以为NameNode和ResourceManger需要用到
## 生成公钥和私钥
ssh-keygen -t rsa
## 然后直接三下回车即生成
## 分别将公钥拷贝到113、114、115上
ssh-copy-id hadoop113
ssh-copy-id hadoop114
ssh-copy-id hadoop115
## 同时需要为113配置root免密访问
群起集群
## 配置slaves
vim /opt/module/hadoop-2.7.2/etc/hadoop/slaves
## 加入所有的DataNode节点的地址以下内容,切记不要加多余的空格和换行符,否则会出现预期之外的错误
hadoop113
hadoop114
hadoop115
## 下发到各个服务器
xsync /opt/module/hadoop-2.7.2/etc/hadoop/slaves
启动集群HDFS的所有节点,注意这里必须以bd用户进行启动,如果是root用户的或其他节点会启动不成功。
sbin/start-dfs.sh
查看打印的日志可知与我们预期的HDFS的节点启动相同,也可以通过jps在各个服务器进行查看。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8jMbdPcZ-1622795604270)(/home/lxj/.config/Typora/typora-user-images/1622789272103.png)]
启动集群Yarn的所有节点,注意必须在ResourceManger所在服务器进行启动。
sbin/start-yarn.sh
文件的存储路径
上传到hdfs的文件是存在各个DataNode上的,并且可以在上面配置的存储目录中找到。对于大文件,如果它的大小大于块的大小(默认128MB),它会被分隔开存在多个块当中,这个分割就是单纯的将文件流按照大小进行分割,找到该文件的存储地址的话,将分隔开的文件按顺序拼接起来的话,能够还原该大文件。
以hadoop113为例的话,文件保存的实际路径是/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-1284647261-10.10.10.113-1622790151545/current/finalized
集群停止
## 单节点
### HDFS
hadoop-daemon.sh start/stop namenode/datanode/secondarynamenode
### YARN
yarn-daemon.sh start/stop resourcemanager/nodemanager
## 集群
### HDFS
start-dfs.sh / stop-dfs.sh
### YARN
start-yarn.sh / stop-yarn.sh
Crontab定时任务调度
## servic命令
service crond restart/start/stop
## 编辑crontab定时任务
crontab -e
## 查看crontab任务
crontab -l
## 删除当前用户所有的crontab任务
crontab -r
集群时间同步——集群一定要配置的
时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时
的同步,比如,每隔十分钟,同步一次时间。
时间服务器配置(以root用户来配置)
以hadoop113作为ntp服务器。
1、检查ntp是否安装
rpm -qa | grep ntp
## 结果入下的话,表示安装了
ntp-4.2.6p5-10.el6.centos.x86_64
fontpackages-filesystem-1.41-1.1.el6.noarch
ntpdate-4.2.6p5-10.el6.centos.x86_64
## 如果没有安装的话,使用以下命令安装
yum install ntp
2、修改ntp配置文件
vim /etc/ntp.conf
内容如下:
## 修改/新增授权 10.10.10.1-10.10.10.255 网段上的所有机器可以从这台机器上查询和同步时间
restrict 10.10.10.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 文件
## 增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
4、重启ntpd服务
service ntpd restart
5、设置开机自启动
chkconfig ntpd on
其他机器配置(以root用户来配置)
设置定时同步任务
## crontab定时任务调度
crontab -e
## 内容如下,每10分钟向hadoop113同步一次时间
*/10 * * * * /usr/sbin/ntpdate hadoop113
然后测试一下,测试方法可以是修改服务器的时间,然后等待查看时间是否同步成功了