Apache Atlas 数据血缘

码途行者
• 阅读 2074

Apache Atlas 数据血缘

01 什么是数据血缘

数据血缘跟踪、记录、展示了数据来自何处,以及在数据流转过程中应用了哪些转换操作,它有助于追溯数据来源及处理过程。

数据血缘系统的核心功能:

  • 数据资产的自动发现及创建
  • 血缘关系的自动发现及创建
  • 不同视角的血缘及资产分析展示

与数据血缘容易混淆的概念:数据起源。数据起源重点在于跟踪数据的原始来源,包括与数据相关的采集、规则、流程,以帮助数据工程师评估数据的质量。

02 Apache Atlas 及其特性

Atlas 是一套可伸缩且可扩展的数据治理服务,使企业能够有效和高效地满足其在 Hadoop 生态中的合规要求,并允许与整个企业数据生态系统集成。

Atlas 为组织提供开放的元数据管理和治理能力,以建立其数据资产目录、对这些资产进行分类和管理,并为数据科学家、分析师和数据治理团队提供围绕这些数据资产的协作能力。

  • 元数据及实体

预定义的 Hadoop 及非 Hadoop 系统的元数据类型。

基于 Rest API 的类别及实体管理

类别及实体的自动捕获

  • 数据血缘

血缘自动捕获

可探查的数据血缘展示

基于Rest API的数据血缘管理

  • 搜索

可按数据资产类别,实体及属性的搜索

基于 Rest API 的复杂搜索

类 SQL 的搜索语言

  • 安全及敏感数据遮蔽

元数据访问的细粒度管控。

与 Apache Ranger 集成,进行基于实体分类的授权及数据遮蔽。

  • 分类

类别自动发现

实体类别标签自动化

基于血缘分类传播

03 数据血缘视角

(一)工程师视角

数据工程师通常希望看到数据处理细节的血缘,例如数据处理过程中的 mapping,de-duplicate,data masking,merge,join, update, delete, insert 等诸如此类的操作,这样便于在数据出现问题的时候方便他们进行回溯分析定位。

Apache Atlas 数据血缘

(二)业务用户视角

业务用户通常希望看到数据从哪里来,经过了那些关键的处理环节,每个处理环节是谁来负责,他们通常不关心诸如 merge,join 等非常技术细节的操作。例如:

Apache Atlas 数据血缘

在这个典型的用户视角内,最左侧的数据原始发源地,以及爬虫,ftp这些关键节点事实上很难被 Apache Atlas 自动发现和管理,在 Apache Atlas 内这部元数据通常需要手工捕获。

根据 Apache Atlas 版本特性来看,1.0并不支持实体类型的图标定制化功能。2.1的版本支持实体类型图标定制化功能,哥尼斯堡七桥问题成功阐释了一幅图胜过千言万语,同时也诞生了一个全新的学科:图论,选择符合业务实际场景的实体图标类型,往往能减少很多不必要的解释说明。

注意:Apache Atlas 不是一个可以同时兼容两种血缘视角的软件。实际场景,手工捕获缺失的关键实体类别及实体信息,形成完整的数据血缘关系。

04 Apache Atlas 编译部署

Apache Atlas 提供了两种构建模式:

  • 标准模式

标准模式通常用于部署在生产环境中。

mvn clean -DskipTests package -Pdist

*左滑查看更多

  • 嵌入式模式

嵌入式构建模式提供了开箱即用的功能,通常用于 PoC 或者小规模场景。

  • 预打包 Hbase 及 Solr
mvn clean -DskipTests package -Pdist,embedded-hbase-solr

*左滑查看更多

其中 Hbase 为 Atlas 图库提供存储,而 Solr 则负责为 Atlas 提供搜索。

  • 预打包 Cassandra 及 Solr
mvn clean package -Pdist,embedded-cassandra-solr

*左滑查看更多

其中 Cassandra 为 Atlas 图库提供存储,而 Solr 则负责为 Atlas 提供搜索。

不论选择哪种构建模式,避免配置阿里的 Maven 镜像仓库,因为缺少部分依赖包而无法完成构建,在构建过程中,至少保证有20GB的可用空间,构建会在少于2小时内完成。

以嵌入式 embedded-hbase-solr 为例部署一个快速原型的环境。

#!/bin/bash
# This script was tested in EMR 6.3 environment.
# The "embedded Apache HBase & Apache Solr" was tested.

# Create apache directory
sudo mkdir /apache 
sudo chown hadoop.hadoop /apache

# Download JDK
cd /apache
wget https://corretto.aws/downloads/latest/amazon-corretto-11-x64-linux-jdk.tar.gz
tar xzf amazon-corretto-11-x64-linux-jdk.tar.gz

