Hive的漂移同步解决方案

Hive漂移同步解决方案可检测传入数据中的漂移并更新相应的Hive表。用于Hive漂移同步解决方案以前称为Hive漂移解决方案,它可以根据记录要求创建和更新Hive表,并根据记录头属性将数据写入HDFS或MapR FS。您可以根据需要使用解决方案的全部功能或单个组件。

用于Hive漂移同步解决方案支持处理Avro和Parquet数据。在处理Parquet数据时,该解决方案会生成临时的Avro文件,并使用MapReduce执行器将Avro文件转换为Parquet。

该解决方案与Impala兼容,但是需要其他步骤来刷新Impala元数据缓存。

一般处理

用于Hive漂移同步解决方案结合了Hive Metadata处理器,Hive Metastore目标端以及Hadoop FS或MapR FS目标端,如下所示:

漂移检测
在处理记录时,Hive Metadata处理器会检测列的漂移以及对新表和分区的需求。它生成描述必要变更的元数据记录,并将其传递到Hive Metastore目标端。
当Hive Metastore目标端接收到元数据记录时,它将提议的变更与最新的Hive元数据进行比较,并根据需要创建和更新Hive表。
目标端可以创建表和分区。它可以将列添加到表中,而忽略现有列。它不会从表中删除现有列。
基于记录的写入
Hive Metadata处理器还将信息添加到每个记录的头中,并将记录传递到Hadoop FS目标端或MapR FS目标端。目标端可以根据以下详细信息对其目标系统执行基于记录的写操作:

  • Target directory – Hive Metadata处理器基于用户定义的表达式,组装应存储每个记录的路径。它将生成的路径写入每个记录头中的 targetDirectory属性。

    要将记录写入生成的路径,请配置目标端以使用targetDirectory头属性。

  • Avro schema – 处理器将Avro模式写入每个记录头中的 avroSchema属性。它在必要时根据记录结构生成新的Avro模式。用于Avro和Parquet数据。

    要使用生成的Avro模式,请将目标端配置为使用avroSchema头属性。

  • Roll files – 发生模式更改时,处理器会生成一个滚动指示符—— roll头属性。这允许将具有更改的模式的数据写入更新的Hive表。

    要基于模式更改滚动文件,请使用roll头属性配置目标端。

例如,假设您使用此解决方案将销售数据写入MapR FS。销售系统的部分升级将几个新字段添加到传入数据的子集。

使用针对Hive漂移同步解决方案,Hive Metadata处理器会记下元数据记录中的新字段,并将其传递到Hive Metastore目标端。Hive Metastore目标端将新列添加到Hive目标表中。然后,MapR FS目标端将数据写入更新后的表。将没有新字段的数据写入更新的表时,目标端将为缺少的字段插入空值。

Parquet处理

在处理Parquet数据时,Hive的漂移同步解决方案的工作方式存在一些差异:

使用事件触发Avro to Parquet MapReduce作业
在构建管道时,必须配置数据处理目标端以生成事件。然后,目标端每次关闭输出文件时都会生成事件。
然后,您可以使用MapReduce执行器在每次收到事件时启动将Avro转换为Parquet MapReduce作业。
创建和更新Parquet表
Hive Metastore目标端会根据需要创建和更新Parquet表。 目标端在生成表时使用Stored as Parquet子句,因此不需要为每次更改都生成新的模式。
对Avro输出文件使用临时目录

处理Parquet数据时,Hive Metadata处理器将.avro添加到它为每个记录生成的目标目录中。这样,数据处理目标就可以将Avro文件写入到Hive忽略的临时目录中。

结果,目标将文件写入以下目录:<generated directory>/.avro

您可以配置MapReduce执行程序以将Parquet文件写入父目录generated directory,并在处理它们后删除Avro文件。您还可以根据需要在处理文件后删除临时目录。

Impala支持

漂移同步解决方案针对Hive编写的数据与Impala兼容。

每当Hive metastore中发生更改时,Impala都需要使用Invalidate Metadata命令来刷新Impala元数据缓存。

处理Avro数据时,可以使用Hive Query执行程序自动刷新Impala元数据缓存。有关详细信息,请参阅案例研究:针对Hive的DDS的Impala元数据更新。

处理Parquet数据时,您需要在Hive Metastore目标端对Hive Metastore进行更改之后以及MapReduce执行程序将文件转换为Parquet之后手动运行Impala Invalidate Metadata命令。

您可以设置警报,以在Hive Metastore目标端进行更改时通知您。只需在指向Hive Metastore目标端的链接上添加数据规则警报,并在将元数据记录传递到Hive Metastore时使警报发送电子邮件或webhook。

使用外部工具确定何时将Avro转换为Parquet MapReduce作业。

展平记录

目前,用于Hive漂移同步解决方案不处理带有嵌套字段的记录。如有必要,您可以使用Field Flattener处理器对带有嵌套字段的记录进行扁平化,然后再将它们传递给Hive Metadata处理器。