Hive MetaStore 源码分析

本文详细介绍了Hive Metastore的启动流程,包括启动脚本、入口类解析、参数配置、服务启动过程及元数据操作类加载等关键步骤,并探讨了metastore的调用方式及Thrift接口实现。

1.启动脚本

 $HIVE_HOME/bin/hive --service hivemetastore   --> $HIVE_HOME/bin/ ext/metastore.sh --> 可以看到入口类org.apache.hadoop.hive.metastore.HiveMetaStore

2.入口类

(1) cli.parse 解析参数

(2) LogUtils.initHiveLog4j 设置日志,创建hiveConf

(3)startMetaStore启动服务

(4)初始化thrift为TBinaryProtocol

(5) 创建HMSHandler  basehandler -->通过newRetryingHMSHandler 初始化basehandler

3.HMSHandler初始化

(1) 通过hive.metastore.rawstore.impl 获取加载的加载元数据的 对象类 ( 该类继承RawStore, 操作数据库)

(2) 通过hive.metastore.init.hooks 获取初始化类,用来额外的初始化HMSHandler

(3) 通过hive.metastore.alter.impl 获取HiveAlterHandler (通过此handler 进行sql 中的alter操作)

(4)createDefaultDB()创建 默认的DB 表  —> 创建默认的角色admin 和 public -->添加admin的用户

(5)通过hive.metastore.pre.event.listeners 获取预处理的监听。此类会实现onEvent方法,在一些thrift接口调用前调用(比如与role 和 授权的一些接口)

(6)通过hive.metastore.event.listeners 获取监听类。(通过实现onCreateTable onDropTbale 等等 来实现一些sql操作后触发的action

(7) 通过hive.metastore.end.function.listeners 获取函数监听 (在sql 函数调用的时候hook)

(8) 通过handler 创建Processor

(9) 通过TThreadPoolServer 创建server 并serve 启动服务


4.metastore 的调用

    public HiveMetaPoolFactory(String metastoreUris, String jdoUrl, String jdoUser,
                               String jdoPassword, String jdoDriverName) {
        this.metastoreUris = metastoreUris;
        this.jdoUrl = jdoUrl;
        this.jdoUser = jdoUser;
        this.jdoPassword = jdoPassword;
        this.jdoDriverName = jdoDriverName;

        Configuration conf = new Configuration();
        if(StringUtils.isNotEmpty(metastoreUris)) {//uris 的访问方式
            conf.set("hive.metastore.uris", metastoreUris);
        } else {
            conf.set("javax.jdo.option.ConnectionURL", jdoUrl);//jdbc的访问方式
            conf.set("javax.jdo.option.ConnectionUserName", jdoUser);
            conf.set("javax.jdo.option.ConnectionPassword", jdoPassword);
            conf.set("javax.jdo.option.ConnectionDriverName", jdoDriverName);
        }
        hConf = new HiveConf(conf, HiveConf.class);
    }

    @Override
    public Object makeObject() throws Exception {
        HiveMetaStoreClient hmsc = new HiveMetaStoreClient(hConf);//创建客户端
        return hmsc;
    }

5. thrift接口 和client 连接池实现

metastore/if/hive_metastore.thrift 文件, 连接池的实现后面会专门写一章节 主要讲述meta client 和 thrift2 client。
内容概要:本文围绕可变桨叶四旋翼无人机的规范控制与点对点运动模拟展开,重点研究优化推力分配策略在翻转动作中的应用与性能比较。通过Matlab代码实现,构建了四旋翼动力学模型,并设计了多种控制算法以实现精确的姿态调整与轨迹跟踪。研究对比了不同推力分配方案在执行高机动性翻转动作时的稳定性、能耗效率与响应速度,旨在提升无人机在复杂飞行任务中的动态性能与控制精度。该仿真研究为无人机飞控系统的设计与优化提供了理论依据和技术支持。; 适合人群:具备一定自动控制理论基础和Matlab编程能力,从事无人机控制、飞行器动力学或机器人系统研究的科研人员及研究生。; 使用场景及目标:① 实现四旋翼无人机在三维空间中的精确点对点运动控制;② 对比分析不同推力分配策略在执行翻转等高难度动作时的控制效果与能耗表现,优化飞行性能;③ 为无人机自主飞行、特技飞行及复杂环境下的机动控制提供算法验证平台。; 阅读建议:此资源以Matlab仿真为核心,建议读者结合相关控制理论知识,深入理解代码实现细节,重点关注动力学建模、控制律设计与推力分配模块。在学习过程中,应动手调试参数,复现文中翻转动作的仿真结果,并尝试拓展至其他复杂飞行任务,以加深对无人机控制机理的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值