主要内容:
HDFS文件系统的使用,调用Hadoop集群分析数据、Hadoop集群的维护、NFS网络配置管理
一、HDFS文件系统管理
1)文件系统管理方式:
- ① WEB页面(能查看、能读取、不能写入)
- ② 命令行(能查看、能读取、能写入)
格式:/usr/local/hadoop/bin/hadoop fs -命令
bash
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -help
HDFS管理命令示例:
① 创建文件夹(-mkdir)
bash
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -mkdir /input
② 创建文件(-touchz)
bash
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -touchz /input/tfile
③ 查看文件和目录(-ls)
如果访问路径不指定前缀,默认读取core-site.xml核心配置文件的fs.defaultFS参数
bash
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -ls hdfs://hadoop1:9000/
Found 1 items
drwxr-xr-x - root supergroup 0 2021-07-13 11:14 hdfs://hadoop1:9000/input
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -ls /
Found 1 items
drwxr-xr-x - root supergroup 0 2021-07-13 11:14 /input
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -ls hdfs://hadoop1:9000/input
Found 1 items
-rw-r--r-- 2 root supergroup 0 2021-07-13 11:14 hdfs://hadoop1:9000/input/tfile
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -ls /input
Found 1 items
-rw-r--r-- 2 root supergroup 0 2021-07-13 11:14 /input/tfile
访问本地文件系统请使用 file://
bash
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -ls file:///
④ 上传文件(-put)
bash
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -put /usr/local/hadoop/*.txt /input/
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -ls /input
Found 4 items
-rw-r--r-- 2 root supergroup 86424 2021-07-13 11:19 /input/LICENSE.txt
-rw-r--r-- 2 root supergroup 14978 2021-07-13 11:19 /input/NOTICE.txt
-rw-r--r-- 2 root supergroup 1366 2021-07-13 11:19 /input/README.txt
-rw-r--r-- 2 root supergroup 0 2021-07-13 11:14 /input/tfile
⑤ 下载文件(-get)
bash
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -get /input/tfile /tmp/tfile
[root@hadoop1 ~]# ls /tmp/ | grep tfile
tfile
⑥ 删除文件(-rm)
bash
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -rm /input/tfile
21/07/13 11:22:30 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes.
Deleted /input/tfile
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -ls /input
Found 3 items
-rw-r--r-- 2 root supergroup 86424 2021-07-13 11:19 /input/LICENSE.txt
-rw-r--r-- 2 root supergroup 14978 2021-07-13 11:19 /input/NOTICE.txt
-rw-r--r-- 2 root supergroup 1366 2021-07-13 11:19 /input/README.txt
⑦ 删除文件夹(-rmdir)
删除文件夹时,需提前将目录内的所有文件清空,否则无法删除
bash
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -rm /input/*
21/07/13 11:25:04 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes.
Deleted /input/LICENSE.txt
21/07/13 11:25:04 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes.
Deleted /input/NOTICE.txt
21/07/13 11:25:04 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes.
Deleted /input/README.txt
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -rmdir /input/
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -ls /
使用集群分析数据示例:
① 重新初始化集群
警告:该方法会丢失所有数据
-
- 停止集群:/usr/local/hadoop/sbin/stop-all.sh
-
- 删除所有节点的dfs目录结构:/var/hadoop/*
-
- 在NameNode上重新格式化:/usr/local/hadoop/bin/hdfs namenode -format
-
- 启动集群:/usr/local/hadoop/sbin/start-all.sh
bash
[root@hadoop1 ~]# /usr/local/hadoop/sbin/stop-all.sh
[root@hadoop1 ~]# for i in hadoop1 node-{0001..0003};do
ssh ${i} 'rm -rf /var/hadoop/*'
done
[root@hadoop1 ~]# /usr/local/hadoop/bin/hdfs namenode -format
[root@hadoop1 ~]# /usr/local/hadoop/sbin/start-all.sh
② 创建数据分析存储目录,并上传文件
bash
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -mkdir /input
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -put /usr/local/hadoop/*.txt /input
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -ls /input
③ 分析上传的文件,分析热点词汇
bash
[root@hadoop1 ~]# cd /usr/local/hadoop/
[root@hadoop1 hadoop]# ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /input /output
④ 查看结果
bash
[root@hadoop1 hadoop]# /usr/local/hadoop/bin/hadoop fs -cat /output/*
二、节点管理
1)增加修复节点
- 新增DateNode节点流程:
- ① 启动一个新的主机,设置SSH免密登录
- ② 在所有节点修改/etc/hosts,增加新节点的主机信息
- ③ 安装Java运行环境(java-1.8.0-openjdk-devel)
- ④ 拷贝NameNodede的/usr/local/hadoop到新节点
- ⑤ 同步配置文件到所有主机
补充:通过新增节点方式实现修复节点
- ① 修复节点比较简单,步骤和新增节点一致;(新节点的IP和主机名需要与损坏节点一致)
- ② 如果旧节点数据丢失,新节点可以自动从其它集群节点的副本恢复数据;
- ③ 新节点上线以后会自动恢复数据,如果数据量非常大,需要等待一段时间;
新增DateNode节点示例:
步骤1:购买1台云主机
|---------|--------------|----------|
| 主机名称 | IP地址 | 相关配置 |
| newnode | 192.168.1.54 | 最低配置2核4G |
步骤2:新节点环境准备-1(hadoop1操作)
① 配置SSH免密登录
bash
[root@hadoop1 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.1.54
② 配置主机名解析(所有节点修改/etc/hosts,增加新节点的主机信息)
bash
[root@hadoop1 ~]# vim /etc/hosts
192.168.1.50 hadoop1
192.168.1.51 node-0001
192.168.1.52 node-0002
192.168.1.53 node-0003
192.168.1.54 newnode //添加newnode
[root@hadoop1 ~]# for i in node-{0001..0003} newnode;do
> rsync -av /etc/hosts ${i}:/etc/
> done
③ 同步NameNode的/usr/local/hadoop配置目录到新节点
bash
[root@hadoop1 ~]# rsync -aXSH /usr/local/hadoop newnode:/usr/local/
步骤3:新节点环境准备-2(newnode操作)
① 安装JAVA运行环境
bash
[root@newnode ~]# yum install -y java-1.8.0-openjdk-devel
② 新节点上手动单独启动DateNode
bash
[root@newnode ~]# /usr/local/hadoop/sbin/hadoop-daemon.sh start datanode
补充:单独启动新DateNode节点,可以通过执行hadoop-daemon.sh start datanode,或者可以写入slaves配置文件,使用start-dfs.sh启动
③ 设置最大同步带宽(防止突然性的大规模访问,给主机造成分布式拒绝同步攻击导致宕机);由于新增的节点为空节点,为了让HDFS集群节点存储均匀,需平衡数据
bash
[root@newnode ~]# /usr/local/hadoop/bin/hdfs dfsadmin -setBalancerBandwidth 500000000
Balancer bandwidth is set to 500000000
[root@newnode ~]# /usr/local/hadoop/sbin/start-balancer.sh //启动平衡数据程序
④ 新节点启动NodeManager
由于NM不负责保存数据,所以增加节点相对简单,环境配置与DateNode一致;
bash
[root@newnode ~]# /usr/local/hadoop/sbin/yarn-daemon.sh start nodemanager
⑤ 验证新节点的角色
bash
[root@newnode ~]# jps
步骤4: 验证集群(hadoop1操作)
bash
[root@hadoop1 ~]# /usr/local/hadoop/bin/hdfs dfsadmin -report //HDFS集群信息
bash
[root@hadoop1 ~]# /usr/local/hadoop/bin/yarn node -list //YARN集群信息
2)删除修复节点
- 删除DataNode节点流程:
- ① 由于集群NodeName存在数据,直接删除会导致HDFS集群节点奔溃及数据丢失,首先需要进行故障节点的迁移数据,在节点下线时才不会影响集群运行;
- ② 当节点的数据迁移完成,即可删除(下线)节点
- ③ 删除节点之后,节点信息不会立即消失,需等待一段时间才会移除;
补充:在Hadoop2.x中YARN节点管理非常简单,NodeManage只负责计算,不保存数据,直接删除即可;
删除DateNode节点示例:
步骤1:模拟上传测试压缩包
bash
[root@hadoop1 ~]# tar -czf test.tar.gz hadoop-2.7.7.tar.gz
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -put test.tar.gz /input
[root@hadoop1 ~]# /usr/local/hadoop/bin/hadoop fs -ls /input
bash
[root@hadoop1 ~]# /usr/local/hadoop/bin/hdfs dfsadmin -report //HDFS集群信息
Name: 192.168.1.51:50010 (node-0001)
DFS Used: 220584781 (210.37 MB) //HDFS占用的磁盘空间
Name: 192.168.1.52:50010 (node-0002)
DFS Used: 220552013 (210.33 MB)
Name: 192.168.1.53:50010 (node-0003)
DFS Used: 258048 (252 KB)
Name: 192.168.1.54:50010 (newnode)
DFS Used: 36864 (36 KB)
步骤2:删除节点
① 配置HDFS配置文件(hdfs-site.xml),数据迁移(hadoop1操作,无需同步)
bash
[root@hadoop1 ~]# vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
<property>
<name>dfs.hosts.exclude</name>
<value>/usr/local/hadoop/etc/hadoop/exclude</value> //移除节点列表文件
</property>
② 编写移除节点列表文件
bash
[root@hadoop1 ~]# echo newnode > /usr/local/hadoop/etc/hadoop/exclude
③ 迁移数据
bash
[root@hadoop1 ~]# /usr/local/hadoop/bin/hdfs dfsadmin -refreshNodes
④ 查看HDFS集群DataNode节点的状态
bash
[root@hadoop1 ~]# /usr/local/hadoop/bin/hdfs dfsadmin -report
Decommission Status三种状态
- Normal:正常状态
- Decommissioned in progress:数据正在迁移
- Decommissioned:数据迁移完成
注意:仅当节点状态为 Decommissioned时才能stop下线
⑤ 删除Datanode和NodeManager节点(newnode操作)
bash
[root@newnode ~]# /usr/local/hadoop/sbin/hadoop-daemon.sh stop datanode
stopping datanode
[root@newnode ~]# /usr/local/hadoop/sbin/yarn-daemon.sh stop nodemanager
stopping nodemanager
⑥ 等待一段时间,查看集群状态
bash
[root@hadoop1 ~]# /usr/local/hadoop/bin/hdfs dfsadmin -report
bash
[root@hadoop1 ~]# /usr/local/hadoop/bin/yarn node -list
补充:在删除节点后,查看集群状态依旧还有该节点的信息,因为集群节点认为损坏节点失联,并不会将其立即移除,需要等待一段周期才会移除;
三、NFS网关概述
1)NFS网关的用途
相当于代理的作用,非网络文件系统
-
- 用户可以通过操作系统兼容的本地NFSv3客户端来浏览HDFS文件系统;
-
- 用户可以通过挂载点直接流化数据;
-
- 允许HDFS作为客户端文件系统的一部分被挂载;
-
- 支持文件附加,但是不支持随机写(Nolock)
-
- NFS网关目前只支持NFSv3和TCP协议(version=3,protocol=tcp)
2)代理用户
-
- 代理用户是NFS网关访问集群的授权用户,需要在NameNode和NFSGW上添加代理用户,代理用户的UID、GID、用户名必须完全相同;
-
- 如果因特殊原因,用户UID、GID、用户名不能保持一致,需要配置nfs.map的静态映射关系;
例如:
注意事项:
NFS网关架构图:
网关代理用户授权示例:
步骤1:购买1台云主机
|-------|--------------|----------|
| 主机名称 | IP地址 | 相关配置 |
| nfsgw | 192.168.1.55 | 最低配置2核4G |
步骤2:添加代理用户nfsuser(hadoop1、nfsgw操作)
bash
[root@hadoop1 ~]# groupadd -g 800 nfsuser
[root@hadoop1 ~]# useradd -g 800 -u 800 -r -d /var/hadoop nfsuser
[root@hadoop1 ~]# id nfsuser
uid=800(nfsuser) gid=800(nfsuser) groups=800(nfsuser)
[root@nfsgw ~]# groupadd -g 800 nfsuser
[root@nfsgw ~]# useradd -g 800 -u 800 -r -d /var/hadoop nfsuser
[root@nfsgw ~]# id nfsuser
uid=800(nfsuser) gid=800(nfsuser) groups=800(nfsuser)
步骤3:HDFS集群授权代理用户(hadoop1操作)
① 配置核心配置文件(core-site.xml),授权代理用户
bash
[root@hadoop1 ~]# vim /usr/local/hadoop/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop</value>
</property>
<property>
<name>hadoop.proxyuser.nfsuser.groups</name> //挂载点组授权
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.nfsuser.hosts</name> //挂载点主机授权
<value>*</value>
</property>
</configuration>
② 停止集群所有服务
bash
[root@hadoop1 ~]# /usr/local/hadoop/sbin/stop-all.sh
③ 同步NameNode的/usr/local/hadoop/配置文件到所有节点
bash
[root@hadoop1 ~]# for i in node-{0001..0003};do
> rsync -avXSH /usr/local/hadoop/ ${i}:/usr/local/hadoop/
> done
④ 启动HDFS服务
bash
[root@hadoop1 ~]# /usr/local/hadoop/sbin/start-dfs.sh
补充:配置NFS网关,可不用启动NodeManager计算节点
⑤ 验证角色
bash
[root@hadoop1 ~]# jps
⑥ 验证HDFS集群
bash
[root@hadoop1 ~]# /usr/local/hadoop/bin/hdfs dfsadmin -report
3)NFSGW网关服务
-
- portmap服务(与系统rpcbind冲突)
-
- nfs3服务(与系统nfs冲突)
补充:nfsgw网关服务是Hadoop定制服务,与系统的NFS服务会有冲突,需卸载;
4)HDFS客户数授权NFSGW服务
① nfs.exports授权
-
- nfs.exports.allowed.hosts
-
- 默认情况下,export可以被任何客户端挂载,为了更好的控制访问,可以设置属性;值和字符串对应机器名和访问策略,通过空格来分割,机器名的格式可以是单一的主机、Java的正则表达式或者IPv4地址;使用rw或ro可以指定导出目录的读写或只读权限;默认设置为只读权限。
② nfs.dump配置
-
- nfs.dump.dir
-
- 用户需要更新文件转储目录参数,NFS客户端经常重新安排写操作,顺序的写操作会随机到达NFS网关,这个目录常用于临时存储无序的写操作,对于每个文件,无序的写操作会在他们积累在内存中超过一定阈值(如,1M)时被转储,需要确保有足够的空间的目录,NFS网关在设置该属性后需要重启;
步骤4:搭建NFS网关服务(nfsgw操作)
① 卸载nfs-utils、rpcbind服务
bash
[root@nfsgw ~]# yum remove -y rpcbind nfs-utils
② 配置主机名解析
NFS网关具有双重角色,即是NFS服务器,又是HDFS客户端程序,所以NFS网关必须能访问到集群中的所有节点;
bash
[root@nfsgw ~]# vim /etc/hosts
192.168.1.50 hadoop1
192.168.1.51 node-0001
192.168.1.52 node-0002
192.168.1.53 node-0003
192.168.1.55 nfsgw
③ 安装JAVA运行环境
bash
[root@nfsgw ~]# yum install -y java-1.8.0-openjdk-devel
④ 同步NameNode的hadoop安装目录到nfsgw主机(配置HDFS客户端)
bash
[root@nfsgw ~]# rsync -aXSH --delete hadoop1:/usr/local/hadoop /usr/local/
[root@nfsgw ~]# ls /usr/local/hadoop/
⑤ 修改HDFS配置文件(hdfs-site.xml)
bash
[root@nfsgw ~]# vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop1:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop1:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.hosts.exclude</name>
<value>/usr/local/hadoop/etc/hadoop/exclude</value>
</property>
<property>
<name>nfs.exports.allowed.hosts</name> //访问策略及读写权限
<value>* rw</value> //所有节点可读写
</property>
<property>
<name>nfs.dump.dir</name> //文件转储目录
<value>/var/nfstmp</value> //存放临时无序写操作目录
</property>
</configuration>
⑥ 创建转储目录(细节)
bash
[root@nfsgw ~]# mkdir /var/nfstmp
⑦ 为代理用户授权(细节)
bash
[root@nfsgw ~]# chown nfsuser.nfsuser /var/nfstmp
⑧ 在日志文件夹为代理用户授权(细节)
bash
[root@nfsgw ~]# rm -rf /usr/local/hadoop/logs/*
[root@nfsgw ~]# setfacl -m user:nfsuser:rwx /usr/local/hadoop/logs
[root@nfsgw ~]# getfacl /usr/local/hadoop/logs
5)注意事项:
① 启动Portmap服务需使用root用户(portmap端口号111小于1024)
② 启动nfs3服务需要使用core-site里面设置的代理用户
③ 必须为代理用户授权:
-
- /var/nfstmp不授权,上传文件会出错;
-
- /usr/local/hadoop/logs不授权,看不到报错日志
④ 必须先启动portmap之后再启动nfs3服务,如果portmp重启了,在重启后nfs3也必须重启;
步骤5:启动NFS网关服务
① 启动portmap服务(检查系统rpcbind服务确保已停止卸载)
bash
[root@nfsgw ~]# cd /usr/local/hadoop/
[root@nfsgw hadoop]# ./sbin/hadoop-daemon.sh --script ./bin/hdfs start portmap
bash
[root@nfsgw hadoop]# jps // 验证角色
② 启动nfs3服务
bash
[root@nfsgw hadoop]# rm -rf /tmp/.hdfs-nfs/
[root@nfsgw hadoop]# sudo -u nfsuser ./sbin/hadoop-daemon.sh --script ./bin/hdfs start nfs3 //使用代理用户启动nfs3服务
bash
[root@nfsgw hadoop]# sudo -u nfsuser jps //验证角色
6)挂载NFS网关相关选项
-
- vers=3 //目前NFS只能使用v3版本
-
- proto=tcp //仅使用TCP作为传输协议
-
- nolock //不支持随机写NLM
-
- noatime //禁用access time的时间更新
-
- noacl //禁用acl扩展权限
-
- sync //同步写入,避免重排序写入
步骤6:验证挂载NFS网关(newnode操作)
① 安装依赖软件包
bash
[root@newnode ~]# yum install -y nfs-utils
[root@newnode ~]# showmount -e 192.168.1.55
Export list for 192.168.1.55:
/ *
② 挂载HDFS目录到本地/mnt文件夹
bash
[root@newnode ~]# mount -t nfs -o vers=3,proto=tcp,nolock,noacl,noatime,sync 192.168.1.55:/ /mnt/
[root@newnode ~]# df -h
小结:
本篇章节为**【第五阶段】ARCHITECTURE-DAY4**的学习笔记,这篇笔记可以初步了解 HDFS文件系统的使用,调用Hadoop集群分析数据、Hadoop集群的维护、NFS网络配置管理。
Tip:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关笔记、视频,可私信小安,请不要害羞和回避,可以向他人请教,花点时间直到你真正的理解。