Hadoop集群上存储数据,同时基于MapReduce计算框架可以实现计算任务,那么无论是从数据保护的角度,还是从提交计算任务占用资源的角度来看,都需要存在一种权限管理与分配机制,能够很好地限制哪些人可以在HDFS上存储数据,哪些人可以利用集群的资源来处理特定的计算任务。当然,如果能够非常完美地解决这些问题是最好的。当前Hadoop本身提供的权限管理功能还不能满足普遍的需要,或者我们从Hadoop已有的一些简单或复杂的认证机制选择适合自己所在组织机构需要的,或者我们在外围开发一些权限管理系统与Hadoop整合作为补充。
对比Kerberos认证(Authentication)配置方式与SLA授权(Service Level Authorization)方式,Kerberos配置相当复杂,而且还要依赖于外部的密钥分发中心KDC(Key Distribution Center)服务器,如果KDC出现问题,那么就会导致依赖于KDC认证的整个Hadoop集群无法使用,鉴于此,对于一些相对小的开发团队来说还是更倾向于粗粒度的Hadoop SLA授权机制。
Hadoop SLA基于Hadoop的各种服务(基于协议来划分)与Linux系统的用户、用户组来实现。Hadoop通过制定接口协议的方式来实现节点之间服务调用的逻辑,这样每一个协议所指定的一组服务就是一个认证单元,再基于底层Linux系统的用户和用户组来限制用户(可能是节点服务)有权限执行某一种协议所包含的操作集合,下面我们看一下Hadoop中的各种协议:
ClientProtocol HDFS 用户代码基于DistributedFileSystem与NameNode交互,可以操作Hadoop的Namespace,以及打开/关闭文件流操作。
ClientDatanodeProtocol HDFS 客户端与DataNode交互协议,用来实现数据库恢复(Block Recovery)。
DatanodeProtocol HDFS DataNode与NameNode通信的协议,DataNode基于此协议向NameNode发送block report,以及DataNode当前状态信息(如负载情况)。
InterDatanodeProtocol HDFS DataNode之间进行通信的协议,用来更新Block副本(replica)信息,如时间戳、长度等信息。
NamenodeProtocol HDFS SecondaryNameNode与NameNode进行通信的协议,用来获取NameNode的状态信息,如进行checkpoint的edits与fsimage。
AdminOperationsProtocol HDFS HDFS管理操作协议。
RefreshUserMappingsProtocol HDFS、MR 用来刷新缓存中用户与用户组映射关系信息,因为无论是操作HDFS,还是运行MapReduce Job,都会用到用户信息。
RefreshAuthorizationPolicyProtocol HDFS、MR 用来更新认证策略(Authorization Policy)配置,对应于配置文件/etc/hadoop/hadoop-policy.xml,控制执行hdfs dfsadmin -refreshServiceAcl和yarn rmadmin -refreshServiceAcl的权限。
HAServiceProtocol HDFS HDFS HA操作协议,用来管理Active NameNode与Stand-by NameNode状态。
ZKFailoverController HDFS ZooKeeper Failover控制器操作权限,用于HDFS HA。
QJournalProtocol HDFS QuorumJournalManager与JournalNode之间通信的协议,用于HDFS HA,用来同步edits,并协调Active NameNode与Stand-by NameNode状态。
HSClientProtocol HDFS 客户端与MR History Server之间通讯的协议,用来查看Job历史信息。
ResourceTracker YARN ResourceManager与NodeManager之间通信的协议。
ResourceManagerAdministrationProtocol YARN ResourceManager管理操作协议。
ApplicationClientProtocol YARN YARN客户端(Application)与ResourceManager通信的协议,包括Job提交、Job取消,查询Application状态信息等。
ApplicationMasterProtocol YARN ApplicationMaster与ResourceManager之间进行通信的协议,包括AM向RM发送注册或注销请求(获取或释放资源)。
ContainerManagementProtocol YARN ApplicationMaster与NodeManager之间进行通信的协议,包括启动/停止Container调用请求。
LocalizationProtocol YARN NodeManager与ResourceLocalizer之间进行通信的协议。
TaskUmbilicalProtocol MR Map/Reduce Task进程与后台父进程(向MR ApplicationMaster请求创建Map/Reduce Task)之间进行通信的协议。
MRClientProtocol MR MR JobClient与MR ApplicationMaster之间进行通信的协议,包括查询Job状态等。