apache-atlas-hive-bridge-源码分析

本文详细介绍了Hive的元数据类型及其管理,包括HiveMetaStoreBridge的批量采集流程。通过HiveMetaStoreBridge的构造和main方法,展示了如何导入Hive的元数据,如数据库、表、列等信息。在导入过程中,涉及到Hive的存储描述符、列和分区键的处理,以及外部表的处理逻辑。此外,还分析了如何注册数据库和表实体,并处理它们之间的关系。

Hive 元数据类型

public enum HiveDataTypes {
   
   
    // Enums 枚举
    HIVE_OBJECT_TYPE,
    HIVE_PRINCIPAL_TYPE,
    HIVE_RESOURCE_TYPE,

    // Structs 结构体
    HIVE_SERDE,
    HIVE_ORDER,
    HIVE_RESOURCEURI,

    // Classes 类
    HIVE_DB,
    HIVE_STORAGEDESC,
    HIVE_TABLE,
    HIVE_COLUMN,
    HIVE_PARTITION,
    HIVE_INDEX,
    HIVE_ROLE,
    HIVE_TYPE,
    HIVE_PROCESS,
    HIVE_COLUMN_LINEAGE,
    HIVE_PROCESS_EXECUTION,
    // HIVE_VIEW,
    ;
    public String getName() {
   
   
        return name().toLowerCase();
    }
}

元数据采集

Hive 的元数据采集分为2个部分:

1、 批量采集 HiveMetaStoreBridge
2 、实时变更采集 HiveHook

本文先分析HiveMetaStoreBridge ,批量采集 HiveMetaStoreBridge 流程图如下所示:
在这里插入图片描述
注册tableEntity步骤中,会处理存储描述器sd、hive列、分区键等信息,在注册tableEntity的时候,会同时注册存储描述器sd、hive列、分区键实体等

HiveMetaStoreBridge构造函数

public HiveMetaStoreBridge(Configuration atlasProperties, HiveConf hiveConf, AtlasClientV2 atlasClientV2) throws Exception {
   
   
// 元数据命名空间
    this.metadataNamespace          = getMetadataNamespace(atlasProperties);
// hive客户端
    this.hiveClient                 = Hive.get(hiveConf);
//atlas 客户端
    this.atlasClientV2              = atlasClientV2;
// 将tHdfsPath转成小写
    this.convertHdfsPathToLowerCase = atlasProperties.getBoolean(HDFS_PATH_CONVERT_TO_LOWER_CASE, false);
}

HiveMetaStoreBridge#main 方法

public static void main(String[] args) {
   
   
//...
    try {
   
   
// 1、准备
// 读取命令行参数
        Options options = new Options();
        options.addOption("d", "database", true, "Database name");
        options.addOption("t", "table", true, "Table name");
        options.addOption("f", "filename", true, "Filename");
        options.addOption("failOnError", false, "failOnError");

        CommandLine   cmd              = new BasicParser().parse(options, args);
        boolean       failOnError      = cmd.hasOption("failOnError");
// 指定数据库
        String        databaseToImport = cmd.getOptionValue("d");
// 指定数据库表b
        String        tableToImport    = cmd.getOptionValue("t");
// 从文件中读取
        String        fileToImport     = cmd.getOptionValue("f");
// 获取配置文件
        Configuration atlasConf        = ApplicationProperties.get();
        String[]      atlasEndpoint    = atlasConf.getStringArray(ATLAS_ENDPOINT);

        if (atlasEndpoint == null || atlasEndpoint.length == 0) {
   
   
            atlasEndpoint = new String[] {
   
    DEFAULT_ATLAS_URL };
        }

//  初始化AtlasClientV2客户端
        if (!AuthenticationUtil.isKerberosAuthenticationEnabled()) {
   
   
            String[] basicAuthUsernamePassword = AuthenticationUtil.getBasicAuthenticationInput();
            atlasClientV2 = new AtlasClientV2(atlasEndpoint, basicAuthUsernamePassword);
        } else {
   
   
            UserGroupInformation ugi = UserGroupInformation.getCurrentUser();
            atlasClientV2 = new AtlasClientV2(ugi, ugi.getShortUserName(), atlasEndpoint);
        }

// 2、创建HiveMetaStoreBridge
        HiveMetaStoreBridge hiveMetaStoreBridge = new HiveMetaStoreBridge(atlasConf, new HiveConf(), atlasClientV2);
//3、导入
        if (
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

风的心愿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值