《数据资产管理核心技术与应用》第三章数据血缘是什么?

摘要:《数据资产管理核心技术与应用》是清华大学出版社出版的一本图书,全书共分10章,第1章主要让读者认识数据资产,了解数据资产相关的基础概念,以及数据资产的发展情况。第2~8章主要介绍大数据时代数据资产管理所涉及的核心技术,内容包括元数据的采集与
《数据资产管理核心技术与应用》是清华大学出版社出版的一本图书,全书共分10章,第1章主要让读者认识数据资产,了解数据资产相关的基础概念,以及数据资产的发展情况。第2~8章主要介绍大数据时代数据资产管理所涉及的核心技术,内容包括元数据的采集与存储、数据血缘、数据质量、数据监控与告警、数据服务、数据权限与安全、数据资产管理架构等。第9~10章主要从实战的角度介绍数据资产管理技术的应用实践,包括如何对元数据进行管理以发挥出数据资产的更大潜力,以及如何对数据进行建模以挖掘出数据中更大的价值。 图书介绍:数据资产管理核心技术与应用 今天主要是给大家分享一下第三章的内容: 第三章的标题为数据血缘->关注清哥聊技术公众号,了解更多技术文章 内容思维导图如下: 1、获取数据血缘的技术实现 1.1、如何从Hive中获取数据血缘 Hive 是典型的数据仓库的代表,也是大数据中离线数据分层模型设计的代表,并且支持HQL的数据处理和计算,所以Hive为了方便用户做数据跟踪,在底层设计时,其实就考虑到了数据血缘跟踪这个问题。Hive 自身的血缘在其源码中主要通过org.apache.hadoop.hive.ql.hooks.LineageLogger.java 来输出,org.apache.hadoop.hive.ql.hooks.LineageLogger.java代码中主要处理的过程如下图所示,血缘主要通过edges(DAG图的流向)和vertices(DAG图的节点)来进行输出。《数据资产管理核心技术与应用》读书笔记 在org.apache.hadoop.hive.ql.hooks.LineageLogger.java的源码中定义了其支持的4种SQL操作类型,分别为QUERY(查询)、CREATETABLE_AS_SELECT(将Select 查询创建为一张表)、ALTERVIEW_AS(修改视图)、CREATEVIEW(创建视图)。 org.apache.hadoop.hive.ql.hooks.LineageLogger.java在解析和生成edges(DAG图的流向)和vertices(DAG图的节点)信息时,会判断QueryPlan(查询计划)的类型是否是支持的4种SQL操作类型中的一种,如果不是的话,就不会解析和生成edges和vertices。 org.apache.hadoop.hive.ql.hooks.Hook.java是Hive提供的Hook(钩子)功能,用于在Hive 任务执行前或者执行后,注入自定义的的操作代码。 具体的代码实现,可以直接参考纸质书,这里不再赘述。 1.2、从Spark 执行计划中获取数据血缘 Spark底层生成执行计划以及处理执行计划的过程如下图所示。 从图中可以看到, 1、 执行SQL语句或者Data Frame时,会先生成一个Unresolved Logical Plan,就是没有做过任何处理和分析的逻辑执行计划,仅仅会从SQL语法的角度做一些基础性的校验。 2、 之后通过获取Catalog的数据,对需要执行的SQL语句做表名、列名的进一步分析校验,从而生成一个可以直接运行的逻辑执行计划。 3、 但是Spark底层会有个优化器来生成一个最优的执行操作方式,从而生成一个优化后的最佳逻辑执行计划。 4、 将最终确定下来的逻辑执行计划转换为物理执行计划,转换为最终的代码进行执行。 Spark的执行计划其实就是数据处理的过程计划,会将SQL语句或者DataFrame 做解析,并且结合Catalog一起,生成最终数据转换和处理的代码。所以可以从Spark的执行计划中,获取到数据的转换逻辑,从而解析到数据的血缘。但是spark的执行计划都是在spark底层内部自动处理的,如何获取到每次Spark任务的执行计划的信息呢?其实在Spark底层有一套Listener的架构设计,可以通过Spark Listener 来获取到spark 底层很多执行的数据信息。 在spark的源码中,以Scala的形式提供了一个org.apache.spark.sql.util.QueryExecutionListener trait (类似Java 语言的接口),来作为Spark SQL等任务执行的监听器。在org.apache.spark.sql.util.QueryExecutionListener 中提供了如下表所示的两个方法。
阅读全文