大数据之数据治理架构 —— Atlas

文章目录

        • 什么是数据治理?
        • 什么是 Atlas?
        • Atlas 的作用
        • Atlas 架构
          • Atlas 架构解析
        • Atlas 大数据集群搭建
          • JDK 与 Hadoop 搭建
          • MySQL 与 Hive 搭建
          • Zookeeper 与 HBase 搭建
          • Kafka 搭建
          • Solr 搭建
          • Atlas 搭建与集成
        • Atlas 启动
        • Hive 元数据导入
        • Atlas 模拟生成血缘依赖

什么是数据治理?

数据治理是一种组织和管理数据资源的过程,旨在确保数据的质量、安全性、可靠性、可访问性和合规性,以支持企业决策和运营需求。

数据治理涉及制定和执行数据管理策略、规则和流程,包括数据分类、数据质量管理、数据安全和隐私保护、数据共享和访问控制、数据存储和备份等方面。

数据治理通常需要跨部门合作,包括IT、业务和法务等部门,以确保数据资源在整个企业中的有效管理和利用。数据治理对于企业决策的准确性和效率至关重要,可以提高数据价值、减少风险和遵守法规要求。

什么是 Atlas?

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

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

Atlas 的作用

元数据类型和实例

  • 各种 Hadoop 和非 Hadoop 元数据的预定义类型
  • 能够为要管理的元数据定义新类型
  • 类型可以有原始属性、复杂属性、对象引用;可以继承自其他类型
  • 类型的实例,称为实体,捕获元数据对象的详细信息及其关系
  • 用于处理类型和实例的 REST API 允许更轻松的集成

分类

  • 能够动态创建分类,如 PII、EXPIRES_ON、DATA_QUALITY、SENSITIVE
  • 分类可以包括属性——比如 EXPIRES_ON 分类中的 expiry_date 属性
  • 实体可以与多个分类相关联,从而更容易发现和安全实施
  • 通过沿袭传播分类,自动确保分类在数据经过各种处理时遵循

血统

  • 直观的 UI 可在数据通过各种流程时查看数据沿袭
  • 用于访问和更新沿袭的 REST API

搜索/发现

  • 用于按类型、分类、属性值或自由文本搜索实体的直观 UI
  • 丰富的 REST API 可按复杂条件进行搜索
  • 用于搜索实体的类似 SQL 的查询语言 - 领域特定语言 (DSL)

安全和数据屏蔽

  • 元数据访问的细粒度安全性,支持对实体实例的访问和添加/更新/删除分类等操作的控制
  • 与 Apache Ranger 的集成可以根据与 Apache Atlas 中实体相关的分类对数据访问进行授权/数据屏蔽。例如:
    • 谁可以访问分类为 PII、敏感的数据
    • 客户服务用户只能看到归类为 NATIONAL_ID 的列的最后 4 位数字

Atlas 架构

大数据之数据治理架构 —— Atlas_第1张图片
Atlas 架构解析

底层:

Atlas 的最底层是通过 HBase 与 Solr 完成对 Atlas 组件的元数据存储。

Core 核心层:

  • Ingest / Export:Ingest 组件允许将元数据添加到 Atlas。同样,Export 组件公开 Atlas 检测到的元数据更改,并将其作为事件引发。消费者可以使用这些更改事件来实时响应元数据更改。

  • Type System 类型系统:Atlas 允许用户为他们想要管理的元数据对象定义模型。该模型由称为“类型”的定义组成。称为“实体”的“类型”实例代表了被管理的实际元数据对象。类型系统是一个允许用户定义和管理类型和实体的组件。开箱即用的 Atlas 管理的所有元数据对象(例如 Hive 表)都使用类型建模并表示为实体。

  • Graph Engine 图引擎:在内部,Atlas 使用图模型持久化它管理的元数据对象。这种方法提供了极大的灵活性,并能够有效地处理元数据对象之间的丰富关系。图形引擎组件负责 Atlas 类型系统的类型和实体之间的转换,以及底层图形持久化模型。除了管理图形对象外,图形引擎还为元数据对象创建适当的索引,以便可以有效地搜索它们。Atlas 使用 JanusGraph 来存储元数据对象。

Integration 消息传递层:

