HDFS中可以针对整个文件系统或者某个目录创建快照,但是创建快照的前提时相应的目录开启快照功能。
#对/test目录开启快照功能
hdfs dfsadmin -allowSnapshot /test
HDFS中可以针对已经开启快照功能的目录禁用快照功能
禁用的前提的该目录的所有快照已经被删除
#对/test目录禁用快照功能
hdfs dfsadmin -disallowSnapshot /test
createSnapshot 创建快照
deleteSnapshot 删除快照
renameSnapshot 重命名快照
lsSnapshottableDir 列出可以快照的目录列表
snapshotDiff 获取快照差异报告
认证(Authentication),授权(Authorization),审计(Accounting)是计算机安全领域的一个架构模式,通常缩写为AAA。
在该模式中,使用服务的用户先要证明自己的身份,然后根据规则被授予权限,同时其操作被记录下来留待审计。
HDFS文件权限与Linux/Unix系统的UGO(User,Group,other)模型类似,每个文件或者目录都与一个UGO关联。
读权限® ->4,写权限(w)->2,执行权限(x)->1。
在HDFS中,对于文件,需要r权限才能读取文件,需要w权限才能写入或者追加到文件;没有x可执行文件的概念。
在HDFS中,对于目录,需要r权限才能列出目录内容,需要w权限才能创建或者删除目录,需要x权限才能访问子目录。
与Linux/Unix类似,HDFS也提供了权限掩码,用于设置默认的文件或目录的权限位。
默认umask值有属性fs.permissions.umask-mode指定,默认值为022.。
创建文件或者目录的默认权限:
#修改文件或者目录的权限
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页面进行权限修改
可以在目录上设置粘滞位(Sticky bit),只有目录内文件的所有者或者root才可以删除或移动该文件;如果不为目录设置粘滞位,则任何具有该目录写和可执行权限的用户都可以删除和移动其中的文件。
设置了粘滞位的目录,权限表示后面会多个字符’t’,如:
d rwx r-x r-x t
HDFS并不负责用户身份合法性检查,但是它会通过相关接口来获取相关的用户身份,然后用于后续的权限关联。用户是否合法,完全取决于集群使用的认证体系。目前社区支持2中身份认证,即simple和kerberos。
身份认证由hadoop.security.authentication属性指定,默认为simple。
基于HDFS客户端所在的Linux/Unix系统的登录用户名来进行认证。即只要用户能正确登录操作系统就认证成功。
HDFS的操作用户,就是当前操作系统的登录用户。
1.kerberos角色
2.认证流程
HDFS中用户所属组的确认工作需要通过外部的用户组映射(Group Mapping)服务获取,用户到组的映射可以使用系统自带的方案(NameNode服务器上的用户组系统),也可以通过其他实现类似功能的插件(LDAP,Ranger)方式来代替。
HDFS默认基于Linux/unix系统的用户和用户组
每一个文件或者目录都有一个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-- +
HDFS Proxy user描述的是一个用户如何代表另一个用户提交作业或访问hdfs。
代理可以在core-site.xml中配置:
hadoop.proxyuser.{ Proxy user}.hosts----->Proxy user可以代理哪些主机的用户
hadoop.proxyuser.{Proxy user}.groups----->Proxy user可以代理那些组的用户
对于加密区域里的文件,HDFS保存的即是加密后的文件,文件加密的密钥也是加密的。让非法用户即使从操作系统层面拷走文件,也是密文无法查看。
特点:
HDFS集群管理和密钥管理(KMS)是相互独立的职责,由不同的用户角色承担。
block在操作系统层面是以加密的形式存储,从而减轻了操作系统和文件系统级别的安全威胁。
HDFS使用AES-CTR加密算法。
加密区域 <1,1> EZ密钥(加密区域密钥)
加密区域的每个文件 <1,1> DEK 密钥(数据加密密钥)
DEK <1,1> EDEK密钥
假设带加密文件为/test/my.txt ,加密区域为/test
加密:
解密:
职责:
Trash类似回收站一样,防止无意中删除某些东西。默认情况是不开启的。
启用Trash后,从HDFS中删除某些内容,文件或目录不会立即删除,它们被移动到回收站Current目录中(/user/${username}.Trash/current)
检查点是…/.Trash/目录下的一个目录,保存当前检查点时间之前删除的所有文件和目录。
关闭HDFS集群
修改core-site.xml
同步配置文件到集群
重启集群
直接使用 -rm 命令删除文件,会将其保存在Trash中。
使用命令 -skipTrash 命令删除文件,会直接删除。
使用 -cp ,-mv命令把数据文件从Trash目录下复制移动出来即可。
除了fs.trash.interval 参数控制到期自动清理回收站,释放HDFS磁盘存输空间。
可以手动清空回收站。
还可以使用命令 -expunge,从文件系统中删除过期的检查点。
#创建目录
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}
每条数据记录(record)以key,value对进行存储(二进制格式)。
支持record,block级别的压缩。
压缩后的文件支持文件切分。
基于行存储格式
可切分,支持快压缩
序列化和反序列化很快。
是一个跨语言平台,列式内存数据结构。
基于数据的使用频率,将数据分为冷,热,温,冻数据。
HDFS中声明定义了4种异构存储类型:
块存储指的是对HDFS文件的数据块副本储存。
对于数据的存储介质,HDFS的BlockStoragePolicySuite 类定义了6中策略。
前三个根据冷热温数据区分,后三种根据磁盘性质区分。
用于数据迁移,定期在集群之间和集群内部备份数据。
DistCp底层使用MapReduce在集群之间或并行在同一集群内复制文件。执行复制的MapReduce只有mapper阶段。
性能优势:
在NameNode启动过程中,首先会从fsimage和edits日志文件加载文件系统元数据信息(运行CheckPoint过程)。但是元数据信息不包含块位置信息,所以等待DataNodes汇报block信息;在此期间,NameNode保持在安全模式。随着DataNode的block汇报持续进行,当整个系统达到安全标准时,HDFS自动离开安全模式。
如果HDFS处于安全模式下,则不允许HDFS客户端进行任何修改文件的操作,包括上传文件,删除文件,重命名,创建文件夹等操作。
HDFS集群启动时,当NameNode启动成功时,此时就会自动进入安全模式。
dfs.namenode.safemode.threshold-pct 已汇报可用数据块数量占整体数量的百分比阈值。默认0.999f。
dfs.namenode.safemode.extension 达到阈值条件后持续时间。默认30000毫秒。
达到上述条件自动离开。
hdfs dfsadmin -safemode get
hdfs dfsadmin -safemode enter
hdfs dfsadmin -safemode leave
当DFSClient和数据在一个机器上面,那么让DFSClient绕开DataNode直接去本地读文件。能够为许多应用提升性能。
Unix Domain Socket ,是一种进程间通信方式,使得同一个机器上的两个进程能以Socket方式通讯。
利用它可以在两个进程间传递数据和文件描述符。
DFSClient ------------------{请求读文件}------------------>DataNode
DataNode ------------------{文件描述符}------------------>DFSClient
DFSClient --------------------{读文件}------------------------->File