1.概述
Apache Atlas 为组织提供开放式元数据管理和治理功能,用以构建其数据资产目录,对这些资产进行分类和管理,形成数据字典。并为数据分析师和数据治理团队,提供围绕这些数据资产的协作功能
数据字典(Data Dictionary)是信息系统或数据库中的一种工具,用于定义和描述数据的结构、内容及属性,比如从数据字典中,我们可以查到 hive 库的释义,表的介绍以及字段的解释和说明
2.架构原理
3.安装部署
版本:2.1
新特性:
- 更新了组件可以使用 Hadoop3.1、Hive3.1、Hive3.0、Hbase2.0、Solr7.5 和 Kafka2.0
- 将 JanusGraph 版本跟新为 0.3.1
- 更新了身份验证支持可信代理
- 更新了指标模块收集通知
- 支持 Atlas 增量导出元数据
下载:
- Atlas 官网地址:https://atlas.apache.org/
- 文档查看地址:https://atlas.apache.org/2.1.0/index.html
- 下载地址:https://www.apache.org/dyn/closer.cgi/atlas/2.1.0/apache-atlas-2.1.0-sources.tar.gz
注意:这里下载下来的是源码包,需要自己编译
3.1 环境依赖及集群规划
版本说明:
- JDK:1.8
- Hadoop:3.1.3
- MySQL:5.7.26
- Hive:3.1.2
- Zookeeper:3.5.7
- Kafka:2.4.1
- HBase:2.0.5
- Solr:7.7.3
- Atlas:2.1.0
其中除了Solr和Atlas之外,所有的组件都已经安装过了
3.2 Solr安装
- 创建系统用户solr:
sudo useradd solr
(各个节点都要执行) - 设置密码为solr:
echo solr | sudo passwd --stdin solr
- 解压安装包
- 修改目录所有者为solr:
sudo chown -R solr:solr /opt/module/solr-7.7.3
- 修改zookeeper的host:
vim /opt/module/solr-7.7.3/solr.in.sh
,设置:ZK_HOST="hadoop112:2181,hadoop113:2181,hadoop114:2181"
- 分发组件到各个节点
- 启动solr:
sudo -i -u solr/opt/module/solr-7.7.3/bin/solr start
(所有节点上都要执行)
-i
表示模拟登录用户环境。
-u solr
指定以solr
用户身份运行
- 访问web ui:http://hadoop112:8983(任意一个节点的ip都可以)
注意:
出现cloud菜单栏才说明部署成功
3.3 Atlas安装部署
安装很简单,解压apache-atlas-2.1.0-server.tar.gz
包即可
3.3.1 集成HBase
修改atlas-application.properties
文件:
atlas.graph.storage.hostname=hadoop112:2181,hadoop113:2181,hadoop114:2181
修改atlas-env.sh
文件,添加:
export HBASE_CONF_DIR=/opt/module/hbase-2.0.5/conf
3.3.2 集成 Solr
修改atlas-application.properties
文件:
atlas.graph.index.search.solr.zookeeperurl=hadoop112:2181,hadoop113:2181,hadoop114:2181
然后创建solr collection
:
sudo -i -u solr /opt/module/solr-7.7.3/bin/solr create -c vertex_index -d /opt/module/atlas-2.1.0/conf/solr -shards 3 -replicationFactor 2
sudo -i -u solr /opt/module/solr-7.7.3/bin/solr create -c edge_index -d /opt/module/atlas-2.1.0/conf/solr -shards 3 -replicationFactor 2
sudo -i -u solr /opt/module/solr-7.7.3/bin/solr create -c fulltext_index -d /opt/module/atlas-2.1.0/conf/solr -shards 3 -replicationFactor 2
参数解析:
-c <collection_name>
:指定要创建的集合名称-d <config_path>
:指定集合的配置文件路径-shards <num_shards>
:指定分片数量(shards),决定集合在 Solr 集群中分布的物理分片数-replicationFactor <num_replicas>
:指定每个分片的副本数(replicas)
在Graph中可以看到各个集合成功创建:
3.3.3 集成 Kafka
修改atlas-application.properties
文件:
# 设置是否在 Atlas 内部启用嵌入式的通知服务,这里设置为false,即可使用外部配置的通知服务(Kafka)
atlas.notification.embedded=false
atlas.kafka.data=/opt/module/kafka-2.4.1/datas
atlas.kafka.zookeeper.connect=hadoop112:2181,hadoop113:2181,hadoop114:2181/kafka
atlas.kafka.bootstrap.servers=hadoop112:9092,hadoop113:9092,hadoop114:9092
3.3.4 Atlas Server 配置
修改atlas-application.properties
文件:
######### Server Properties #########
atlas.rest.address=http://hadoop112:21000
# If enabled and set to true, this will run setup steps when the server starts
atlas.server.run.setup.on.start=false
######### Entity Audit Configs #########
atlas.audit.hbase.tablename=apache_atlas_entity_audit
atlas.audit.zookeeper.session.timeout.ms=1000
atlas.audit.hbase.zookeeper.quorum=hadoop112:2181,hadoop113:2181,hadoop114:2181
为了记录性能指标,可以修改atlas-log4j.xml
文件,去掉以下这部分代码的注释:
<appender name="perf_appender" class="org.apache.log4j.DailyRollingFileAppender"><param name="file" value="${atlas.log.dir}/atlas_perf.log" /><param name="datePattern" value="'.'yyyy-MM-dd" /><param name="append" value="true" /><layout class="org.apache.log4j.PatternLayout"><param name="ConversionPattern" value="%d|%t|%m%n" /></layout>
</appender>
<logger name="org.apache.atlas.perf" additivity="false"><level value="debug" /><appender-ref ref="perf_appender" />
</logger>
3.3.5 集成 Hive
修改atlas-application.properties
文件,添加如下内容:
######### Hive Hook Configs #######
atlas.hook.hive.synchronous=false
atlas.hook.hive.numRetries=3
atlas.hook.hive.queueSize=10000
atlas.cluster.name=primary
参数详解:
atlas.hook.hive.synchronous
- 含义:控制 Hive Hook 是否以同步方式执行。
- 默认值:通常为
false
。- 值的作用:
false
(异步):Hive 元数据的捕获和传递会在后台线程中执行。适合生产环境,避免因为 Atlas Hook 的延迟影响 Hive 操作的执行true
(同步):Hive 元数据的捕获和传递在 Hive 操作中同步完成。适合开发和调试环境,但可能会增加 Hive 操作的延迟
atlas.hook.hive.numRetries
- 含义:控制 Hive Hook 在元数据传递失败时的重试次数。
- 默认值:
3
。- 值的作用:
- 指定当元数据传递到 Atlas 服务失败时,重试的次数。
- 如果所有重试都失败,元数据操作可能会被丢失,具体行为取决于 Atlas 的容错机制。
- 使用场景:当网络不稳定或 Atlas 服务暂时不可用时,通过设置合理的重试次数可以减少元数据丢失的风险。
atlas.hook.hive.queueSize
- 含义:设置 Hive Hook 用于存储待处理元数据事件的队列大小。
- 默认值:
10000
。- 值的作用:
- 决定 Hook 中用于缓冲 Hive 操作事件的队列容量。
- 如果事件队列满了,新事件可能会被丢弃(视实现而定),因此需要根据 Hive 操作的并发度和 Atlas 的处理能力调整该值。
- 注意事项:过大的队列可能占用较多内存,而过小的队列可能导致事件丢失。
atlas.cluster.name
- 含义:设置 Atlas 集群的名称。
- 默认值:
primary
。- 值的作用:
- 指定当前 Atlas 集群的唯一标识。
- 在多集群环境中,用于区分不同的 Atlas 实例。例如,当多个 Hive 环境都注册到同一个 Atlas 时,可以通过集群名称区分不同的来源。
- 使用场景:
- 在多数据中心或多环境部署时,通过
atlas.cluster.name
可以有效区分元数据的来源。
修改hive-site.xml文件,添加如下内容:
<property><name>hive.exec.post.hooks</name><value>org.apache.atlas.hive.hook.HiveHook</value>
</property>
然后安装hive hook:
- 解压
apache-atlas-2.1.0-hive-hook.tar.gz
- 将 Hive Hook 依赖复制到 Atlas 安装路径:
cp -r apache-atlas-hive-hook-2.1.0/* /opt/module/atlas-2.1.0/
,复制完成后Atlas的安装路径下应有两个目录:hook
和hook-bin
然后修改hive-env.sh
配置文件,添加如下配置(用于加载辅助 JAR 文件 ):
export HIVE_AUX_JARS_PATH=/opt/module/atlas-2.1.0/hook/hive
最后将atlas-application.properties
配置文件拷贝到hive的conf目录下:cp /opt/module/atlas-2.1.0/conf/atlas-application.properties /opt/module/hive-3.1.3/conf/
3.4 Atlas启动
- 启动Hadoop集群
- 启动Zookeeper集群
- 启动Kafka集群
- 启动HBase集群
- 启动 Solr 集群
- 启动Atlas服务:进入安装路径后执行:
bin/atlas_start.py
停止的脚本为
atlas_stop.py
需要注意的是初次启动时需要进行各项初始化操作,所需时间比较长,因此可以通过
tail -f
命令监听Atlas安装路径下的logs/application.log
文件,指导不再继续输出日志,说明成功启动;同时也可以起到查看是否发生报错的作用
- 访问Web UI:http://hadoop112:21000
用户名和密码都是admin
4.简单使用
Atlas 的使用相对简单,其主要工作是同步各服务(主要是 Hive)的元数据,并构建元数据实体之间的关联关系,然后对所存储的元数据建立索引,最终为用户提供数据血缘查看及元数据检索等功能。
4.1 Hive元数据初次导入
执行以下脚本即可导入当前hive中的所有元数据:
/opt/module/atlas-2.1.0/hook-bin/import-hive.sh
适用于数仓已经有了一定规模,但是Atlas刚刚搭建起来的情况,可以一次性将hive的元数据全部导入atlas中
4.2 Hive元数据增量同步
Atlas启动后,Hive 元数据的增量同步无需人为干预,只要 Hive 中的元数据发生变化(执行 DDL 语句),Hive Hook 就会将元数据的变动通知 Atlas。
除此之外,Atlas 还会根据 DML 语句获取数据之间的血缘关系
创建两张表:订单事实表和地区维度表:
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';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';
然后进行数据装载,将相关文件上传到hive表的hdfs路径下即可
建表完成后,可以从atlas中看到这两张表:
4.3 生成血缘依赖
此时这两张表并没有任何的关联,也就是不存在血缘关系,我们可以点开一张表,查看其Lineage,结果为空:
于是我们接下来基于这两张表计算一个需求指标:每个省份的订单次数和订单金额
创建ads层的表:
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;
数据装载完成后,即可看到血缘关系依赖:
可以看到我们的需求指标表依赖于订单事实表和地区维度表
同时也可以查看字段的血缘关系依赖:
如图,order_amount这一字段是通过订单事实表中的final_amount计算而来
学习教程链接:Atlas ,相关安装包在评论区有获取方式