用户可以使用以下两种方法管理 Atlas 中的元数据。

  • Messaging 消息传递:用户可以选择使用基于 Kafka 的消息传递接口与 Atlas 集成。这对于将元数据对象与 Atlas 通信以及使用来自 Atlas 的元数据更改事件都非常有用,可以使用这些事件构建应用程序。如果希望使用与 Atlas 的耦合更松散的集成以实现更好的可伸缩性、可靠性等,则消息传递接口特别有用。Atlas 使用 Apache Kafka 作为通知服务器,用于挂钩和元数据通知事件的下游消费者之间的通信。事件由钩子和 Atlas 写入不同的 Kafka 主题。

  • API:Atlas 的所有功能都通过 REST API 公开给最终用户,该 API 允许创建、更新和删除类​​型和实体。它也是查询和发现 Atlas 管理的类型和实体的主要机制。

Metadata sources 元数据源层:

Atlas 支持与开箱即用的许多元数据源集成。目前,Atlas 支持从以下来源获取和管理元数据:

  • HBase
  • Hive
  • Sqoop
  • Storm
  • Kafka

集成意味着两件事:Atlas 本地定义元数据模型来表示这些组件的对象。Atlas 提供了一些组件来从这些组件中摄取元数据对象(在某些情况下以实时或批处理模式)。

Apps 应用层:

Atlas 管理的元数据被各种应用程序使用,以满足许多治理用例。

  • Atlas Admin UI:该组件是一个基于 Web 的应用程序,允许数据管理员和科学家发现和注释元数据。这里最重要的是搜索界面和类似 SQL 的查询语言,可用于查询 Atlas 管理的元数据类型和对象。管理 UI 使用 Atlas 的 REST API 来构建其功能。

  • 基于标签的策略:Apache Ranger是 Hadoop 生态系统的高级安全管理解决方案,与各种 Hadoop 组件广泛集成。通过与 Atlas 集成,Ranger 允许安全管理员定义元数据驱动的安全策略以实现有效治理。Ranger 是 Atlas 通知的元数据更改事件的消费者。

Atlas 大数据集群搭建

从 Atlas 的架构中,我们可以看出其涉及的大数据组件很多,例如:HBase、Solr、Hadoop、Kafka、Hive 等等,在正式搭建 Atlas 之前,我们需要先确保这些相关的组件都已经搭建完毕,且能够正常启动运行。

架构搭建计划如下:

服务名称 子服务 hadoop104服务器 hadoop105服务器 hadoop106服务器
Java JDK
HDFS NameNode
HDFS DataNode
HDFS SecondaryNameNode
Yarn Resourcemanager
Yarn NodeManager
HistoryServer JobHistoryServer
Zookeeper QuorumPeerMain
Kafka Kafka
HBase HMaster
HBase HRegionServer
Solr Jar
Hive Hive
MySQL MySQL
Atlas Atlas
JDK 与 Hadoop 搭建

参考我的这篇博客:Hadoop 完全分布式搭建(超详细)

启动服务后,相关节点运行如下图所示:

大数据之数据治理架构 —— Atlas_第2张图片
MySQL 与 Hive 搭建

参考我的这篇博客:Hive 搭建(将 MySQL 作为元数据库)

启动服务后,相关组件运行如下图所示:

大数据之数据治理架构 —— Atlas_第3张图片
MySQL 运行图
Hive 运行图
Zookeeper 与 HBase 搭建

参考我的这篇博客:HBase 分布式搭建

启动服务后,相关节点运行如下图所示:

大数据之数据治理架构 —— Atlas_第4张图片
Kafka 搭建

参考我的这篇博客:Kafka 搭建

启动服务后,相关节点运行如下图所示:

大数据之数据治理架构 —— Atlas_第5张图片
Solr 搭建

参考我的这篇博客:大数据之 Solr 集群搭建

选择任意一台主机地址,访问 Solr 的默认端口 8983 ,成功启动如下图所示:

Atlas 搭建与集成
  1. 解压压缩包
tar -zxvf apache-atlas-2.1.0-server.tar.gz -C /opt/module/

# 修改名称
cd /opt/module
mv apache-atlas-2.1.0/ atlas
  1. 配置环境变量

使用命令 vi /etc/profile 编辑环境变量文件,添加如下参数:

