2、浅谈Apache Atlas-集成Hive元数据的方式以及初始化

323 阅读4分钟
Atlas 如何集成 Hive 的元数据

​ Atlas 提供了三种方式集成 Hive 的元数据,其中大致可以分为两类

  1. 基于 HiveHook 集成 Hive 元数据(实时,Atlas 官网主推用这个方式)
  2. 基于 Metastore Listener 集成 Hive 元数据(实时)
  3. 基于 HiveMetaStoreBridge 集成 Hive 元数据(离线,一般用于初始化或批处理)
Atlas 集成 Hive 元数据核心操作
<!-- 1、实时集成,修改hive-site.xml文件 -->

<!-- 1.1、采用 Hive Hook 的方式集成 -->
<property>
<name>hive.exec.post.hooks</name>
<value>org.apache.atlas.hive.hook.HiveHook</value>
</property>

<!-- 1.2、采用 Metastore Listener 的方式集成 -->
<property>
<name>hive.metastore.event.listeners</name>
<value>org.apache.atlas.hive.hook.HiveMetastoreHook</value>
</property>

<!-- 2、离线集成,在 Atlas 服务器上执行下述脚本 -->
/<atlas package>/hook-bin/import-hive.sh
<!-- 脚本中实际调用了 HiveMetaStoreBridge 的 main 方法 -->
"${JAVA_BIN}" ${JAVA_PROPERTIES} -cp "${CP}" org.apache.atlas.hive.bridge.HiveMetaStoreBridge $IMPORT_ARGS
什么是 Hook

Hook 是一种编程机制,与语言无关。用于在某个事件发生时指定特定的代码,这里特定的代码被称之为 Hook (钩子/回调)函数。通过 Hook 我们可以获取或者拦截程序运行过程中某些信息以便进行拓展使用,常见的应用场景有:数据库的触发器、编辑工具中的 Debug 断点也是一种 Hook 机制。Hook 使用方式:

  • 某个事件执行之前执行 Hook
  • 某个事件执行时执行 Hook
  • 某个事件执行之后执行 Hook

02-Hook.png

​ 从上图可知 Hook 的常用方式,这个执行也分为两种方式:同步、异步。常见的大数据框架都会有 Hook 的存在,便于使用者针对其进行拓展,提高框架的灵活性以及可扩展性。简单总结下 Hook 的优缺点:

  • 优点:
    • 灵活性:允许在特定的事件插入自定义的逻辑,实现个性化功能。
    • 可扩展性:插件式架构有利于拓展和维护。
    • 解耦:将自定义逻辑与主程序分离,降低代码的耦合度
  • 缺点:
    • 性能开销:Hook 的执行会引入额外的性能开销,尤其是在频繁触发的情况下。
    • 复杂性:Hook 会增加系统的复杂性,引入过多 Hook 调试以及管理也会变得困难。
    • 降低安全性:Hook 使用不当可能会引入安全漏洞,例如未授权访问或数据泄露等。
什么是 Listener

Listener(监听器)是一种编程机制,与语言无关。用于监听和响应特定的事件,通常用于事件驱动的编程模型中。简单理解监听器机制就类似于观察者模式,一个观察者注册被观察者感兴趣事件的监听器,当被观察触发其感兴趣事件时,观察者会得到通知并执行相应的操作。Listener 的基本概念:

  • 事件:某种特定的行为或者状态变化,如:点击按钮、数据变更、网络请求等。
  • 事件源:产生事件的对象或系统,如:用户界面组件、数据库、网络服务等。
  • 监听器:一个对象或者函数,注册了对特定事件的监听,并在事件发生时执行预定的处理逻辑。
  • 事件处理器:是监听器中定义的回调函数,负责处理特定事件的逻辑。

03-Listener.png

​ 上图展现的是最常见的监听器流程,其中对于 Listener 的工作原理为如下三步:

  1. 注册监听器:开发者将监听器注册到事件源上,并告诉事件源在哪个特定事件回调哪个处理函数。
  2. 事件触发:当事件源检测到特定事件发生时,它会调用已注册的监听器的回调函数。
  3. 处理事件:回调函数执行预定的处理逻辑,例如更新用户界面、记录日志、发送通知等。

​ 简单总结下 Listener 的优缺点

  • 优点:
    • 灵活性:监听器允许在运行时动态地注册和取消注册,提供了极大的灵活性。
    • 可扩展性:通过添加新的监听器,可以轻松地扩展系统的功能,而无需修改核心代码。
    • 解耦:监听器将事件处理逻辑与事件源分离,降低了代码的耦合度,提高了代码的可读性和可维护性。
  • 缺点:
    • 性能开销:监听器的执行可能会引入额外的性能开销,尤其是在频繁触发的情况下。
    • 复杂性:增加系统的复杂性,特别是当有多个监听器时管理和调试可能会变得困难。
    • 数据不全:对于特定的事件上下文场景,监听器无法实现。