# Download Atlas-2.1.0
# ---------------start---------------
cd /apache
# Please upload your compiled distribution package into your bucket and grant read permission.
curl -O https://your-s3-bucketname.s3.amazonaws.com/apache-atlas-2.1.0-bin.tar.gz
tar xzf apache-atlas-2.1.0-bin.tar.gz
# Configuration
# atlas-env.sh 
# 20 export JAVA_HOME=/apache/amazon-corretto-11.0.12.7.1-linux-x64
sed -i "s%.*export JAVA_HOME.*%export JAVA_HOME=/apache/amazon-corretto-11.0.12.7.1-linux-x64%" /apache/apache-atlas-2.1.0/conf/atlas-env.sh 
sed -i "s%.*export JAVA_HOME.*%export JAVA_HOME=/apache/amazon-corretto-11.0.12.7.1-linux-x64%" /apache/apache-atlas-2.1.0/hbase/conf/hbase-env.sh 

# atlas-application.properties 
# 104 atlas.notification.embedded=false
# 106 atlas.kafka.zookeeper.connect=localhost:2181
# 107 atlas.kafka.bootstrap.servers=localhost:9092
sed -i "s/atlas.graph.index.search.solr.zookeeper-url.*/atlas.graph.index.search.solr.zookeeper-url=localhost:9983" /apache/apache-atlas-2.1.0/conf/atlas-application.properties 
sed -i "s/atlas.notification.embedded=.*/atlas.notification.embedded=false/" /apache/apache-atlas-2.1.0/conf/atlas-application.properties 
sed -i "s/atlas.kafka.zookeeper.connect=.*/atlas.kafka.zookeeper.connect=localhost:9983/" /apache/apache-atlas-2.1.0/conf/atlas-application.properties 
sed -i "s/atlas.kafka.bootstrap.servers=.*/atlas.kafka.bootstrap.servers=localhost:9092/" /apache/apache-atlas-2.1.0/conf/atlas-application.properties
sed -i "s/atlas.audit.hbase.zookeeper.quorum=.*/atlas.audit.hbase.zookeeper.quorum=localhost/" /apache/apache-atlas-2.1.0/conf/atlas-application.properties
# ---------------end---------------


# Solr start
# ---------------start---------------
# Export environment variable
export JAVA_HOME=/apache/amazon-corretto-11.0.12.7.1-linux-x64
export SOLR_BIN=/apache/apache-atlas-2.1.0/solr/bin
export SOLR_CONF=/apache/apache-atlas-2.1.0/conf/solr

# Startup solr
$SOLR_BIN/solr start -c 

# Initialize the index
$SOLR_BIN/solr create_collection -c vertex_index   -d $SOLR_CONF 
$SOLR_BIN/solr create_collection -c edge_index     -d $SOLR_CONF 
$SOLR_BIN/solr create_collection -c fulltext_index -d $SOLR_CONF 
# ---------------end---------------

# Config the hive hook
# ---------------start---------------
sudo sed -i "s#</configuration>#   <property>\n     <name>hive.exec.post.hooks</name>\n     <value>org.apache.atlas.hive.hook.HiveHook</value>\n   </property>\n\n</configuration>#" /etc/hive/conf/hive-site.xml
sudo cp /apache/apache-atlas-2.1.0/conf/atlas-application.properties /etc/hive/conf
sudo sed -i 's%export HIVE_AUX_JARS_PATH.*hcatalog%export HIVE_AUX_JARS_PATH=${HIVE_AUX_JARS_PATH}${HIVE_AUX_JARS_PATH:+:}/usr/lib/hive-hcatalog/share/hcatalog:/apache/apache-atlas-2.1.0/hook/hive%' /etc/hive/conf/hive-env.sh
sudo cp -r /apache/apache-atlas-2.1.0/hook/hive/* /usr/lib/hive/auxlib/
sudo systemctl stop hive-server2
sudo systemctl start hive-server2
# ---------------end---------------

# Start atlas
# ---------------start---------------
# Initialize will be completed in 15 mintues
export MANAGE_LOCAL_HBASE=true
export MANAGE_LOCAL_SOLR=true
python2 /apache/apache-atlas-2.1.0/bin/atlas_start.py
python2 /apache/apache-atlas-2.1.0/bin/atlas_stop.py
python2 /apache/apache-atlas-2.1.0/bin/atlas_start.py
# ---------------end---------------


# Download and startup kafka
# ---------------start---------------
cd /apache
curl -O https://mirrors.bfsu.edu.cn/apache/kafka/2.8.0/kafka_2.13-2.8.0.tgz
tar xzf kafka_2.13-2.8.0.tgz
sed -i "s/zookeeper.connect=.*/zookeeper.connect=localhost:9983/" /apache/kafka_2.13-2.8.0/config/server.properties
/apache/kafka_2.13-2.8.0/bin/kafka-server-start.sh -daemon /apache/kafka_2.13-2.8.0/config/server.properties
# ---------------end---------------

