大数据平台下的数据治理

数据治理并不是一个新的概念,但由于国内信息化起步较晚,这个话题直到最近几年才在国内各大公司中引起广泛讨论。数据治理具体是什么,我们真的需要数据治理吗?为了更清楚的了解数据治理是什么,我们先参考一下业界都是怎么说的。

什么是数据治理

数据治理研究所(DGI)于2004年推出了DGI数据治理框架,为企业需要根据数据来做决策的复杂活动提供方法。该框架考虑数据战略专家、数据治理专业人员、业务利益相关者及IT领导者共同关注的问题,比如,如何管理数据实现数据价值,如何最小化成本和复杂性,如何管理风险以及如何确保遵守不断增长的法律法规和其他要求。DGI数据治理框架的目标是:

  • 实现更好的决策
  • 减少操作摩擦
  • 保护数据利益相关者的需求
  • 培训管理层和员工采用共同的数据问题方法
  • 构建标准、可重复的流程
  • 通过协调努力降本增效
  • 确保流程透明度

高等教育统计局(Higher Education Statistics Agency,简称HESA)是英国收集、分析和传播高等教育定量信息的官方机构,提出了HESA数据治理模型。该模型强调:

  • 确保数据安全,管理良好,确保组织面临的风险可控;
  • 防止和纠正数据错误,作为计划持续改进的一部分;
  • 衡量数据质量并提供检测和评估数据质量的改进框架;
  • 制定标准记录数据及其在组织内的使用情况;
  • 作为数据相关问题/变更的升级和决策主体。

Information Builders是美国一家软件咨询公司,在他们提出的数据治理方法中强调,数据治理的核心价值是创建一个模型确保数据的保密性、质量和完整性。这对于满足内外部要求(如财务报告、合规性和隐私权等)至关重要。数据治理通过加强监督,根除风险,有效地将政策与业务战略相结合。Information Builders数据治理模型建议采取渐进式方法进行数据治理,渐进式的做法是实现业务价值并建立数据治理可持续发展计划的实用方式,从而避免在治理过程中做得太过。

Information Builders在构建模型的同时,配以7个步骤辅助实施,确保有效的数据治理:

  • 优先考虑业务改善领域;
  • 最大化信息资产的可用性;
  • 创建并分配角色、职责;
  • 完善和确保信息资产的完整性;
  • 建立问责制;
  • 以主数据文化为基础;
  • 制定流程改进反馈机制。

上述这些框架中的内容听起来比较散乱,但总结起来,我们可以认为,数据治理可以为给企业积累高质量的数据资产,从而为决策提供高质量数据支持,数据治理还可以帮助企业避免一些合规、隐私等问题。这是数据治理的目的。

数据治理实施方法

那么数据治理如何实施呢?

从上面的定义来看,数据治理大部分内容是可以直接通过管理手段来实现的,这也是传统的数据治理的主要方法。一般而言,企业可以先从组织架构的角度建立数据治理的组织支持,比如,设置数据治理委员会,设立数据治理专员职位。然后,数据治理委员会根据公司情况制定数据相关管理规范,由数据治理专员负责监督执行。

使用管理手段来实现数据治理的目的听起来不错,但是我们知道,企业的很多管理制度通常都难以实施。首先是培训成本很高,其次,依靠人去遵循规章制度很容易影响解决问题的效率。那么,在软件技术迅猛发展的今天,我们是不是可以更多的从技术上来解决这个问题呢?

下面我们主要来看一下在大数据平台下,我们如何通过技术手段实施数据治理。

数据平台下实施数据治理

从数据治理的目标来看,我们可以进一步将数据治理划分为:元数据管理、主数据管理、数据标准管理、数据质量管理、数据安全管理。

其中,主数据管理的做法在当下的业界认识中存在一些争议,且主数据管理通常是属于在业务系统中进行数据治理的范畴,在这里我们先略过。

数据质量和数据标准

数据质量和数据标准的相关性较强。好的数据标准的制定需要经过严谨的讨论,有了标准,数据质量的目标可以认为就是让数据符合标准。如果数据都符合标准,那就是高质量的数据了。数据标准的制定通常更偏重人的参与,信息系统在里面可以提供一定的支持,但是由于标准可能在不同的企业中很不一样,这一部分其实难以有一个统一的方案支持。

在进行数据标准管理时,可以考虑将确定的数据标准编写成可以针对数据去运行的规则代码。有了这些规则代码之后,至少可以做两件事,一:可以在设计新数据模型的时候执行自动标准检查,以便尽量让新的设计符合标准;二:可以定期针对已有数据自动执行数据标准检查,从而发现数据问题并提醒数据所有者进行优化改进。

数据质量管理可以采用类似数据标准管理的思路,先定义数据质量规则,然后编写代码落地成可执行的程序。

通过上面的分析可以知道,数据质量和标准管理可以通过数据开发来实现。在基于HDP的大数据平台上目前还没有直接集成相关的工具,不过我们可以找到一些开源工具做支持,比如apache旗下的Griffin可能就是一个不错的起点。

元数据管理和数据安全

