背景
Atlas主要负责同步各服务(主要是Hive)的元数据,并构建元数据实体之间的关联关系,并对所存储的元数据建立索引,为用户提供数据血缘关系查看及元数据检索等功能。
Atlas在安装之初,需要手动执行一次元数据的全量导入,后续Atlas便会通过HiveHook增量同步Hive元数据,关于CentOS7下Hive的安装及使用,请参见CentOS7下Hive的安装使用
导入元数据
进入Atlas编译结果根目录,进入apache-atlas-1.2.0-hive-hook/apache-atlas-hive-hook-1.2.0/hook-bin/目录
[root@scentos target]# cd apache-atlas-1.2.0-hive-hook/apache-atlas-hive-hook-1.2.0/hook-bin/
[root@scentos hook-bin]#
执行以下脚本,过程中要输入的Atlas用户名密码默认均为admin
[root@scentos hook-bin]# ./import-hive.sh
执行结果如下:
查看元数据
按类型搜索
在web界面中搜索hive_table类型的元数据,会得到右边的结果,这些都是我Hive中现有的表:
选择某张表,可以看到其血缘关系,血缘关系由HQL执行的insert语句决定:
Hive元数据增量同步
首先,打开hive-cli,创建三张表:
CREATE TABLE dwd_order_info_atlas (
`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_atlas (
`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';
CREATE TABLE `ads_order_by_province_atlas` (
`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';
运行结果如下:
然后将事先准备的order_info.txt和base_province.txt分别加载到表dwd_order_info和dim_base_province中:
hive> load data local inpath '/home/szc/order_info.txt' into table dwd_order_info_atlas;
hive> load data local inpath '/home/szc/base_province.txt' into table dim_base_province_atlas;
最后通过HQL的select语句向ads_order_by_province表中加载数据:
insert into table ads_order_by_province_atlas
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_atlas oi
left join dim_base_province_atlas bp
on oi.province_id=bp.id
group by bp.id,bp.name,bp.area_code,bp.iso_code,bp.iso_3166_2;
再查看ads_order_by_province_atlas表的血缘关系:
以及某个字段的血缘关系:
遇到的问题及解决方法
在hive-cli中执行MR任务时,如果遇到hdfs://XXX文件找不到的错误,将该文件上传即可,我总共是将atlas源码目录、tez目录(没有可不管)和Hadoop目录都上传到了hdfs://home/szc/下:
[root@scentos hadoop-2.7.2]# bin/hadoop fs -copyFromLocal /home/szc/apache-atlas-sources-1.2.0/ /home/szc/
[root@scentos hadoop-2.7.2]# bin/hadoop fs -copyFromLocal /home/szc/apache-tez-0.9.1/ /home/szc/
[root@scentos hadoop-2.7.2]# bin/hadoop fs -copyFromLocal /home/szc/hadoop-2.7.2/ /home/szc/
结语
Atlas学习笔记至此结束。