HDFS ACLs测试

Hadoop从2.4开始支持HDFS层面的ACLs,新的ACLs功能包含了新的api,使用方法以及使用场景,本测试探查ACLs与我们原先基于主机与组的ACLs的结合,以及ACLs使用方法等。

一、配置增加

    为了使用ACLs,需要在NameNode增加一个配置选项,为:

  <property>

    <name>dfs.namenode.acls.enabled</name>

    <value>true</value>

  </property>

    默认是不开启的。


 

二、说明及使用场景

 

    hadoop原先使用的permission比较简单,采用的是类似Linux POSIX,即定义User,Group 和Other的权限。对文件或者目录做的任何操作都会进行permission check。permission check的步骤如下:

    1、检查用户是否是文件或者目录Owner,如果是检查权限,权限符合返回

    2、检查用户组是否在文件或者目录的Group中,用户组是通过原先的ACLs获得,如果在相应的组中,符合权限就返回

    3、最后检查Other的权限,如果满足就返回

    4、如果都不符合,抛出AccessControlException

 

    可以看到,以前的权限检查比较简单,相应的角色也只有User,Group,Other,对于稍微复杂的需求存在缺陷。比如:

    1、需要对某些文件对多个用户开放读权限,但是所有用户都不属于同一个组

    2、某些文件开放对多个组用户的访问权限,但是不同组中所有用户并不能归为一个大组等其它很多用处。所以新增的ACLs能够满足用户的大量对权限管理的需求。

Continue reading…

HDFS Protocol修改流程

    相对于1.x版本的Hadoop,2.x版本的Hadoop采用了Protocol Buffer作为序列化反序列化工具,以及RPC通讯工具。这样当我们对Hadoop源码进行修改之前,就需>要了解Hadoop 2.x的代码结构和修改方法。

    几个结构,以DatanodeProtocol举列子:

NewImageNewImage

    DatanodeProtocol.java 还像1.x一样只是一个接口,NameNode继承这一个接口,实现所有功能,但2.x新增了DatanodeProtocolPB.java,DatanodeProtocolClientSideTranslatorPB.java, DatanodeProtocolServerSideTranslatorPB.java三个类。除此之外,还有PB文件,路径在$HADOOP_SOURCE_HOME/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/。maven编译的时候会将相应的类生成到target目录下,并加入CLASSPATH中。

 

    1、DatanodeProtocol.proto 

PB文件,定义了message以及service,如果

NewImage

    PB文件,定义了message以及service,如果加入一个接口,需要在其内部定义rpc service。

    编辑好后需要通过protoc进行编译,使用maven默认的goal mvn generate-sources即可以。

 

Continue reading…

NameNode HA滚动升级方案

Hadoop 滚动升级非常方便,只需要在配置中增加一些选项就可以通过Hadoop自身的代码进行完成。

步骤:

1、首先到需要升级的NameService的Active NameNode上面,比如我们10.39.2.131是ns1的Active NameNode。

 

2、新增加的配置:

<property>

<name>dfs.ha.fencing.methods</name>

<value>shell(/bin/true)</value>

</property>

 

3、在ActiveNameNode上面使用命令

hdfs haadmin -ns ns1 -failover nn1 nn2

将nn1切换为Standby,nn2切换为Active。随后看一下web页面,确认这一过程完成顺利。

(如果这一过程失败,采用手动切换。

(1)如果ActiveNameNode没有切换为StandbyNameNode

hdfs haadmin -ns ns1 -transitionToStandby nn1

(2)确认nn1进入standby状态,防止client读取过期的数据。

hdfs haadmin -ns ns2 -transitionToActive nn2)

 

Continue reading…