#ATLAS_HOME
export ATLAS_HOME=/opt/module/atlas
export PATH=$PATH:$ATLAS_HOME/bin

相关路径注意修改成自己的,然后通过 source /etc/profile 使环境生效。

  1. Atlas 集成 HBase

Atlas 的底层是通过 HBase 去存储元数据的。

修改 Atlas 安装目录下的 conf/atlas-application.properties 配置文件,为 HBase 设置 Zookeeper 的连接地址。

atlas.graph.storage.hostname=hadoop104:2181,hadoop105:2181,hadoop106:2181

修改 Atlas 安装目录下的 atlas-env.sh 环境配置文件,设置 HBase 的目录。

export HBASE_CONF_DIR=/opt/module/hbase-2.0.5/conf
  1. Atlas 集成 Solr

修改 Atlas 安装目录下的 conf/atlas-application.properties 配置文件,为 Solr 设置 Zookeeper 的连接地址。

大数据之数据治理架构 —— Atlas_第6张图片
atlas.graph.index.search.solr.zookeeper-url=hadoop104:2181,hadoop105:2181,hadoop106:2181

创建 Solr 集合,因为在 Atlas 中是通过 Solr 来负责存储图形数据索引信息的,所以需要创建点、线(边缘)以及全文(图)索引。

# 创建点索引,设置 3 个分片以及两个副本
sudo -i -u solr solr create -c vertex_index -d /opt/module/atlas/conf/solr -shards 3 -replicationFactor 2

# 创建线(边缘)索引,设置 3 个分片以及两个副本
sudo -i -u solr solr create -c edge_index -d /opt/module/atlas/conf/solr -shards 3 -replicationFactor 2

# 创建全文(图)索引,设置 3 个分片以及两个副本
sudo -i -u solr solr create -c fulltext_index -d /opt/module/atlas/conf/solr -shards 3 -replicationFactor 2

创建完成后,我们可以在 Solr 的 WEB 界面中查看索引结构,如下所示:

大数据之数据治理架构 —— Atlas_第7张图片

  1. Atlas 集成 Kafka

修改 Atlas 安装目录下的 conf/atlas-application.properties 配置文件,为 Kafka 设置相关参数。

大数据之数据治理架构 —— Atlas_第8张图片
# 是否开启 atlas 的通知嵌入
atlas.notification.embedded=false

# 指定 kafka 的 data 目录
atlas.kafka.data=/opt/module/kafka/data

# 指定 kafka 的 zookeeper 连接地址
atlas.kafka.zookeeper.connect=hadoop104:2181,hadoop105:2181,hadoop106:2181/kafka

# 指定 kafka 的连接地址
atlas.kafka.bootstrap.servers=hadoop104:9092,hadoop105:9092,hadoop106:9092
  1. Atlas Server 配置

修改 Atlas 安装目录下的 conf/atlas-application.properties 配置文件。

大数据之数据治理架构 —— Atlas_第9张图片
# 设置 atlas 的默认 WEB 访问地址
atlas.rest.address=http://hadoop104:21000

# 每次启动 atlas 是否都进行初始化
atlas.server.run.setup.on.start=false

# 为 atlas 绑定 zookeeper 地址
atlas.audit.hbase.zookeeper.quorum=hadoop104:2181,hadoop105:2181,hadoop106:2181
  1. Atlas 集成 Hive

修改 Atlas 安装目录下的 conf/atlas-application.properties 配置文件,在该文件末尾添加如下参数:

#########  Hive  Configuration ########
# 是否开启 hive 的自动同步测试
atlas.hook.hive.synchronous=false
# 重试次数
atlas.hook.hive.numRetries=3
# 最大队列大小
atlas.hook.hive.queueSize=10000
# 集群名称
atlas.cluster.name=primary

修改 Hive 的配置文件 hive-site.xml,配置钩子属性,如下所示:

	<property>
		<name>hive.exec.post.hooksname>
		<value>org.apache.atlas.hive.hook.HiveHookvalue>
	property>

安装 Hive 的 Atlas 钩子程序。

tar -zxvf apache-atlas-2.1.0-hive-hook.tar.gz -C /opt/module/

复制 Hive 钩子程序的文件夹到 Atlas 目录下。

cd /opt/module/apache-atlas-hive-hook-2.1.0

