文章目录

  • HDFS 功能和特性
  • 1.Snapshot快照
  • 1.概念
  • 2.快照功能开启
  • 3.快照功能禁用
  • 4.快照命令
  • 2.权限管理(认证,授权,审计)
  • 1.概念
  • 2.HDFS UGO权限管理
  • 3.umask权限掩码,文件和目录的默认权限
  • 4.权限相关命令
  • 5.Sticky bit(粘滞位)
  • 6.HDFS用户身份认证
  • simple认证
  • kerberos认证
  • 7.HDFS Group Mapping组映射
  • 8.HDFS ACL权限管理
  • 9.HDFS Proxy user 代理用户
  • 3.HDFS 透明加密
  • 1.加密层级
  • 2.HDFS 透明加密
  • 3.加密区域
  • 4.密钥
  • 5.加密,解密
  • 6.KMS(密钥管理服务)
  • 4.HDFS Trash垃圾桶
  • 1.概述
  • 2.Trash Checkpoint
  • 3.Trash功能开启
  • 4.Trash功能使用
  • 1.删除
  • 2.恢复文件
  • 3.清空Trash
  • 5.HDFS Shell CLI
  • 1.说明
  • 2.hadoop dfs ,hdfs dfs,hadoop fs区别
  • 3.操作
  • 6.HDFS文件存储格式
  • 1.Text File
  • 2.Sequence File
  • 3.Avro File
  • 4.Apache Arrow
  • 7.HDFS 异构存储和存储策略
  • 1.HDFS异构存储类型
  • 2.存储策略
  • 8.数据迁移
  • 1.数据迁移使用场景
  • 2.数据迁移要素考量
  • 3.HDFS 分布式拷贝工具 :DistCp
  • 9.HDFS 集群黑,白名单机制
  • 1.白名单
  • 2.黑名单
  • 10.安全模式
  • 1.概述
  • 2.安全模式自动进入离开
  • 自动进入:
  • 自动离开:
  • 3.安全模式手动进入离开
  • 手动获取安全模式状态信息
  • 手动进入安全模式
  • 手动离开安全模式
  • 11.Short Circuit Local Reads(短路本地读取)
  • 1.概述
  • 2.实现
  • 12.HDFS Block负载平衡器:Balancer


HDFS 功能和特性

1.Snapshot快照

1.概念
  1. 快照不是备份(直接将数据复制一份),HDFS快照只是做差异的记录。
  2. HDFS快照不会复制datanode中的块,只记录了快列表和文件大小。
  3. 当对某个目录开启快照并且该目录已经存在快照时,该目录不允许被删除。
  4. 每个目录的快照保存在该目录/.snapshot/下。
2.快照功能开启

HDFS中可以针对整个文件系统或者某个目录创建快照,但是创建快照的前提时相应的目录开启快照功能

#对/test目录开启快照功能
hdfs dfsadmin -allowSnapshot /test
3.快照功能禁用

HDFS中可以针对已经开启快照功能的目录禁用快照功能

禁用的前提的该目录的所有快照已经被删除

#对/test目录禁用快照功能
hdfs dfsadmin -disallowSnapshot /test
4.快照命令

createSnapshot 创建快照

deleteSnapshot 删除快照

renameSnapshot 重命名快照

lsSnapshottableDir 列出可以快照的目录列表

snapshotDiff 获取快照差异报告

2.权限管理(认证,授权,审计)

1.概念

认证(Authentication),授权(Authorization),审计(Accounting)是计算机安全领域的一个架构模式,通常缩写为AAA。

在该模式中,使用服务的用户先要证明自己的身份,然后根据规则被授予权限,同时其操作被记录下来留待审计。

  • 认证->你是谁?能否通过认证?
  • 授权->在通过认证后,你可以干什么?
  • 审计->你干了什么?
2.HDFS UGO权限管理

HDFS文件权限与Linux/Unix系统的UGO(User,Group,other)模型类似,每个文件或者目录都与一个UGO关联。

读权限® ->4,写权限(w)->2,执行权限(x)->1。

在HDFS中,对于文件,需要r权限才能读取文件,需要w权限才能写入或者追加到文件没有x可执行文件的概念

在HDFS中,对于目录,需要r权限才能列出目录内容,需要w权限才能创建或者删除目录,需要x权限才能访问子目录

3.umask权限掩码,文件和目录的默认权限

与Linux/Unix类似,HDFS也提供了权限掩码,用于设置默认的文件或目录的权限位。

默认umask值有属性fs.permissions.umask-mode指定,默认值为022.。

创建文件或者目录的默认权限:

  • 目录:777-022=755,即 d rwx r-x r-x
  • 文件:777-022=755,因为HDFS中文件没有x权限的概念,所以为:- rw- r-- r–
