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 (

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

被折叠的 条评论
为什么被折叠?



