HADOOP之HDFS 的新颖功能特性

HDFS 的新颖功能特性

1.HDFS 视图文件系统

1)ViewFileSystem :视图文件系统

ViewFileSystem不是一个新的文件系统,只是逻辑上的一个视图文件系统,在逻辑上是唯一的。总的理解是:将各个集群的真实文件路径与ViewFileSystem内新定义的路径进行关联映射。

      

                                                                     图 ViewFileSystem 的路由解析

2)ViewFileSystem 内部实现原理

1.目录挂载点(MountPoint)

主要有两个全局变量

//源路径

private Path src;

//目录指向路径,可以有多个

private URI[] targets;

目前挂载点是一对一的。不同集群有相同名称的目录情况(一对多)在Hadoop中叫MergeCount,这个功能还未完成,相关JIRA: HADOOP-8298(ViewFs merge mounts).

 

2.挂载点的解析与存放

挂载点的解析和存放是在ViewFileSystem类下面的变量中进行的:

InodTree<FileSystem> fsState;   //此对象可理解为挂载表

在InodeTree#createLink()方法中主要是INodeDir这个类的添加路径操作,该类有以下几个全局变量:

final Map<String,INode<T>> children = new HashMap<String,INode<T>>();

T InodeDirFs =  null;

                                                        图 挂载点的解析与存放

                                                         图 INodeDir 存储结构

3.ViewFileSystem 的请求处理

fsState.resolve会到挂载点树中进行逐层寻找,找到对应的文件系统后,把真实的路径传入真实的文件系统中。

                                                         

                                                                            图 ViewFs 的路径解析

4.ViewFileSystem 的路径包装

比如:挂载的信息为 /project/viewFsTmp  -> hdfs://nn1/projects/Tmp

真实路径下有一个文件/projects/Tmp/child

然后用户利用hadoop fs -ls /project/viewFsTmp 命令查出信息如下:

/projects/viewFsTmp/child.

这里只修改路径信息,其他信息不做修改(大小、修改时间、权限等)

 

                                                          

                                                                             图 ViewFsFileStatus 的继承关系

ViewFsFileStatus类是对路径进行包装的类,其中两个全局变量:

//原FileStatus信息

final FileStatus myFs;

//修改后的路径信息

Path modifiedPath;

5.ViewFileSystem 性能优化

    目前ViewFileSystem通过将路径进行拆分,保存到一个树形的结构中,解析时同样需要拆分路径,进行逐层解析;当挂载表数据量很少的情况下,效率不高,进行频繁的拆分、合并字符串本身不是高效的操作。可以直接保存到一个map的关系结构中,直接做字符串的简单比较。如果改进的话,添加Link和解析路径的逻辑也都需要改变。

3)ViewFileSystem 的使用

配置使用,二个步骤:

第一步,创建Viewfs名称

<property>

<name>fs.defaultFS</name>

<value>viewfs://MultipleCluster</value>

</property>

第二步,添加挂载关系

<property>

<name>fs.viewfs.mounttable.MultipleCluster.link./viewfstmp</name>

<value>hdfs://nn1/tmp</value>

</property>

注意:这两个步骤的MultipleCluster这个名称需要一致。

这些挂载信息是维护在客户端的内存中,不需要重启NN和DN.

 

2.HDFS 的Web文件系统:WebHdfsFileSystem

1)WebHdfsFileSystem REST 的 API 操作

    通过Web REST API的形式对文件系统进行操作,也就是用户可以通过http请求url的形式对HDFS做操作。

所有的方法分为4类:GET/PUT/POST/DELETE

1.GET方式

获取文件目录信息相关

OPEN

GET_FILE_STATUS

LIST_STATUS

GET_CONTENT_SUMMARY

GET_FILE_CHECKSUM

GET_HOME_DIRECTORY

GET_BLOCK_LOCATIONS

获取属性、ACL访问相关

GET_DELEGATION_TOKEN

GET_XATTRS

LIST_XATTRS

GET_ACL_STATUS

CHECK_ACCESS

 

2.PUT方式

文件目录设置相关:

CREATE

MKDIRS

CREATE_SYMLINK

RENAME

SET_REPLICATION

SET_OWNER

SET_PERMISSION

SET_TIMES

ACL 访问属性相关

RENEW_DELEGATION_TOKEN

CANCEL_DELEGATION_TOKEN

MODIFY_ACL_ENTRIES

REMOVE_ACL_ENTRIES

REMOVE_DEFAULT_ACL

REMOVE_ACL

SET_ACL

SET_XATTR

REMOVE_XATTR

快照操作相关:

CREATE_SNAPSHOT

RENAME_SNAPSHOT

 

3.POST方式

APPEND:文件追加操作

