Hadoop是开源组织Apache开发的一个开源分布式系统,基于谷歌发表的云计算系统理论实现。它以一种可靠、高效、可伸缩的方式,在普通计算机群上实现海量数据处理。随着越来越多的企业在Hadoop部署应用、存储私密数据,Hadoop的安全问题也开始为人们所重视。Hadoop安全框架存在不小挑战,一方面,由于Hadoop自身安全机制依赖Kerberos、非对称加密的Token认证机制、传输加密机制、基于Linux/Unix系统自带的访问控制机制,在认证、访问、授权等机制存在不足;另一方面,Hadoop一般不是独立运行,而是配合使用生态系统中的其他组件技术,这些技术在安全性上缺乏统一的安全措施。
1 Hadoop体系架构介绍:
1.1 Hadoop发展历史
Hadoop建立在之前的Google Lab 开发的 Map/Reduce 和 Google File System(GFS) 基础上,并于2005年作为Lucene的子项目Nutch的一部分由 Apache基金会正式引入,在随后成为Apache旗下一个单独的开发项目。Hadoop最初由HDFS,MapReuce,Hbase三大核心组件组成,后来发展成为包含HDFS、MapReduce、Hbase、Hive和ZooKeeper等60多个组件的生态系统。在Hadoop的工作中,Map负责分解任务,Reduce负责结果汇总,HDFS负责数据的管理。在互联网领域,Hadoop发展状况良好,脸书的数据挖掘和日志统计、推特的数据存储、百度的日志分析和网页数据库的数据挖掘等领域都使用了Hadoop云计算平台。
1.2 HDFS框架介绍
HDFS 是Hadoop平台的分布式文件管理系统[3],是Hadoop最重要的组件之一。它采用 Master/Slaver 架构对文件系统进行管理。一个 HDFS 集群一般由一个NameNode节点和一定数量的DataNodes 节点组成。下面是各类节点在集群中的主要作用:
(1)NameNode节点。NameNode包含HDFS 文件系统的文件目录树及文件索引目录、文件 Block 列表等进行相应的维护,并将这些信息持久化到本地磁盘的镜像文件和编辑日志中中。NameNode 负责对 HDFS 文件系统的命名空间、集群配置信息和文件 Block 块的创建、删除、复制等操作进行管理,并协调接收客户端对 HDFS 文件系统的访问请求,执行相应的文件操作,例如对文件的打开、关闭、重命名等。NameNode 将 HDFS 中的超大文件划分为多个 Block 块,存储在不同的 DataNode。
(2)DataNode 是具体任务的执行节点,存在于客户端,承担具体执行任务相关的数据及操作。DataNode 接受 Nmaenode 的统一调度,对文件的 Block 块进行创建、删除、和复制等操作,同时 DataNode 还负责接收处理客户端对文件的读/写请求。
(3)DataNode 与 NameNode 间的交互:NameNode 在每次启动系统时都会动态重建文件系统的元数据信息,这时它会以心跳轮询集群中的 DataNode 节点,DataNode 以心跳响应 NameNode,定时向NameNode 发送它所存储的文件块信息。
1.3 Hadoop的计算框架
MapReduce是Hadoop的核心计算组件[4],被设计用于并行计算海量数据。MapReduce 框架的核心步骤主要分两部分:Map 和 Reduce。当用户向 MapReduce 框架提交一个计算作业时,它会首先把计算作业拆分成若干个 Map 任务,然后分配到不同的节点上去执行,每一个 Map 任务处理输入数据中的一部分,当 Map 任务完成后,它会生成一些中间文件,这些中间文件将会作为 Reduce 任务的输入数据。Reduce 任务的主要目标就是把前面若干个 Map 的输出汇总到一起并输出。
本文主要讲解最新的Hadoop2.x(YARN)版本(目前最新的稳定版本为Hadoop2.7)。在YARN中,原先负责资源管理和作业控制功能的JobTracker被遗弃,功能分别由组件 ResourceManager 和 ApplicationMaster 实现。其中,ResourceManager 负责所有应用程序的资源分配,而 ApplicationMaster 仅负责管理一个应用程序。YARN事实上转变成为一个弹性计算平台,它不仅支持 MapReduce,而且支持在线处理的 Storm ,以及近几年来发展势头迅速的Spark等计算框架。
2 Hadoop安全机制
一般而言,系统安全机制由认证(authentication)和授权(authorization)两大部分构成。认证就是简单地对一个实体的身份进行判断;而授权则是向实体授予对数据资源和信息访问权限的决策过程。本文也着重从这两方面展开叙述。
2.1 Hadoop早期安全机制
Hadoop 的早期用例都是围绕着如何管理大量的公共网络数据,没有考虑保密性。早期版本假定HDFS 和 MapReduce 集群运行在安全的内部环境中,由一组相互合作、互相信任的用户所使用,因而其访问控制措施的目标是防止偶然的数据丢失,而并非阻止非授权的数据访问,因此未对数据传输过程中的通信安全作出合理有效的防范措施。尽管在早期版本中实现了审计和授权控制(HDFS文件许可),然而这种访问控制很容易避开,因为任何用户能轻易模拟成其他任何用户,占有其他用户的资源甚至杀死其他用户的任务。