本篇博文主要讲解的是Hue这个开源软件。通过阅读本博客,可以从宏观的角度了解Hue这个应用。
本文介绍了什么是Hue,Hue的架构,Hue的特点,在Hue上面使用Hive的优点,在Hue上浏览文件和数据,使用Hue可以对HDFS做哪些操作, 大数据授权管理的背景,Hue使用的授权管理的组件Sentry,介绍了Sentry的组件和架构,Sentry的特点,工作流的概念,开源工具Oozie和开源工具airflow。
Hue 是一个Web应用,用来简化用户和Hadoop集群的交互。Hue可以让用户浏览HDFS文件系统、查看集群的作业和运行Hive、Pig和Cloudera Impala查询, 能够管理Hive Metastore、HBase、Sqoop、Zookeeper和MapReduce作业, 还可以通过Hue使用Oozie创建和安排工作流。
Hue应用运行在浏览器中,不需要安装客户端。
下图所示Hue是如何进行工作的。用户通过浏览器访问Hue的服务器端(Hue Server),Hue Server 再访问CDH1, 所以Hue Server起到了连接浏览器应用和CDH之间的桥梁作用。2
开源,最早是由Cloudera Desktop演化而来,由Cloudera贡献给开源社区
默认基于轻量级sqlite数据库管理会话数据,用户认证和授权,可以自定义为MySQL、Postgresql,以及Oracle
基于文件浏览器(File Browser)访问HDFS
基于Hive编辑器来开发和运行Hive查询
支持基于Solr进行搜索的应用,并提供可视化的数据视图,以及仪表板(Dashboard)
支持基于Impala的应用进行交互式查询
支持Spark编辑器和仪表板(Dashboard)
支持Pig编辑器,并能够提交脚本任务
支持Oozie编辑器,可以通过仪表板提交和监控Workflow、Coordinator和Bundle
支持HBase浏览器,能够可视化数据、查询数据、修改HBase表
支持Metastore浏览器,可以访问Hive的元数据,以及HCatalog
支持Job浏览器,能够访问MapReduce Job(MR1/MR2-YARN)
支持Job设计器,能够创建MapReduce/Streaming/Java Job
支持Sqoop 2编辑器和仪表板(Dashboard)
支持ZooKeeper浏览器和编辑器
支持MySql、PostGresql、Sqlite和Oracle数据库查询编辑器
使用sentry基于角色的授权以及多租户的管理.(Hue 2.x or 3.x)
用户可以在Hue中进行Apache Hive数据仓库的相关操作。用户可以创建Hive数据库、表和分区,加载数据,创建、运行和管理Hive查询, 还可以下载查询结果并存储为office Excel表或者CSV文件。
集成HiveServer2之后,增加了用户角色的授权管理,在Hue中操作Hive变得更加安全,比如:如果某用户缺少某数据库或数据库表的权限,那么该用户就没有相关web页面的操作接口。
Hue提供了一个能够提高生产效率的Hive网页编辑器:
除了上面所述的功能特点,还可以:
进行相关的高级查询设置
$parametername
引用这些参数。查看历史查询结果。
查看、编辑、复制和删除已经保存的查询。
Hue提供了查看Hive、Hbase、HDFS相关数据的可视化接口。
使用Hue操作HDFS3, 可以:
大数据平台上细粒度的访问权限控制
大数据平台安全体系的四个层次说起:外围安全、数据安全、访问安全以及访问行为监控.
外围安全技术多指传统意义上提到的网络安全技术,如防火墙,登陆认证等;
数据安全从狭义上说包括对用户数据的加解密,又可细分为存储加密和传输加密;还包括用户数据的脱敏,脱敏可以看做“轻量级”的数据加密。如某人的生日为“2014-12-12”,脱敏后的数据为“2014-x-x”。数据的轮廓依然存在,但已无法精确定位数值。脱敏的程度越高数据可辨认度越低。上述的例子还可脱敏为“x-x-x”,相当于完全对外屏蔽该信息。
访问安全主要是对用户的授权进行管理。Linux/Unix系统中用户-组的读、写、执行权限管理堪称其中的经典模型。HDFS对这一概念进行了扩充,形成了更加完备的ACL体系;另外随着大数据的应用的普及和深入,文件内部数据访问权限差异化的需求也变得越来越重要;
访问行为监控多指记录用户对系统的访问行为:如查看哪个文件;运行了哪些SQL查询;访问行为监控一方面为了进行实时报警,迅速处置非法或者危险的访问行为;另一方面为了事后调查取证,从长期的数据访问行为中分析定位特定的目的。
在这四个安全的层次中,第三层同上层业务的关系最为直接:应用程序的多租户,分权限访问控制都直接依赖这一层的技术实现。
在上述的第三层中,Hadoop生态圈长久以来一直沿用Linux/Unix系统的授权管理模型,将文件的访问权限分为读-写两种权限(HDFS上没有可执行文件的概念),将权限的所有者划分为三个大类:拥有者(owner),所在组(group),以及其他人(other)。这种模型限制权限的所有者只能有三类。如果试图增加一个新的“组”,并设定该组的用户拥有不同于owner,group或other的权限,现有的Linux/Unix授权模型是无法优雅地解决这个问题的。
举例来说明上述状况:假设有一个销售部门,部门经理manager具有修改销售数据sales_data的权利;销售部门的成员具有查看sales_data的权利,销售部门以外的人无法看到销售数据sales_data。那么对于销售数据sales_data的授权如下所示:
-rw-r----- 3 manager sales 0 2015-01-25 18:51 sales_data
后来该销售部门扩充了人员,又来两个销售经理,一个叫manager1,另一个叫manager2。这两个销售经理也被允许修改销售数据。这种情况下,manager1和manager2只能使用一个新账号manager_account,然后使该账号能够使用setuid对sales_data进行修改。这使得对同一份数据的权限管理变得复杂而不容易维护。
由于上述问题的存在,Hadoop2.4.0中添加了对HDFS ACL(Access Control Lists)的支持。这一新特性很好地解决了上述的问题。然而随着Hadoop在企业中广泛地应用,越来越多的业务场景要求大数据访问控制的粒度也不再局限在文件级别,而是更加细致地约束文件内部的数据哪些能被读写,哪些只能被读,哪些完全不允许被访问。对于基于SQL的大数据引擎来说,数据访问不止要到表粒度,更要精确到行列级别。
Sentry是细粒度的、基于用户角色授权的Hadoop的模块。它为授权用户提供细粒度的数据访问权限控制。它在2016年3月成功由Apache的孵化项目变成了Apache的顶级项目4。HueServer2使用了Sentry进行相关授权管理。
Sentry的组件:
Sentry依赖底层的授权系统(比如Kerberos和LDAP)标识用户,同时,它使用配置在Hadoop中的用户组映射机制来确保当这个用户组被映射成其他Hadoop组件的用户组后,Sentry也能够识别。
假设用户Alice和Bob属于同一个用户组,组名叫“finance-department”。Bob还属于“finance-managers”组。在Sentry中,我们创建一个叫Analyst的角色,然后授予这个角色查询(SELECT)Customer和Sales表的权限。然后把Analyst这个角色放到“finance-department”用户组中。因为Alice和Bob都是“finance-department”用户组的成员,所以Alice和Bob拥有查询Customer和Sales表的权限。
以角色为基础的访问控制(role-based access control – RBAC)是企业用来管理大量用户和数据对象权限的强大机制。一个组织中的新数据对象会被频繁增加和删除,其成员也会频繁加入、移动和离开。RBAC让这些管理工作变得简单很多。结合上面这个例子,如果一个叫Carol的成员加入了finance department这个部门,我们只需要把她加入“finance department”用户组,她就拥有了访问Customer和Sales表的权限。
另一个重要的一点是Sentry是统一授权的。访问控制规则一旦定义好,这些规则就统一作用于多个数据访问工具(比如Hive、Impala、Pig)。举一个例子:结合上面所举的例子,我们授予Analyst角色给“finance-department”用户组,使得用户Alice、Bob和其他该组成员拥有了查询权限。这个权限不仅仅作用于Hive、Impala,还作用于MapReduce、Pig和HCatalog。
在Hadoop生态中集成Sentry
上图表示,使用Sentry集成Hadoop各个组件。Sentry为Hadoop多个组件提供服务。Sentry Server 存储着授权元数据,同时提供修改和查询这些元数据的接口。9
如果Bob用户提交如下Hive查询语句:
select * from production.sales
Hive将会识别到是Bob在请求查询Sales表。首先Sentry Plugin组件会获取Bob访问Sales表的权限,再由Policy Engine判断Bob是否有这个权限。
Sentry可以提供许多查询限制,这些查询限制具有“一致性”,它们不受用户使用的方式影响。比如,如果某用户没有通过命令行窗口访问某一数据的权限,那么他同样不能通过浏览器或者其他控制台访问。
Hue提供了非常人性化的结果展示功能。
除此之外,还有其他的展示方式,比如折线图
、地图
等等。
工作流是指业务过程的部分或者整体在计算机应用环境下的自动化。它主要解决的问题是:为实现某个业务目标,利用计算机在多个参与者之间按某种预定规则自动传递文档、信息或者任务。简单地说,工作流就是一系列相互衔接、自动进行的业务活动或任务。一个工作流包括一组任务(或活动)及它们的相互顺序关系,还包括流程及任务(或活动)的启动和终止条件,以及对每个任务(或活动)的描述。工作流的应用,改进和优化了业务流程,实现更好的业务过程控制,提高业务工作效率。
在Hadoop生态圈中,有一个组件叫做Oozie,它让我们可以把多个Map/Reduce作业组合到一个逻辑工作单元中,从而完成更大型的任务。Oozie其实是一种Java Web工作流应用程序,它运行在Java servlet容器——即Tomcat——中,并使用数据库来存储以下内容:
Oozie工作流是放置在控制依赖DAG(有向无环图 Direct Acyclic Graph)中的一组动作(例如,Hadoop的Map/Reduce作业、Pig作业、Hive、Sqoop、Distcp,甚至Java程序和shell脚本),其中指定了动作执行的顺序。我们会使用hPDL(一种XML流程定义语言)来描述这个图。10工作流任务由时间和数据的可用性触发。11
Airflow目前正在Apache孵化器中12,但是已经被包括雅虎在内的很多公司使用13。
这个平台拥有和 Hive、Presto、MySQL、HDFS、Postgres和S3交互的能力,并且提供了钩子使得系统拥有很好地扩展性。
Airflow提供了一个基于Web的用户界面,让用户可以可视化管道的依赖关系、监控进度、触发任务等。15
通过Tree界面,我们可以看到正在执行的DAG,能够快速查看DAG中的某一个作业的开始时间和结束时间。还可以快速知道哪个作业阻塞了。
Graph页面是最通俗易懂的,因为它可视化了整个DAG,包括它的依赖部分以及正在运行的状态。
通过Variable页面,可以设置key-value的变量。支持使用星号代替明文。
通过Gantt Chart,可以看到任务的持续时间和交叠情况,可以快速定位任务的瓶颈所在。
通过Task Duration页面,可以清楚地看到不同的任务的运行状况。这个视图可以帮助您找到异常点,并知道哪个任务拖慢了整个DAG。
Code 页面,可以让我们查看DAG代码。