CONCAT:文件拼接操作

TRUNCATE:文件截断操作

 

4.DELETE方式

DELETE:文件/目录删除操作

DELETE_SNAPSHOT:快照删除操作

 

2)WebHdfsFileSystem的流程调用

以rename操作为例,调用命令如下:

     curl -i -X PUT “<HOST>:<POST>/webhdfs/v1/<PATH>?op=RENAME&destination=<PATH>”

                                           

                                                                 图 WebHdfsFileSystem执行过程

3)WebHdfsFileSystem执行器调用

    前面rename命令的调用会经过FsPathBooleanRunner执行器的处理,FsPathBooleanRunner是AbstractRunner的子类,AbastractRunner的内部会包括:

  1. 初始化http请求连接。
  2. 连接Server端
  3. 获取执行回复内容
  4. 执行失败重试操作

在WebHDFS的操作响应中,有4中类型的响应回复

  1. FsPathResPonseRunner:带json回复格式的处理执行器。一般应用于GET类型的操作。
  2. FsPathRunner:不带json回复格式的处理执行器,getResponse返回内容为空。
  3. FsPathConnectionRunner:执行器的回复是http的连接对象。
  4. FsPathOutPutStreamRunner:用于处理创建、追加数据流。

                                                                    图 WebHdfsFlieSystem 的执行器继承关系

4)WebHDFS的OAuth2认证

1. OAuth2认证机制

3个角色

    服务端:用户使用服务端提供的各个资源

    用户:服务端资源的真实拥有者

    客户端:要访问服务端资源的第三方应用

具体的认证步骤:

  1. 用户登录客户端向服务端请求一个临时令牌
  2. 服务端通过客户端验证后,返回其临时令牌
  3. 客户端获取临时令牌后,引导用户到服务端提供的授权页面
  4. 用户输入账号、密码后,表明用户授权此客户端访问所请求的资源
  5. 授权过程完成后,客户端根据临时令牌从服务端获取访问令牌
  6. 客户端获取访问令牌后向服务端访问受保护的资源

2.WebHdfsFileSystem的OAuth2认证调用

                      

                                                                       图 OAuth2认证调用图

5)WebHDFS的使用

如下命令:

     curl -i -X PUT “<HOST>:<POST>/webhdfs/v1/<PATH>?op=RENAME&destination=<PATH>”

-X后面代表的是请求类型,如果没有设置用户,可能会报出权限拒绝的错误

可以通过user.data=<USER>参数:

curl -i -X PUT  “<HOST>:<POST>/webhdfs/v1/<PATH>?user.name=<USER>&op=RENAME&destination=<PATH>”

 

3.HDFS 数据加密空间: Encryption zone

1)Encryption zone 原理介绍

1.每个encryption zone会与每个encryption zone key相关联,而这个key会在创建encryption zone的时候被指定。

2.每个encryption zone中的文件会有唯一的data encryption key(数据加密key),简称DEK.

3.DEK不会被HDFS直接处理,HDFS只处理经过加密的DEK,叫做encrypted data encryption key,缩写EDEK。

4.客户端请求KMS服务去解密EDEK,然后利用解密后的DEK去读、写数据。

                                         

                                                                             图 Encryption zone原理图

2)Encryption zone源码实现

  1. Encryption zone下的写文件

 

  1. Encryption zone下的读文件
  2. Encryption zone 的管理

 

3)Encryption zone的使用

需要个相关的配置项:

1.完成keyProvider的配置。将已存在的keyProvider的URL地址配置到下面的配置项中:

      dfs.encryption.key.provider.uri

2.加密算法相关的配置

    hadoop.security.crypto.codec.classes.EXAMPLECIPHERSUITE

    hadoop.security.crypto.codec.classes.aes.ctr.nopadding

    hadoop.security.crypto.cipher.suite

    hadoop.security.crypto.jce.provider

    hadoop.security.crypto.buffer.size

3.配置listZone响应回复的个数。

    dfs.namenode.list.encryption.zones.num.responses

4.创建Encryption zone加密空间。加密空间针对的是目录级别,并且需要设置一个key名称(创建一个加密key:hadoop key create myKey)。

    hdfs crypto -createZone -keyName <keyName> -path <path>

    这里的path必须是已经建好的目录,此命令的作用相当于将目录作为一个加密空间,在此目录下的文件在读写的过程中被加、解密。

一些其他命令:

    hdfs crypto -listZones //查看当前创建好的加密空间

    hadoop fs -mkdir /zone

    hdfs crypto -createZone -keyName myKey -path /zone

    hadoop fs -chown myuser:myuser /zone

    hadoop fs -put helloWorld /zone

    hadoop fs -cat /zone/helloWorld

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值