4.权限相关命令
#修改文件或者目录的权限
hadoop fs -chmod [-R] 777 /test
hadoop fs -chmod [-R] u+x,o-x /test
#变更文件或目录的拥有者,和拥有者所属的组
hadoop fs -chown [-R] {newown} /test
hadoop fs -chown [-R] {newown:newgroup} /test
#变更文件或者目录的拥有组
hadoop fs -chgrp [-R] {newgroup} /test

在hadoop 3.X中支持使用web UI页面进行权限修改

5.Sticky bit(粘滞位)

可以在目录上设置粘滞位(Sticky bit),只有目录内文件的所有者或者root才可以删除或移动该文件;如果不为目录设置粘滞位,则任何具有该目录写和可执行权限的用户都可以删除和移动其中的文件。

设置了粘滞位的目录,权限表示后面会多个字符’t’,如:

d rwx r-x r-x t

6.HDFS用户身份认证

HDFS并不负责用户身份合法性检查,但是它会通过相关接口来获取相关的用户身份,然后用于后续的权限关联。用户是否合法,完全取决于集群使用的认证体系。目前社区支持2中身份认证,即simple和kerberos

身份认证由hadoop.security.authentication属性指定,默认为simple

simple认证

基于HDFS客户端所在的Linux/Unix系统的登录用户名来进行认证。即只要用户能正确登录操作系统就认证成功。

HDFS的操作用户,就是当前操作系统的登录用户。

kerberos认证

1.kerberos角色

  • client 访问服务的客户端
  • Server 提供服务的服务端
  • KDC(key Distribution Center)密钥分发中心

2.认证流程

  • client--------->KDC (Authentication Server)
  • KDC (Authentication Server) --------{TGT}--------->client
  • client---------{TGT}------------------>KDC (Ticket Granting Server)
  • KDC (Ticket Granting Server) -----------{ST}-------->client
  • client---------{ST}-------------------->Server
7.HDFS Group Mapping组映射

HDFS中用户所属组的确认工作需要通过外部的用户组映射(Group Mapping)服务获取,用户到组的映射可以使用系统自带的方案(NameNode服务器上的用户组系统),也可以通过其他实现类似功能的插件(LDAP,Ranger)方式来代替。

HDFS默认基于Linux/unix系统的用户和用户组

  • Linux/Unix系统上的用户和用户组信息存储在/etc/passwd和/etc/group文件中。
  • 默认情况下,HDFS会通过调用外部的shell命令来获取用户的所有用户组列表。
8.HDFS ACL权限管理

每一个文件或者目录都有一个ACL Access Control List(访问控制列表),不做任何添加的话,该文件和目录的ACL中保存的就是UGO权限信息。

在某些场景下,UGO权限管理中的三种身份不够用,ACL可以为特定的用户或者组设置文件或目录的权限(实现精准控制),而不是将权限仅仅加载文件或者目录上的所有者,所有组和其他。

使用ACL首先要在hdfs-site.xml中设置dfs.namenode.acls.enabled=true 开启ACL,重启hdfs集群。

#为用户my设置rwx目录/test权限
hadoop fs -setfacl -m [user]:{my}:{rwx} /test

#删除/test指定的ACL条目 user:my
hadoop fs -setfacl -x [user]:{my} /test

#删除/test所有条目,但会保留用户,组和其他用户条目(UGO条目信息)
hadoop fs -setfacl -b /test

带有ACL的任何文件或者目录的权限字符串后附带一个’+'字符,如:

目录:d rwx r-x r-x +

文件:- rw- r-- r-- +

9.HDFS Proxy user 代理用户

HDFS Proxy user描述的是一个用户如何代表另一个用户提交作业或访问hdfs。

代理可以在core-site.xml中配置:

hadoop.proxyuser.{ Proxy user}.hosts----->Proxy user可以代理哪些主机的用户

hadoop.proxyuser.{Proxy user}.groups----->Proxy user可以代理那些组的用户

3.HDFS 透明加密

1.加密层级
  • 应用层加密:加密,解密内容由应用程序来控制,并且可以精确的反映用户的需求,弊端是需要应用层开发人员实现加密解密算法。
  • 数据库层加密:大多数数据块厂商都提供某种形式的加密,但可能会有性能问题,比如索引如何加密。
  • 文件系统层加密:对应用程序透明,比较容易实施。
  • 磁盘层加密:易于部署和高性能,但是不灵活。
2.HDFS 透明加密

对于加密区域里的文件,HDFS保存的即是加密后的文件,文件加密的密钥也是加密的。让非法用户即使从操作系统层面拷走文件,也是密文无法查看。

