Linux云计算 |【第五阶段】ARCHITECTURE-DAY4

主要内容:

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:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关笔记、视频,可私信小安,请不要害羞和回避,可以向他人请教,花点时间直到你真正的理解。

相关推荐
饮啦冰美式13 分钟前
22.04Ubuntu---ROS2使用rclcpp编写节点
linux·运维·ubuntu
wowocpp14 分钟前
ubuntu 22.04 server 安装 和 初始化 LTS
linux·运维·ubuntu
Huaqiwill15 分钟前
Ubuntun搭建并行计算环境
linux·云计算
wclass-zhengge18 分钟前
Netty篇(入门编程)
java·linux·服务器
Lign1731419 分钟前
ubuntu unrar解压 中文文件名异常问题解决
linux·运维·ubuntu
vip4511 小时前
Linux 经典面试八股文
linux
大霞上仙1 小时前
Ubuntu系统电脑没有WiFi适配器
linux·运维·电脑
Karoku0662 小时前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix
为什么这亚子2 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
拓端研究室TRL2 小时前
【梯度提升专题】XGBoost、Adaboost、CatBoost预测合集:抗乳腺癌药物优化、信贷风控、比特币应用|附数据代码...
大数据