深入理解hadoop(三)
Hadoop多用户作业调度器
hadoop 最初是为批处理作业设计的,当时只采用了一个简单的FIFO调度机制分配任务,随着hadoop的普及以及应用的用户越来越多,基于FIFO的单用户调度机制不能很好的利用集群资源(比如机器学习和数据挖掘对处理耗时要求不高但I/O密集,生产性作业队实时要求高,如Hive查询统计CPU密集,即不同的作业类型对资源要求不一致),多用户调度器势在必行。多用户调度主要有两种思路,一种是在物理集群上虚拟出多个hadoop集群,优点是实现简单,缺点是集群管理麻烦、调度资源浪费,典型代表HOD(Hadoop on Demand);另一种是扩展Hadoop调度器,使之支持多队列多用户调度,典型代表是capacity scheduler 和fair scheduler。
hadoop 队列管理机制
hadoop 以队列为单位管理资源,用户只能向一个或多个队列提交作业,队列管理分为两方便:用户权限管理和资源管理。管理员可以配置每个队列的用户和用户组,也可以配置每个队列的管理员,他可以kill队列,改变队列的优先级等;系统支援管理有调度器完成,管理员可以设置各个队列的资源容量参数。
capacity Scheduler
capacity scheduler 主要是由yahoo实现的,主要有以下几个特点:
- 容量保证:管理员可以设置队列的资源使用上限
- 灵活性:如果一个队列的资源有剩余,可以共享给其他需要资源的队列,当此队列需要资源时由其他队列归还资源。
- 多重租赁:支持多用户共享集群和多作业同时运行。
- 支持资源密集型作业
- 支持作业优先级
hadoop 安全机制
由于hadoop 一般部署在由防火墙隔离的局域网环境之中,hadoop安全机制基本不用与考虑地域外网攻击,更多的是保障多用户在集群环境下安全高效的使用集群资源。Hadoop RPC 采用了SASL(Sample Authentication and Security Layer) 进行安全认证。
Kerberos 认证
kerberos 是一种网络安全认证协议,主要概念如下:
- 客户端(client):请求服务的用户
- 服务端(server):向用户提供服务的一方
- 秘钥分发中心(kerberos key distribution center,KDC):中心化的存储了客户端密码和其他账户信息,他接收来自客户端的请求,验证合法性并授予会话凭证,分为认证服务和授权服务。
- 认证服务(authentication server,AS):校验用户身份
- 票据授权服务(Ticket-Granting Service,TGS):验证由AS颁发的票据,如果票据验证通过,则颁发服务许可票据
- 票据(Ticket):用于服务器与用户之间安全的传输信息,同时也附加一些标识
- 票据授权票据(Ticket-Granting Ticket,TGT):AS颁发的票据
- 服务许可票据(Service-Granting Ticket,SGT):TGS颁发的票据
kerberos 一般采用对称加密方式,认证流程如下图:
kerberos相对于SSL的优点:
- kerberos采用对称加密相比SSL非对称加密算法高效。
- 用户管理简单,kerberos基于第三方KDC统一管理,撤销用户只需移出KDC记录,而SSL需要广播给各个服务器
Kerberos协议本身并不能完全解决网络安全性问题,它是建立在一些假定之上的,只有在满足这些假定的环境中它才能正常运行:
- 不能对拒绝服务(Denial of Service)攻击进行防护。Kerberos不能解决拒绝服务攻击,在该协议的很多环节中,攻击者都可以阻断正常的认证步骤。这类攻击只能由管理员和用户来检测和解决。
- 主体必须保证他们的私钥的安全。如果一个入侵者通过某种方法窃取了主体的私钥,他就能冒充身份。
- Kerberos无法应付口令猜测攻击。如果一个用户选择了弱口令,那么攻击者就有可能成功地用口令字典破解掉,继而获得那些由源自于用户口令加密的所有消息。
- 网络上每个主机的时钟必须是松散同步的。这种同步可以减少应用服务器进行重放攻击检测时所记录的数据。松散程度可以以一个服务器为准进行配置。时钟同步协议必须保证自身的安全,才能保证时钟在网上同步。
- 主体的标识不能频繁地循环使用。由于访问控制的典型模式是使用访问控制列表(ACLs)来对主体进行授权。如果一个旧的ACL还保存着已被删除主体的入口,那么攻击者可以重新使用这些被删除的用户标识,就会获得旧ACL中所说明的访问权限。