特点:

  • HDFS集群管理和密钥管理(KMS)是相互独立的职责,由不同的用户角色承担。
  • block在操作系统层面是以加密的形式存储,从而减轻了操作系统和文件系统级别的安全威胁。
  • HDFS使用AES-CTR加密算法。
3.加密区域
  • 加密区域就是hdfs上的一个目录。
  • 加密区域里写入文件的时候会被透明加密,读取文件的时候会被透明解密。
4.密钥

加密区域 <1,1> EZ密钥(加密区域密钥)

加密区域的每个文件 <1,1> DEK 密钥(数据加密密钥)

DEK <1,1> EDEK密钥

5.加密,解密

假设带加密文件为/test/my.txt ,加密区域为/test

加密:

  • DEK + my.txt ------->my.加密文件
  • EZ +DEK--------------->EDEK

解密:

  • EDEK +EZ----------------->DEK
  • DEK+my.加密文件-------------->my.txt
6.KMS(密钥管理服务)

职责:

  • 从密钥库访问获取EZ
  • 生成EDEK
  • 解密EDEK

4.HDFS Trash垃圾桶

1.概述

Trash类似回收站一样,防止无意中删除某些东西。默认情况是不开启的。

启用Trash后,从HDFS中删除某些内容,文件或目录不会立即删除,它们被移动到回收站Current目录中(/user/${username}.Trash/current)

2.Trash Checkpoint

检查点是…/.Trash/目录下的一个目录,保存当前检查点时间之前删除的所有文件和目录。

3.Trash功能开启

关闭HDFS集群

修改core-site.xml

  • fs.trash.interval :回收站每隔多久清空一次,为0则Trash功能会被禁用。
  • fs.trash.checkpoint.interval :前后2次检查点的创建间隔,新的检查点被创建后,随之旧的检查点就会被系统永久删除。如果为零,则该值等于fs.trash.interval的值。

同步配置文件到集群

重启集群

4.Trash功能使用
1.删除

直接使用 -rm 命令删除文件,会将其保存在Trash中。

使用命令 -skipTrash 命令删除文件,会直接删除。

2.恢复文件

使用 -cp ,-mv命令把数据文件从Trash目录下复制移动出来即可。

3.清空Trash

除了fs.trash.interval 参数控制到期自动清理回收站,释放HDFS磁盘存输空间。

可以手动清空回收站。

还可以使用命令 -expunge,从文件系统中删除过期的检查点。

5.HDFS Shell CLI