cp -r ./* /opt/module/atlas/

接下来需要修改 Hive 的环境变量 hive-env.sh 配置文件。

cd $HIVE_HOME/conf/

# 复制模板文件并改名
cp hive-env.sh.template hive-env.sh

# 然后编辑复制的文件,在其中添加如下参数,指定 Hive 的 hook 目录
export HIVE_AUX_JARS_PATH=/opt/module/atlas/hook/hive

最后将 Atlas 配置文件目录下的 atlas-application.properties 文件拷贝到 Hive 中的 conf 目录下。

cp /opt/module/atlas/conf/atlas-application.properties $HIVE_HOME/conf/

Atlas 集群 Hive 完成。

Atlas 启动

从 Atlas 的设计架构中就可以看出,它的运行依附了许多组件,所以,在启动 Atlas 之前,我们需要先启动如下组件:

  • Hadoop
  • Zookeeper
  • Kafka
  • HBase
  • Solr

上述组件启动后,相关服务节点如下所示:

大数据之数据治理架构 —— Atlas_第10张图片

然后最终再启动 Atlas 服务。

# 启动 atlas
atlas_start.py

# 停止 atlas
atlas_stop.py

首次启动需要大概五分钟左右,启动期间会频繁打印 . 符号,启动成功后,会出现如下提示:

大数据之数据治理架构 —— Atlas_第11张图片

并且使用 jps 命令,可以查看到 Atlas 进程:

大数据之数据治理架构 —— Atlas_第12张图片

但启动成功后,我们发现,还是无法访问 Atlas 的 WEB 界面,如下所示:

大数据之数据治理架构 —— Atlas_第13张图片

这是由于 Atlas 还在做初始化工作,还需要再耐心等待三四分钟,然后再次刷新,就看到了 Atlas 的登录界面:

大数据之数据治理架构 —— Atlas_第14张图片
默认的账号密码都是 admin

登录进入之后,Atlas 的基本界面如下所示:

大数据之数据治理架构 —— Atlas_第15张图片

Hive 元数据导入

我们可以通过 Atlas 提供的 Hive 钩子程序来直接进行首次元数据的同步,但在这之前,我们需要在 Hive 中创建一个表来进行模拟数据。

首先,我们进入 MySQL 中修改 Hive 的元数据库相关字段字符编码格式为 utf8,修改完成后,无需重启 MySQL 和 Hive 就能生效。

这一步的目的是避免后面在 Atlas 中查看中文字符时出现乱码情况。

# 切换到 Hive 的元数据库中
use metastore;

# 修改字段注释字符集
alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;

#修改表注释字符集
alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;

# 修改分区表参数,以支持分区键能够用中文表示
alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;

# 修改索引注解
alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;

然后修改 Hive 的配置文件 hive-site.xml,设置 JDBC 的连接参数,如下所示:

        <property>
                <name>javax.jdo.option.ConnectionURLname>
                <value>jdbc:mysql://hadoop104:3306/metastore?useSSL=false&useUnicode=true&characterEncoding=UTF-8value>
        property>

进入 Hive 中,创建测试表。

drop table if exists student;
create table student(
id int comment '学号',
name string comment '姓名',
age int comment '年龄',
sex string comment '性别')
row format delimited fields terminated by '\t'; 

# 插入一些模拟数据
insert into student values(1,"张三",20,"男"),(2,"李四",20,"男"),(3,"王五",21,"男"),(4,"张梅",20,"女"),(5,"王甜甜",21,"女");

插入后数据如下所示:

大数据之数据治理架构 —— Atlas_第16张图片

字符编码显示正常:

大数据之数据治理架构 —— Atlas_第17张图片

下面我们就可以通过运行 Atlas 提供的 Hive 钩子程序来进行首次元数据的导入了。

# 进入 Atlas 的安装目录
cd /opt/module/atlas

# 进入我们拷贝来的 Hive 的 hook-bin 目录
cd /hook-bin

直接运行该脚本文件 import-hive.sh

运行后会提示输入 Atlas 的账号与密码,默认都是 admin

大数据之数据治理架构 —— Atlas_第18张图片

导入完成后会出现 Hive Meta Data imported successfully!!! 提示,表示导入成功。

导入的时长和元数据量大小有关,后续 Hive 的元数据 Atlas 都会自动更新同步,无需再次执行该钩子程序。

我们打开 Atlas 的 WEB 界面,查看导入的元数据资产信息,点击右上角的统计标志。

大数据之数据治理架构 —— Atlas_第19张图片

然后就会发现我们的数据资产,显然我们的元数据已经首次同步完成了。

大数据之数据治理架构 —— Atlas_第20张图片

Atlas 模拟生成血缘依赖

模拟创建两张表。

  1. 订单表
CREATE TABLE dwd_order_info (
`id` STRING COMMENT '订单号',
`final_amount` DECIMAL(16,2) COMMENT '订单最终金额',
`order_status` STRING COMMENT '订单状态',
`user_id` STRING COMMENT '用户 id',
`payment_way` STRING COMMENT '支付方式',
`delivery_address` STRING COMMENT '送货地址',
`out_trade_no` STRING COMMENT '支付流水号',
`create_time` STRING COMMENT '创建时间',
`operate_time` STRING COMMENT '操作时间',
`expire_time` STRING COMMENT '过期时间',
`tracking_no` STRING COMMENT '物流单编号',
`province_id` STRING COMMENT '省份 ID',
`activity_reduce_amount` DECIMAL(16,2) COMMENT '活动减免金额',
`coupon_reduce_amount` DECIMAL(16,2) COMMENT '优惠券减免金额',
`original_amount` DECIMAL(16,2) COMMENT '订单原价金额',
`feight_fee` DECIMAL(16,2) COMMENT '运费',
`feight_fee_reduce` DECIMAL(16,2) COMMENT '运费减免'
) COMMENT '订单表'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
  1. 地区表
CREATE TABLE dim_base_province (
`id` STRING COMMENT '编号',
`name` STRING COMMENT '省份名称',
`region_id` STRING COMMENT '地区 ID',
`area_code` STRING COMMENT '地区编码',
`iso_code` STRING COMMENT 'ISO-3166 编码,供可视化使用',
`iso_3166_2` STRING COMMENT 'IOS-3166-2 编码,供可视化使用'
) COMMENT '省份表'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

模拟数据下载:数据治理-模拟数据下载

数据导入:

load data local inpath '/opt/software/base_province.txt' into table dwd_order_info;

load data local inpath '/opt/software/order_info.txt' into table dim_base_province;

下面来建立一张需求表,用于保存订单表与地区表的合并分析结果。

CREATE TABLE `ads_order_by_province` (
`dt` STRING COMMENT '统计日期',
`province_id` STRING COMMENT '省份 id',
`province_name` STRING COMMENT '省份名称',
`area_code` STRING COMMENT '地区编码',
`iso_code` STRING COMMENT '国际标准地区编码',
`iso_code_3166_2` STRING COMMENT '国际标准地区编码',
`order_count` BIGINT COMMENT '订单数',
`order_amount` DECIMAL(16,2) COMMENT '订单金额'
) COMMENT '各省份订单统计'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

执行需求,统计各个省份的订单量以及金额:

insert into table ads_order_by_province 
select
    '2021-08-30' dt,
    bp.id,
    bp.name,
    bp.area_code,
    bp.iso_code,
    bp.iso_3166_2,
    count(*) order_count,
    sum(oi.final_amount) order_amount
from 
   dwd_order_info oi
left join 
   dim_base_province bp 
on 
   oi.province_id=bp.id
group by bp.id,bp.name,bp.area_code,bp.iso_code,bp.iso_3166_2;

运行完成后,我们进入 Atlas 查看表的血缘关系:

  1. 查看数据字典
大数据之数据治理架构 —— Atlas_第21张图片
  1. 查看表
大数据之数据治理架构 —— Atlas_第22张图片
  1. 查看表的血缘关系
大数据之数据治理架构 —— Atlas_第23张图片

所以说呢,Atlas 就是做这么一个事情,通过对数据仓库的监控,生成十分详细的血缘依赖图,能够对你执行的操作进行增量同步,数据资产清晰可见,适合在大型项目中使用,部署过程有点繁琐。

大数据之数据治理架构 —— Atlas_第24张图片

你可能感兴趣的:(大数据,hadoop,数据仓库,分布式,Atlas)