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

相关推荐
狮歌~资深攻城狮6 小时前
HBase性能优化秘籍:让数据处理飞起来
大数据·hbase
Elastic 中国社区官方博客7 小时前
Elasticsearch Open Inference API 增加了对 Jina AI 嵌入和 Rerank 模型的支持
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索·jina
lllsure7 小时前
Linux 实用指令
linux·物联网
努力的小T8 小时前
使用 Docker 部署 Apache Spark 集群教程
linux·运维·服务器·docker·容器·spark·云计算
workflower8 小时前
Prompt Engineering的重要性
大数据·人工智能·设计模式·prompt·软件工程·需求分析·ai编程
Nerd Nirvana8 小时前
OpenSSL crt & key (生成一套用于TLS双向认证的证书密钥)
linux·ssl·shell·认证·加密·tls·oepnssl
letisgo59 小时前
记录一次部署PC端网址全过程
linux·阿里云·服务器运维
枫叶落雨2229 小时前
08-Elasticsearch
运维·jenkins
猫猫的小茶馆9 小时前
【网络编程】UDP协议
linux·服务器·网络·网络协议·ubuntu·udp
尚墨11119 小时前
linux 安装启动zookeeper全过程及遇到的坑
linux·zookeeper