1.说明
  • HDFS Shell CLI支持操作多种文件系统,包括本地文件系统(file:///),分布式文件系统(hdfs://host/)等。
  • 操作的是什么文件系统取决于URL中的前缀协议。
  • 如果命令中没有指定前缀,则会读取环境变量中的fs.defaultFS属性,以该属性值作为默认的文件系统。
2.hadoop dfs ,hdfs dfs,hadoop fs区别
  • hadoop dfs 只能操作HDFS文件系统(包括与Local FS间的操作),已经过时。
  • hdfs dfs 同上,常用。
  • hadoop fs 可操作任意文件系统,官方推荐。
3.操作
#创建目录
hadoop fs -mkdir /test

#查看指定目录下的内容
hadoop fs -ls [-R] [-H] /test

#上传文件,使用moveFromLocal上传后,本地文件会被删除。
hadoop fs -put {本地文件路径} {上传到的路径}
hadoop fs -moveFromLocal{本地文件路径} {上传到的路径}

#查看文件
hadoop fs -cat {文件路径}

#查看文件头1k内容
hadoop fs -head {文件路径}

#查看文件尾1k内容,-f动态显示加入的内容
hadoop fs -tail [-f] {文件路径} 

#下载文件
hadoop fs -get [-f] [-p] {src} {localtarget}

#下载多个文件并合并为一个文件,nl跳过空文件
hadoop fs -getmerge [-nl] {src} {localtarget}

#拷贝文件
hadoop fs -cp {src} {target}

#追加数据
hadoop fs -appendToFile {localsrc} {hdfstarget}

#查看磁盘空间
hadoop fs -df [-h] {target}

#移动文件
hadoop fs -mv {src} {target}

#修改文件副本个数
hadoop fs -setrep [-R] [-w] {target}

6.HDFS文件存储格式

1.Text File
  • 按行存储,以回车符区分不同行。
  • 不支持块级别压缩。
2.Sequence File

每条数据记录(record)以key,value对进行存储(二进制格式)。

支持record,block级别的压缩。

压缩后的文件支持文件切分。

3.Avro File

基于行存储格式

可切分,支持快压缩

序列化和反序列化很快。

4.Apache Arrow

是一个跨语言平台,列式内存数据结构。

7.HDFS 异构存储和存储策略

1.HDFS异构存储类型

基于数据的使用频率,将数据分为冷,热,温,冻数据。

HDFS中声明定义了4种异构存储类型:

  • RAM_DISK (内存)
  • SSD (固态硬盘)
  • DISK (机械硬盘) 默认
  • ARCHIVE (高密度存储,还是在机械硬盘上)
2.存储策略

块存储指的是对HDFS文件的数据块副本储存。

对于数据的存储介质,HDFS的BlockStoragePolicySuite 类定义了6中策略。

  • HOT (默认) 所有的副本都存储在DISK中。
  • COLD 所有副本都存储在ARCHIVE中。
  • WARM 某些副本存储在DISK中,其他副本存储在AECHIVE中。
  • ALL_SSD 所有的副本都存储在SSD中。
  • ONE_SSD 副本之一保存在SSD中,其余副本保存在DISK中。
  • LAZY_PERSIST 首先将副本写入RAM_DISK,然后将其延迟保存在DISK中。

前三个根据冷热温数据区分,后三种根据磁盘性质区分。

8.数据迁移

1.数据迁移使用场景
  • 冷热集群数据同步,分类存储。
  • 集群数据整体搬迁。
  • 数据准实时同步。
2.数据迁移要素考量
  • Bandwidth 带宽
  • performance 性能
  • Data-increment 增量同步
  • Syncable 数据迁移的同步性
3.HDFS 分布式拷贝工具 :DistCp

用于数据迁移,定期在集群之间和集群内部备份数据。

DistCp底层使用MapReduce在集群之间或并行在同一集群内复制文件。执行复制的MapReduce只有mapper阶段。

性能优势:

  • 带宽限流
  • 增量同步
  • 分布式特性(mapreduce)

9.HDFS 集群黑,白名单机制

1.白名单
  • 白名单指的是允许哪些机器加入到当前的HDFS集群中,是一种准入机制。
  • 白名单由参数dfs.hosts参数指定。默认空。
  • dfs.hosts指向文件,该文件包含允许连接到的HDFS集群的主机列表。必须指定文件的完整路径名,如果为空,表示允许所有主机准入。
2.黑名单
  • 黑名单指的是禁止哪些机器加入到当前的HDFS集群中,是一种禁入机制。
  • 黑名单由dfs.hosts.exclude参数指定。默认空。
  • dfs.hosts.exclude指向文件,该文件包含不允许连接到HDFS集群的主机列表。必须指定文件的完整路径名,如果为空,表示不禁止任何主机。

10.安全模式

1.概述

在NameNode启动过程中,首先会从fsimage和edits日志文件加载文件系统元数据信息(运行CheckPoint过程)。但是元数据信息不包含块位置信息,所以等待DataNodes汇报block信息;在此期间,NameNode保持在安全模式。随着DataNode的block汇报持续进行,当整个系统达到安全标准时,HDFS自动离开安全模式。

如果HDFS处于安全模式下,则不允许HDFS客户端进行任何修改文件的操作,包括上传文件,删除文件,重命名,创建文件夹等操作。

2.安全模式自动进入离开
自动进入:

HDFS集群启动时,当NameNode启动成功时,此时就会自动进入安全模式。

自动离开:

dfs.namenode.safemode.threshold-pct 已汇报可用数据块数量占整体数量的百分比阈值。默认0.999f。

dfs.namenode.safemode.extension 达到阈值条件后持续时间。默认30000毫秒。

达到上述条件自动离开。

3.安全模式手动进入离开
手动获取安全模式状态信息

hdfs dfsadmin -safemode get

手动进入安全模式

hdfs dfsadmin -safemode enter

手动离开安全模式

hdfs dfsadmin -safemode leave

11.Short Circuit Local Reads(短路本地读取)

1.概述

DFSClient和数据在一个机器上面,那么让DFSClient绕开DataNode直接去本地读文件。能够为许多应用提升性能。

2.实现

Unix Domain Socket ,是一种进程间通信方式,使得同一个机器上的两个进程能以Socket方式通讯。

利用它可以在两个进程间传递数据和文件描述符。

DFSClient ------------------{请求读文件}------------------>DataNode

DataNode ------------------{文件描述符}------------------>DFSClient

DFSClient --------------------{读文件}------------------------->File

12.HDFS Block负载平衡器:Balancer

  • HDFS 提供了一个Balancer程序,分析block放置信息并且在整个DataNode节点之间平衡数据,直到被视为平衡为止。
  • 平衡指的是每个datanode的利用率与整个集群的利用率的差值不超过给定的阈值。
    DataNode直接去本地读文件。能够为许多应用提升性能。