*左滑查看更多

Apache Atlas 虽然内嵌了 Hive/Hbase/Sqoop/Storm/Falcon/Kafka 的 hook ,但是除此之外的其他处理引擎的 plugin 极少,例如目前广泛使用的 Spark/Flink,如果使用这两个计算引擎处理数据,则需要进行定制开发才能捕获相关的数据血缘。

05 手工捕获数据

Apache Atlas 是一个典型的类型继承系统,在追加无法通过 Atlas hook 或者 plugin 自动捕获的数据时,必须先了解其类型系统,及血缘的形成原理。然后根据业务需要创建必要的子类型及其实体。

Apache Atlas 数据血缘

其中绿色标记的为 DataSet 静态子类型,红色标记的为 Process 子类型,Process 实体通过连接作为输入输出的DataSet子类型实体从而形成血缘关系。

06 Spark 与 Apache Atlas

捕获 Spark 数据血缘可以采用以下两大类的方式:

  • Connector, 优点自动化数据捕获
  • REST API,优点定制化程度高

(一) spark-atlas-connector

是 Hortonworks 开源的 Connector,最后一次代码更新是在2019年7月12日,从实际的代码编译结果来看,与 Spark 3.1.1存在兼容性问题。该项目默认的配置(pom.xml):

  • Spark 2.4.0
  • Scala 2.11.12
  • Atlas 2.0.0

如果是2.4.0本的 Spark 可以考虑采用该 connector。

对于该项目使用文档的一些补充,如果使用 rest api 方式进行数据的自动填充,请配置以下参数:

  • rest.address
  • client.username
  • client.password

这些配置选项来源于 AtlasClientConf.scala 文件。

(二)spline

是目前活跃度较高的捕获 Spark 数据血缘的开源项目,但是它与 Atlas 兼容性不好,而是自成一体,但是该项目对于 Spark 的兼容性非常好。

本篇作者

Apache Atlas 数据血缘

杨帅军

资深数据架构师

专注于数据处理。目前主要为车企提供数据治理服务。

Apache Atlas 数据血缘

Apache Atlas 数据血缘

点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
vue+element 表格formatter数据格式化并且插入html标签
前言   vue中element框架,其中表格组件,我既要行内数据格式化,又要插入html标签一贯思维,二者不可兼得也一、element表格数据格式化  !(https://oscimg.oschina.net/oscnet/3c43a1cb3cbdeb5b5ad58acb45a42612b00.p
皕杰报表(关于日期时间时分秒显示不出来)
在使用皕杰报表设计器时,数据据里面是日期型,但当你web预览时候,发现有日期时间类型的数据时分秒显示不出来,只有年月日能显示出来,时分秒显示为0:00:00。1.可以使用tochar解决,数据集用selecttochar(flowdate,"yyyyMMddHH:mm:ss")fromtablename2.也可以把数据库日期类型date改成timestamp
Easter79 Easter79
3年前
sql注入
反引号是个比较特别的字符,下面记录下怎么利用0x00SQL注入反引号可利用在分隔符及注释作用,不过使用范围只于表名、数据库名、字段名、起别名这些场景,下面具体说下1)表名payload:select\from\users\whereuser\_id1limit0,1;!(https://o
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
梦
4年前
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT
Wesley13 Wesley13
3年前
MySQL数据库表设计规范
一、数据库设计1、一般都使用INNODB存储引擎,除非读写比率<1%,才考虑使用MYISAM存储引擎;其他存储引擎请在DBA的建议下使用。2、Storedprocedure(包括存储过程,函数,触发器)对于MYSQL来说还不是很成熟,没有完善的出错记录处理,不建议使用。3、UUID(),USER()这样的
Stella981 Stella981
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Stella981 Stella981
3年前
Linux应急响应(二):捕捉短连接
0x00前言​短连接(shortconnnection)是相对于长连接而言的概念,指的是在数据传送过程中,只在需要发送数据时,才去建立一个连接,数据发送完成后,则断开此连接,即每次连接只完成一项业务的发送。在系统维护中,一般很难去察觉,需要借助网络安全设备或者抓包分析,才能够去发现。0x01应急场景​
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
码途行者
码途行者
Lv1
晚霞真好,日出日落在我眼里都很美。
文章
3
粉丝
0
获赞
0