除了数据标准和数据质量,数据治理还要求做好元数据管理和数据安全,这两部分内容可能是更为基础的数据需求,特别是数据安全,因为它直接关系到平台能不能在企业中应用的问题。比如,如果数据谁都可以随意访问和下载,可以想象,那将很容易导致企业敏感数据或机密数据外泄。比较起来,数据标准和质量虽然需要尽量做好,但是就算没做好也不至于是一个致命问题。

在一个分布式环境下做元数据管理和数据安全管理不是一件容易的事。比如,由于运行于Hadoop之上的组件非常多,数据库有Hive,计算引擎有SparkNoSQL数据库有Hbase,消息系统有Kafka,各个系统都有自己的元数据,统一的元数据管理要如何实施呢?统一的数据安全要如何实施呢?

基于HDP的大数据平台在这方面的功能相对比较丰富和成熟。HDP集成了AtlasRanger,它们分别用于解决分布式环境中的元数据管理和数据安全管理问题。

利用Atlas进行元数据管理

先来看AtlasAtlas是专门设计为解决Hadoop下的元数据管理问题。Atlas提供了一个通用的元数据管理模型抽象,事实上,使用Atlas我们不仅可以管理Hadoop下的元数据,也可以管理传统的关系型数据库中的元数据。Atlas同时还作为一个基础服务为分布式环境下的数据安全管理提供支持。

使用Atlas,我们可以自由的去定义元数据模型,因此,即便有来自很多不同组件的元数据要进行管理,也可以通过Atlas实现。Atlas的元数据模型还可以支持继承关系,这就提供了一层抽象来帮助我们在不同的组件间复用一部分元数据管理的功能。举个例子,数据存储的一个最基本的形式是表和字段,不管是Hive还是Hbase,表和字段的概念是通用的,只不过Hive支持的字段类型可能更丰富(比如支持嵌套结构)。

听起来比较复杂,但是,实际使用Atlas时,我们可以不关心这些模型的细节,因为Atlas早已经预定义好了大部分组件对应的元数据模型了。除非有扩展的需要,否则我们都可以只关注在如何使用元数据上。

Atlas是如何搜集元数据的呢?这点也无需我们操心,经过配置,Atlas可以自动的从各种数据组件中提取同步元数据。

Atlas自动搜集到的元数据可以通过Atlas提供的查询界面进行搜索,如下图,我们可以根据不同的条件搜索Hive中的表或者字段。从搜索结果中,我们还可以进一步导航到关联的元数据中去,比如,字段可以关联到对应的表。

Atlas search

元数据搜索功能可以方便我们查找数据,一般的企业数据平台中都会存在大量的数据表和字段,强大的元数据搜索功能因此显得很有必要。总体来看,元数据搜索对于促进企业数据发现有很好的帮助。

除了强大的元数据搜索功能,Atlas还提供了自动数据血缘分析功能,如果我们的某些Hive表是通过其他的表加工出来的(比如某个产品的销量指标表),为了理解这些加工好的数据,我们会比较关心它们的加工过程。数据血缘分析就可以帮助到我们,通过可视化的数据血缘关系图,可以很容易看到这些数据是通过什么数据加工出来的。

Atlas data linage

目前Atlas的自动血缘分析功能还不够完善,比如,如果我们代码使用Spark编写的,Atlas就不能自动获取到数据数据血缘图了。不过,现在已有开源的AtlasSpark插件出现了。目前在我们安装的HDP版本中的Atlas还未集成这个插件,如果要自行安装,还需要花费一定的精力。

除了上述搜索和血缘分析功能之外,Atlas还支持对数据进行分类。我们可以创建分类,然后在不同的元数据上打上分类标签。这里的分类非常有用,它不仅可以支持按照数据分类进行搜索,还可以与数据安全组件集成,以便可以根据分类来配置不同的数据安全策略。

前面提到的Atlas的功能都是基于技术元数据的,事实上,在数据平台建设过程中,我们还会很关心业务元数据。业务元数据是指从业务层面给数据加入的一些注解,比如某个数据应该具备什么样的值,有什么样的业务限制,与其他数据有什么关系,可以如何使用等等。新版本的Atlas加入了业务元数据管理的功能,可以支持用户自定义业务层面的信息,同时这些信息也可以用于搜索。

那么在实际使用过程中Atlas有什么问题呢?

我们遇到的一个比较让人烦恼的问题就是数据表的重建问题。比如,由于销售指标计算口径要进行修改,需要加入某个维度,比较方便的方式是直接将原来的表删除,然后新建一张表,但是如果我们这样做,Atlas里面的对应的元数据也会被同步删除,同时被删除的还有该数据表对应的分类信息,业务元数据信息等。这些信息都是人工添加的,一旦删除需要重新添加,这是非常麻烦是一件事。

Atlas data deleted

目前,为了保留Atlas中由手工添加的元数据,我们不得不禁止数据表的删除,所有的修改都需要通过修改表来实现。

总结起来,Atlas为我们提供了很多好用的元数据管理功能。由于Atlas可以免费获得,可以说它为企业数据治理之路做出了很大的贡献,这一切都要感谢开源!

利用Ranger进行数据安全管理

