Hive Hook和MetaStore Listener如何实现元数据管理


这篇文章主要介绍Hive Hook和MetaStore Listener如何实现元数据管理,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!元数据管理是数据仓库的核心,它不仅定义了数据仓库有什么,还指明了数据仓库中数据的内容和位置,刻画了数据的提取和转换规则,存储了与数据仓库主题有关的各种商业信息。按照传统的定义,元数据( Metadata )是关于数据的数据。元数据打通了源数据、数据仓库、数据应用,记录了数据从产生到消费的全过程。元数据主要记录数据仓库中模型的定义、各层级间的映射关系、监控数据仓库的数据状态及ETL 的任务运行状态。在数据仓库系统中,元数据可以帮助数据仓库管理员和开发人员非常方便地找到他们所关心的数据,用于指导其进行数据管理和开发工作,提高工作效率。将元数据按用途的不同分为两类:技术元数据( Technical Metadata)和业务元数据( Business Metadata )。技术元数据是存储关于数据仓库系统技术细节的数据,是用于开发和管理数据仓库使用的数据。如Hive表、列、分区等信息。记录了表的表名。分区信息、责任人信息、文件大小、表类型,以及列的字段名、字段类型、字段备注、是否是分区字段等信息。分布式计算系统运行元数据类似于Hive 的Job 日志,包括作业类型、实例名称、输入输出、SQL 、运行参数、执行时间等。任务调度元数据任务的依赖类型、依赖关系等,以及不同类型调度任务的运行日志等。业务元数据从业务角度描述了数据仓库中的数据,它提供了介于使用者和实际系统之间的语义层,使得不懂计算机技术的业务人员也能够“ 读懂”数据仓库中的数据。常见的业务元数据有:如维度及属性、业务过程、指标等的规范化定义,用于更好地管理和使用数据;数据应用元数据,如数据报表、数据产品等的配置和运行元数据。数据的真正价值在于数据驱动决策,通过数据指导运营。通过数据驱动的方法,我们能够判断趋势,从而展开有效行动,帮助自己发现问题,推动创新或解决方案的产生。这就是数据化运营。同样,对于元数据,可以用于指导数据相关人员进行日常工作,实现数据化“运营”。比如对于数据使用者,可以通过元数据让其快速找到所需要的数据;对于ETL 工程师,可以通过元数据指导其进行模型设计、任务优化和任务下线等各种日常ETL 工作;对于运维工程师,可以通过元数据指导其进行整个集群的存储、计算和系统优化等运维工作。关于数据治理和元数据管理框架,业界有许多开源的系统,比如Apache Atlas,这些开源的软件可以在复杂的场景下满足元数据管理的需求。其实Apache Atlas对于Hive的元数据管理,使用的是Hive的Hooks。需要进行如下配置:通过Hook监听Hive的各种事件,比如创建表,修改表等,然后按照特定的格式把收集的数据推送到Kafka,最后消费元数据并存储。那么,究竟什么是Hooks呢?Hooks 是一种事件和消息机制, 可以将事件绑定在内部 Hive 的执行流程中,而无需重新编译 Hive。Hook 提供了扩展和继承外部组件的方式。根据不同的 Hook 类型,可以在不同的阶段运行。关于Hooks的类型,主要分为以下几种:从名称可以看出,在执行引擎执行查询之前被调用。这个需要在 Hive 对查询计划进行过优化之后才可以使用。使用该Hooks需要实现接口:org.apache.hadoop.hive.ql.hooks.ExecuteWithHookContext,具体在hive-site.xml中的配置如下:在执行计划执行结束结果返回给用户之前被调用。使用时需要实现接口:org.apache.hadoop.hive.ql.hooks.ExecuteWithHookContext,具体在hive-site.xml中的配置如下:在执行计划失败之后被调用。使用时需要实现接口:org.apache.hadoop.hive.ql.hooks.ExecuteWithHookContext,具体在hive-site.xml中的配置如下:HMSHandler初始化是被调用。使用时需要实现接口:org.apache.hadoop.hive.metastore.MetaStoreInitListener,具体在hive-site.xml中的配置如下:在Driver.run开始或结束时运行,使用时需要实现接口:org.apache.hadoop.hive.ql.HiveDriverRunHook,具体在hive-site.xml中的配置如下:Hive 对查询语句进行语义分析的时候调用。使用时需要集成抽象类:org.apache.hadoop.hive.ql.parse.AbstractSemanticAnalyzerHook,具体在hive-site.xml中的配置如下:对于Hive Hooks,本文将给出hive.exec.post.hook的使用案例,该Hooks会在查询执行之后,返回结果之前运行。所谓Metastore Listeners,指的是对Hive metastore的监听。用户可以自定义一些代码,用来使用对元数据的监听。当我们看HiveMetaStore这个类的源码时,会发现:在创建HiveMetaStore的init()方法中,同时创建了三种Listener,分别为MetaStorePreEventListener,MetaStoreEventListener和MetaStoreEndFunctionListener,这些Listener用于对每一步事件的监听。需要扩展此抽象类,以提供在metastore上发生特定事件之前需要执行的操作实现。在metastore上发生事件之前,将调用这些方法。使用时需要继承抽象类:org.apache.hadoop.hive.metastore.MetaStorePreEventListener,在Hive-site.xml中的配置为:需要扩展此抽象类,以提供在metastore上发生特定事件时需要执行的操作实现。每当Metastore上发生事件时,就会调用这些方法。使用时需要继承抽象类:org.apache.hadoop.hive.metastore.MetaStoreEventListener,在Hive-site.xml中的配置为:每当函数结束时,将调用这些方法。使用时需要继承抽象类:org.apache.hadoop.hive.metastore.MetaStoreEndFunctionListener ,在Hive-site.xml中的配置为:对于metastore listener,本文会给出MetaStoreEventListener的使用案例,具体会实现两个方法:onCreateTable和onAlterTable具体实现代码如下:首先将上述代码编译成jar包,放在$HIVE_HOME/lib目录下,或者使用在Hive的客户端中执行添加jar包的命令:接着配置Hive-site.xml文件,为了方便,我们直接 香港云主机使用客户端命令进行配置:上面的代码中我们对一些操作进行了监控,当监控到这些操作时会触发一些自定义的代码(比如输出日志)。当我们在Hive的beeline客户端中输入下面命令时:在$HIVE_HOME/logs/hive.log文件可以看到:上面的查看表操作,不在监控范围,所以没有相对应的元数据日志。当我们在Hive的beeline客户端中创建一张表时,如下:观察hive.log日志:上面的Hook metastore输出值有两个:第一个是数据库的元数据信息第二个是表的元数据信息我们发现上面的表元数据信息中,**cols[]**列没有数据,即没有建表时的字段id和字段name的信息。如果要获取这些信息,可以执行下面的命令:再次观察日志信息:上面的日志中,Hook metastore只有一个输入和一个输出:都表示table的元数据信息。从上面的json中可以看出**”cols”**列的字段元数据信息,我们再来看一下输出json:该output对象不包含新列age,它表示修改表之前的元数据信息具体实现代码如下:使用方式与Hooks有一点不同,Hive Hook是与Hiveserver进行交互的,而Listener是与Metastore交互的,即Listener运行在Metastore进程中的。具体使用方式如下:首先将jar包放在$HIVE_HOME/lib目录下,然后配置hive-site.xml文件,配置内容为:配置完成之后,需要重新启动元数据服务:观察hive.log日志:当我们再执行修改表操作时再次观察日志:可以看出上面有两条记录,第一条记录是old table的信息,第二条是修改之后的表的信息。可以看出:修改之后的表的元数据信息中,包含新添加的列age。以上是“Hive Hook和MetaStore Listener如何实现元数据管理”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注开发云行业资讯频道!

相关推荐: CNVnator的原理是什么

这期内容当中小编将会给大家带来有关CNVnator的原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.比对参考基因组要计算测序深度,首先需要将测序的reads比对到参考基因组上,比对是最关键的一个步骤就是如何比对到…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 09/13 12:12
下一篇 09/13 12:13

相关推荐