Atlas学习笔记(1)—— 基础入门

1.概述

Apache Atlas 为组织提供开放式元数据管理和治理功能,用以构建其数据资产目录,对这些资产进行分类和管理,形成数据字典。并为数据分析师和数据治理团队,提供围绕这些数据资产的协作功能

数据字典(Data Dictionary)是信息系统或数据库中的一种工具,用于定义和描述数据的结构、内容及属性,比如从数据字典中,我们可以查到 hive 库的释义,表的介绍以及字段的解释和说明

2.架构原理

3.安装部署

版本:2.1

新特性:

  1. 更新了组件可以使用 Hadoop3.1、Hive3.1、Hive3.0、Hbase2.0、Solr7.5 和 Kafka2.0
  2. 将 JanusGraph 版本跟新为 0.3.1
  3. 更新了身份验证支持可信代理
  4. 更新了指标模块收集通知
  5. 支持 Atlas 增量导出元数据

下载:

  1. Atlas 官网地址:https://atlas.apache.org/
  2. 文档查看地址:https://atlas.apache.org/2.1.0/index.html
  3. 下载地址:https://www.apache.org/dyn/closer.cgi/atlas/2.1.0/apache-atlas-2.1.0-sources.tar.gz

注意:这里下载下来的是源码包,需要自己编译

3.1 环境依赖及集群规划

版本说明:

  1. JDK:1.8
  2. Hadoop:3.1.3
  3. MySQL:5.7.26
  4. Hive:3.1.2
  5. Zookeeper:3.5.7
  6. Kafka:2.4.1
  7. HBase:2.0.5
  8. Solr:7.7.3
  9. Atlas:2.1.0

其中除了Solr和Atlas之外,所有的组件都已经安装过了

3.2 Solr安装

  1. 创建系统用户solr:sudo useradd solr(各个节点都要执行)
  2. 设置密码为solr:echo solr | sudo passwd --stdin solr
  3. 解压安装包
  4. 修改目录所有者为solr:sudo chown -R solr:solr /opt/module/solr-7.7.3
  5. 修改zookeeper的host:vim /opt/module/solr-7.7.3/solr.in.sh,设置:ZK_HOST="hadoop112:2181,hadoop113:2181,hadoop114:2181"
  6. 分发组件到各个节点
  7. 启动solr:sudo -i -u solr/opt/module/solr-7.7.3/bin/solr start(所有节点上都要执行)

-i 表示模拟登录用户环境。

-u solr 指定以 solr 用户身份运行

  1. 访问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

参数详解:

  1. atlas.hook.hive.synchronous
  • 含义:控制 Hive Hook 是否以同步方式执行。
  • 默认值:通常为 false
  • 值的作用:
    • false(异步):Hive 元数据的捕获和传递会在后台线程中执行。适合生产环境,避免因为 Atlas Hook 的延迟影响 Hive 操作的执行
    • true(同步):Hive 元数据的捕获和传递在 Hive 操作中同步完成。适合开发和调试环境,但可能会增加 Hive 操作的延迟
  1. atlas.hook.hive.numRetries
  • 含义:控制 Hive Hook 在元数据传递失败时的重试次数。
  • 默认值:3
  • 值的作用:
    • 指定当元数据传递到 Atlas 服务失败时,重试的次数。
    • 如果所有重试都失败,元数据操作可能会被丢失,具体行为取决于 Atlas 的容错机制。
  • 使用场景:当网络不稳定或 Atlas 服务暂时不可用时,通过设置合理的重试次数可以减少元数据丢失的风险。
  1. atlas.hook.hive.queueSize
  • 含义:设置 Hive Hook 用于存储待处理元数据事件的队列大小
  • 默认值:10000
  • 值的作用:
    • 决定 Hook 中用于缓冲 Hive 操作事件的队列容量。
    • 如果事件队列满了,新事件可能会被丢弃(视实现而定),因此需要根据 Hive 操作的并发度和 Atlas 的处理能力调整该值。
  • 注意事项:过大的队列可能占用较多内存,而过小的队列可能导致事件丢失。
  1. 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:

  1. 解压apache-atlas-2.1.0-hive-hook.tar.gz
  2. 将 Hive Hook 依赖复制到 Atlas 安装路径:cp -r apache-atlas-hive-hook-2.1.0/* /opt/module/atlas-2.1.0/,复制完成后Atlas的安装路径下应有两个目录:hookhook-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启动

  1. 启动Hadoop集群
  2. 启动Zookeeper集群
  3. 启动Kafka集群
  4. 启动HBase集群
  5. 启动 Solr 集群
  6. 启动Atlas服务:进入安装路径后执行:bin/atlas_start.py

停止的脚本为atlas_stop.py

需要注意的是初次启动时需要进行各项初始化操作,所需时间比较长,因此可以通过tail -f命令监听Atlas安装路径下的logs/application.log文件,指导不再继续输出日志,说明成功启动;同时也可以起到查看是否发生报错的作用

  1. 访问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 ,相关安装包在评论区有获取方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

THE WHY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值