除了元数据管理,数据安全也是数据治理的极为重要的一环,基于HDP的大数据平台可以提供什么支持呢?

一般的数据安全管理通过一系列的安全策略来实现。一个通用的安全模型大概按照以下的方式运行:

  • 用户按照不同的部门或团队进行分组
  • 将需要进行安全控制的系统资源(比如一张数据库表,一个文件等)进行id标记
  • 针对用户或组配置安全策略,指明他们是否具备访问某一资源的权限
  • 访问资源时根据配置的安全策略进行检查,如果通过即放行访问,否则拒绝访问

在大数据场景下进行安全管理的挑战在于需要管理很多个不同的组件。HDP大数据平台集成了Ranger进行数据安全管理。

Ranger是专门为了管理基于Hadoop的分布式环境下的数据安全而设计的。Ranger将上面的通用安全模型进行了抽象,这样一来,其他组件就可以很容易进行适配,从而集成到Ranger内部了。Ranger提供了一套插件机制来供其他组件进行集成,目前Ranger提供了广泛的组件支持,比如hdfs yarn Hive Hbase Kafka Atlas等等。几乎所有的Hadoop相关组件都可以在Ranger的web控制台上进行安全策略的配置。

比如,如果我们要控制hdfs目录/test的访问权限,使之仅可以让名为test的用户去访问。我们可以配置一条hdfs的安全策略如下:

Ranger hdfs policy

hdfs在进行安全策略配置时可以使用模糊匹配的方式指定文件或目录位置,每条策略可以支持配置多个模糊路径,从而可以降低配置的难度。

RangerHive的支持更加丰富,不仅可以支持表级权限控制,还可以支持列级、行级权限控制。有时我们会有数据脱敏访问的需求,在Ranger上我们还可以配置脱敏规则,包括使用内置规则或者自定义规则进行配置。如果配置了脱敏规则,用户在访问Hive时,Hive会通过Ranger插件查询这些规则,进而改写用户的查询语句,实现脱敏访问。

一个典型的脱敏策略及其应用效果如下:

Ranger Hive masking policy

前面提到了Atlas和安全管理的集成,这是怎么回事呢?虽然Ranger已经提供了非常灵活的安全策略配置,但是配置这些策略本身其实是一件很复杂的事情。配置不好还特别容易出错。

举个例子,假如我们想要对用户的手机号进行脱敏。如果用户的手机号只存在一张表里面,那很简单,麻烦之处就在于手机号常常会分散到很多表里面。比如两个业务系统都保存了用户的手机号,那就至少会在两张表,同时我们常常还会有很多加工出来的表,这些表里面也会带入用户的手机号信息,这就带来更多的表了。如果我们要针对手机号配置脱敏规则,我们就可能需要添加很多个策略,复制粘贴不仅容易出错,而且非常不便于修改。

Ranger可以和Atlas进行集成,从而使得我们在配置安全策略时可以针对数据分类来统一进行。比如,我们可以在Atlas中通过搜索找到所有的手机号字段,然后将这些字段都标记为手机号这个分类。然后,在Ranger里面,我们可以选择基于tag的权限配置,然后对这一类数据配置相同的访问权限或者脱敏规则。这是非常高效的配置安全策略的方式。下图是一个示例。

Ranger tag based policy

那么Ranger在使用过程中有什么问题呢?我们在实践过程中遇到过几个不太方便使用的问题。

一是Ranger的用户和组同步频率太低,最快只能配置一小时同步一次(Ranger的用户和组通常是同步至一个外部的企业账号中心,比如Windows平台常用的Active Directory活动目录域账户系统,开源的OpenLDAP轻量级目录服务,同步账号之后才可以对特定账号进行权限配置)。目前控制台上还没有手动同步的功能,如果需要手动同步,需要找到对应的同步类,然后执行Java程序进行调用,这不是很方便了。

另一个问题是,Ranger的权限配置默认打开了审计日志记录的功能,对于某些范围很广的资源进行权限配置时,如果没有关闭这个日志,将很快导致巨量的日志被系统记录下来,很容易造成磁盘空间被打满的问题。同时,Ranger还会将审计日志写入到Solr(日志搜索引擎),从而导致Solr的oom问题。我们在项目上为此花费了不少时间。

想要让Ranger可以支持安全管理功能,一个必备的前提是Hadoop集群本身是打开了Kerberos安全的集群。开启Hadoop集群安全可以通过Ambari界面操作进行一定的简化,但是依然可能碰到不少问题,这主要是由于Kerberos本身就是一个比较复杂的安全协议导致的。

总结

总结起来,在基于HDP的大数据平台下,我们可以选择不少功能强大的开源组件进行数据治理。有了这些软件支持,数据治理就可以不仅仅停留在制度上,更是可以通过软件系统来辅助进行治理。

数据治理是一个重要的数据管理话题,本文简要讨论了数据治理的目标以及实施方法。主要分享了当具体到大数据平台上面时,如何通过技术手段来保障数据治理的顺利进行。有了各种软件系统的辅助,企业数据治理的道路无疑少了很多阻碍。最后,如果大家有更多如何在数据平台上面进行数据治理的问题,欢迎留言交流。