朱雨晴1,2,张磊1,2,沈奇威1,2
1. 北京邮电大学网络与交换技术国家重点实验室 北京100876;
2. 东信北邮信息技术有限公司 北京100191
摘 要
伴随着云存储技术的迅猛发展,Hadoop作为一个开源的分布式文件系统和并行计算编程模型应运而生。其中,HDFS(Hadoop Distributed File System,Hadoop分布式文件系统)是Hadoop一个核心的子项目,在提供了良好的高可用大数据存储方案的同时只提供了程序访问接口以及简单的命令行接口,操作界面不友好。本课题主要目标是设计基于Web的内容管理模块,能提供给用户良好的体验。
关键词 HDFS Kerberos验证 ACL 文件管理 Web
The Design and Implementation of HDFS Content Management Module Based on Web
ZhuYuqing
Abstract: With the rapid development of cloud storage technology, the Hadoop distributed file system as an open source, and parallel computing programming model arises at the historic moment. Among them, the HDFS (Hadoop distributed file system) is a core component, the Hadoop distributed file system. HDFS provides us with high availability of large data storage solution, but only provides the program access interface and simple command line interface, which is not friendly. Therefore, the primary target of this paper is to design and implement a content management module based on Web, which provides users with a good experience.
Key words: HDFS Kerberos Management ACL
1 引言
随着Internet的迅猛发展,信息量爆炸式增长,促使“大数据”时代到来。“大数据”是指海量、高增长率和多样化的信息资产,需要新的处理模式才能展现出更强的决策力,洞察发现力和流程优化能力[1]。通过云计算技术,网络服务提供者可以在数秒之内处理数以千万计甚至以亿计的信息[2]。云存储由云计算的概念发展延伸而来,能将网络中大量的存储设备以某种方式统一起来,共同对外提供数据存储和访问的一个系统。Hadoop作为一个开源的分布式文件系统和并行计算编程模型应运而生。
Hadoop的核心由两个子项目组成,名为HDFS的分布式文件系统以及名为Map Reduce的计算框架。其中,HDFS有着高容错性的特点,在由有着高失败率的节点或者网络组成的大集群内,仍然可以保证作业的成功完成,有着极强的兼容性,可以被部署在低廉的硬件上,使用成本较低。除此之外,HDFS还放宽了对POSIX的要求,实现了以流的形式访问文件系统中的数据。有着高吞吐量的HDFS,在实际应用中,常用来存储管理超大文件,上达PB级,与当前的“大数据”背景十分契合[12]。正因为有着以上特点,Hadoop十分适宜部署在Linux生产环境下,是当下最流行的云计算平台之一,在国内外都得到了广泛的普及和应用。国外如Facebook、Twitter,以及国内像阿里巴巴、百度等,大批量的互联网公司、企业均已搭建了自己Hadoop集群,并成功的部署和运行了自己的商业应用[5]。
Apache Hadoop在0.20.0版本之前没有任何安全机制,也正是由于认识到了这个问题,为了更好的使用并管理Hadoop集群,2009年,自1.0版本开始,Hadoop引入了安全机制,也就在这时,Kerberos身份认证和基于ACL(Access Control List)的服务访问控制机制被正式加入。
2 设计目标
Hadoop的HDFS提供了良好的高可用大数据存储方案,但是它只提供了程序访问接口以及简单的命令行接口,操作界面不友好,在对HDFS进行日常操作和管理工作时,并不方便。而Web技术作为当今的主流媒体,已经深深的融入到了日常生活中,人们已经逐渐习惯使用网站来做各种事情,是一个较好的内容管理模块载体。本文设计一个基于HDFS框架的Web端的内容管理模块,实现对集群数据的可视化安全管理,包括搭建添加Kerberos验证的Hadoop集群权限管理体系,设计对添加了Kerberos认证的HDFS上内容的管理。
3 系统方案
3.1 系统架构设计
本文所设计的HDFS内容管理模块,如模块物理架构图3-1所示,用户通过浏览器访问,网站前端部分处理用户的操作行为,提交给网站后台部分相应的操作请求,然后由网站后台部分,给出反馈。这个过程可能涉及对HDFS的API的调用、对数据库的读写操作、以及对Hadoop集群部署的集群进行一些命令行操作等,图中的每一部分都必不可少。
因为有高内聚、低耦合的软件设计的基本原则,这个网站的前端部分、网站后台部分分别完成各自迥然不同的职责。
图3-1 模块物理架构图
3.2 网站的前端部分
前端部分作为内容管理模块与用户的信息交互渠道,完成了从后台部分获取数据并在前端部分显示给用户的职责,与此同时,通过向用户提供功能性按钮、输入框、复选框和导航等给予用户一定的逻辑导向,在监测到用户的操作行为后,能及时的处理且准确的提交给后台部分,同时给予用户状态的更新及反馈。
图3-2 模块界面架构图
网站前端部分需要提供的功能,应该是一些页面逻辑的跳转,用户指令的输入,以及清晰的架构区分,如图3-2所示,分别包括:
用户通过在登陆页面的登陆框中提交用户名和密码,验证通过后进入网站的主体页面,并可以进入修改密码页面进行新密码的输入提交等,前端可能需要一些输入格式合法性的校验。
无论是个人文件操作空间还是工程文件操作空间,均有对目录的列表需求,因此应该设计文件的列表页,并对应用户需要的操作提供功能性的按钮,如上传、下载、删除等。
用户自己的项目页,提供用户拥有或参与项目的列表及相应功能按键,如列表,重置权限等。
提供已有项目的列表页,供管理员进行添加、删除、列表、管理项目权限等功能。还包括项目修改权限时项目的信息页,以及添加参与者或修改项目所有者时的提示页面。
提供已有用户的列表页,供管理员用户进行添加、删除、启用、禁用、设置管理员、取消管理员,重置密码等操作。其中包括添加用户时的用户信息录入页面以及删除用户时的用户信息列表页。
用户操作报错时进入的错误提示页。
3.3网站的后台部分
网站的后台部分,在收到前端部分提交的请求后,负责核心的业务逻辑的处理,以一定的业务逻辑进行底部的调用,以保障用户操作的完整性和准确性,其中主要包括用户管理、文件管理、工程管理、权限认证。
3.3.1用户管理
本文所设计内容管理模块的用户管理部分,主要实现对模块中用户的管理,包括对用户的添加、删除、启用或启用、设置或取消管理员、重置密码等功能。
以添加新用户举例,用户添加包括三部分操作,一是在HDFS中创建这个用户,二是在KDC中创建这个用户,三是在数据库中创建这个用户。
先看HDFS中如何创建用户,在一个Hadoop集群中,若一个之前不存在的用户想要提交作业,那么HDFS会自动为其在/user目录下创建一个以其姓名命名的权限为700的文件夹,并将这个用户设置为这个文件夹的所有者。而在添加了的Kerberos验证的集群中,用户若想在集群上读写数据,数据是在DataNode上的,那么必需的一点是,这个用户必须在Hadoop集群的DataNode上的各个节点的主机上存在,也就是说我们还需要在各台主机上Linux系统下创建这个用户。
再看KDC中用户的创建,KDC和Hadoop是两个相互独立的主体,KDC密钥分配中心也是搭载在super7上的,创建用户、修改密码等操作,都是通过kadmin也就是KDC的管理客户端,输入命令实现的,这里我们同样是通过执行脚本来实现的,使用expect命令,来控制自动输入,即可。
最后看数据库中用户的信息的添加,这里使用Slick进行数据库的操作,由于用户的密码不能明文存储在数据库中,按一定的规则加密后存入数据库即可。
3.3.2工程管理
内容管理模块的工程管理部分主要实现对模块中所有项目的管理,包括对项目的创建、删除、列表和管理权限、重置权限等功能。
以创建工程举例,从项目的创建说起,分两步执行,一是在HDFS上创建该项目,二是在数据库的project表中添加该项目的相关信息。
在HDFS上创建相应位置的项目文件夹,根据管理员的选择设置其所有者和权限,修改ACL,一共有两条ACL Entry需要被添加,分别是default:user: owner:rwx和user:owner:rwx,具有default属性的ACL Entries会被他的子目录自动继承。这时该项目的权限已经做到了HDFS与管理模块的相统一,项目所有者拥有rwx的超级权限。
另外,千万别忘记数据库中要把表单解析而得数据添加到数据库中,做到数据库与集群上数据的统一。
3.3.3文件管理
本文所设计模块中最重要的功能是对HDFS内容的管理,即HDFS上文件的新建、删除、上传、下载等基本功能,通过这些功能与之前HDFS上的命令行操作一一对应,给予用户更好的操作体验。
以上传为例进行说明,在Hadoop集群的使用过程中,经常遇到的一个问题是,若只是单纯想往HDFS上上传一个文件时,往往需要先把本地的文件移到Linux服务器上,再从服务器通过命令行的形式复制到HDFS上,操作的复杂度大大升高,因此我们设计了基于HTTP协议的数据传输,用户可以通过本课题所设计的网站,直接将文件进行上传。
上传功能的业务逻辑上还有很多需要考虑的部分,比如开始时文件的创建,所有者的修改以及ACL列表的添加等。同时,由于HTTP协议的特殊性,过大文件的上传会比较缓慢,而且过程中不排除出错的可能,因此建议2G以上的文件还是采用FTP的方式上传,不过这也已经能充分满足使用者的日常需要了。
3.3.4权限认证
用户登录时输入用户名、密码,网站的后台校验成功,进行了初步的用户的合法性检验,但这并不是权限认证的重点,权限认证部分的重点应该是如果通过Kerberos验证,以及进行用户操作行为的代理,以使对外看起来身份与权限相统一。
为实现这一部分,一开始采用的操作时,直接检查用户的权限,然后使用高权限用户进行操作后,通过代码来自己控制权限与身份的统一,比如说用户A选择创建一个文件夹,那么我就是用高权限用户eole创建这个文件夹,然后修改文件夹的所有者。但是这部分做出来漏洞十分多,在项目文件上传等复杂操作时,逻辑十分难以统一,于是就想能否把权限的判断和统一交给HDFS自己处理,用户模仿机制的发现成功完美的解决了这个问题。
首先我们使用高权限用户eole的ticket来启动本课题所设计的网站,那么现在进行的任意操作,均是以eole身份进行的,现在我们要开始进行用户的模仿了,关键性代码如下:
val conf = new Configuration()
UserGroupInformation.setConfiguration(conf)
val getDfs = FileSystem.get(conf)
val ugi = UserGroupInformation.createProxyUser(
username,UserGroupInformation.getLoginUser)
ugi.doAs(new PrivilegedAction[Boolean] {
override def run()= {
}
})
利用当前Hadoop环境的配置文件,然后初始化一个UserGroupInformation和一个FileSystem,然后获取需要代理的用户的UserGroupInformation,调用ugi.doAs方法开始用户的模仿,也就是eole用户使用需代理的用户的UserGroupInformation模仿进行操作,具体的操作行为写在run方法里即可,到此,用户的Kerberos验证和用户模仿就已经实现了。
4结语
本文设计实现了HDFS的内容管理模块,即一个Web网站完成了对HDFS上内容的可视化管理。用户可以通过该模块进行文件管理、项目管理和用户管理。文件管理实现了对单或多个文件(夹)进行上传、下载、预览、删除等常见的文件操作。项目管理实现了对项目文件夹进行权限的设定,给予特定的用户特定的权限。用户管理可以对用户进行添加、删除、设置管理员等基础的用户操作。通过该模块,用户不再需要登录Linux系统,输入复杂的命令行进行具体的操作,只需登录该内容管理模块,各项操作的流程简洁明了,用户可以轻松的进行管理,并在实际应用过程中,认可度较高。
5参考文献
[1] 时念云, 王文佳, 马力. 基于普适云的大数据挖掘[J]. 计算机系统应用, 2013, (11):7-12. DOI:10.3969/j.issn.1003-3254.2013.11.002.
[2] 杨丽丽. 云存储网关的研究与实现[D]. 华中科技大学, 2013. DOI:10.7666/d.D414198.
[3] 张云升. 面向数据存储的分布式文件系统的研究与设计[D]. 武汉理工大学, 2012. DOI:10.7666/d.y2098778.
[4] 梁兴辉. 云存储环境下数据副本技术研究[D]. 南京邮电大学, 2013.
[5] 刘莎, 谭良. Hadoop云平台中基于信任的访问控制模型[J]. 计算机科学, 2014, 41(5):155-163.
[6] 黄美东. 公钥Kerberos的跨域认证研究与性能分析[J]. 微型机与应用, 2009, 28(8). DOI:10.3969/j.issn.1674-7720.2009.08.012.
[7] 朱启胜. 基于WPKI的Kerberos身份认证的应用研究[D]. 西安电子科技大学, 2007. DOI:10.7666/d.y1246145.
[8] 刘利民, 尚朝轩. 网格访问控制与授权模型的设计与实现[J]. 计算机工程与设计, 2011, 32(4):1246-1248.
[9] 蒋向阳. 基于Hadoop的云安全存储系统的设计与实现[D]. 广东工业大学, 2014.
[10] 潘富斌. 基于Hadoop的安全云存储系统研究与实现[J]. 电子科技大学, 2013.
[11] 范学辉. 基于HDFS架构的云存储访问控制机制的研究与设计[D]. 河南工业大学, 2013.