什么漂移同步

在解释漂移同步之前,首先简单说明以下数据漂移的概念。

数据漂移,简单来说,就是数据存放时间分区错误。在数据仓库的源数据表分区中,同一业务日期数据下包含了不属于该天的数据或者丢失了该天的变更数据。这个一般是时间戳不准确导致的,而时间戳不准确的原因有很多,这里不做过多说明,可以自行查询资料了解。

漂移同步,就是解决数据漂移这个问题的,根据构建的策略,将数据同步到正确的表中。

Hive漂移同步解决方案,是StreamSets提供的一整套解决方案,可以将输入数据实时同步到相应的Hive表中。这个方案除了解决数据漂移的问题,还有一个强大的功能是可以同步多库多表。

环境和设置

环境

服务

版本

操作系统

CentOS Linux release 7.8.2003 (Core)

CDH

6.3.2

StreamSets Data Collector (简称SDC)

3.16.1

由于CDH启用了Kerberos和Sentry,在通过SDC构建Hive漂移同步的Pipeline之前,需要做一些配置。

SDC启用Kerberos之后,默认主体是sdc,下面也是以这个用户进行配置。

设置

HDFS设置

我希望SDC写入Hive warehouse的目录和文件所属是hive用户,要实现这个目的,需要使用SDC的模拟用户配置,同时需要在HDFS中配置sdc的代理配置。

使用管理员登录Cloudera Manger,在HDFS服务的配置中,搜索 core-site.xml 的群集范围高级配置代码段(安全阀),添加如下配置:

配置


说明

hadoop.proxyuser.sdc.hosts

*

允许sdc用户在所有主机上模拟其他用户。

hadoop.proxyuser.sdc.groups

*

允许sdc用户模拟所有用户组的用户。

Hive设置

假设SDC向Hive ods数据库写数据,需要为sdc用户进行授权。

SDC可以自动创建不存在的表,没有测试成功,这里使用手动创建表的方法。

手动创建表,不需要将全部字段创建出来,只需要满足创建表的最小语法要求就行,建完表之后,漂移同步会将其他字段创建出来。

Hive漂移同步方案支持Avro和Parqurt两种存储格式,默认支持Avro,如果要使用Parquet,需要增加一个Avro转Parquet的步骤,这里使用Avro格式。

假设目标表名为 ods_user,拥有字段userid,user_name等,使用userid字段建表,建表语句如下:

CREATE TABLE ods_user (
	userid INT)
PARTITIONED BY(dt STRING)
STORED AS AVRO;

注意,用于建表的字段类型要和源数据相应字段的类型保持一致,否则sdc会报错。

接下来是权限配置,最低权限配置如下:

对象

权限

ods

SELECT,INSERT

ods.*

ALL

Hive漂移同步解决方案

要点说明

Hive漂移同步解决方案主要通过Hive Metadata processor,Hive Metastore destination,和Hadoop FS 或 MapR FS destination 实现。

hive ck hive ck不落盘 数据同步_数据仓库

另外漂移同步不支持嵌套域,如果有嵌套域,需要增加Field Flattener来展开记录,如下:

hive ck hive ck不落盘 数据同步_Hive_02

主要配置说明

我用到的核心的Stages是Hive Metadata processorHive Metastore destination,和Hadoop FS destination。这里对其主要配置进行一些说明,

Hive Metadata processor

General

配置


Stage Library

CDH 6.3.0

Hive

配置


JDBC URL

jdbc:hive2://gateway01.bigdata.zxxk.com:10000/default;principal=hive/gateway01.bigdata.zxxk.com@BIGDATA.ZXXK.COM

Hadoop Configuration Directory

/etc/hive/conf

Table

配置


说明

Database Expression

ods

多库多表时,从header属性获取

Table Name

ods_user

多库多表时,从header属性获取

Partition Configuration

表分区配置

Decimal Scale Expression

小数规模。可以使用表达式或常数。

Decimal Precision Expression

小数精度。可以使用表达式或常数。

两个Decimal配置的默认值是针对JDBC Query Consumer 或 JDBC Multitable Consumer产生的数据的。

Advance

配置


说明

Data Time Zone

+8:00 CT (Asia/Chongqing)

时区。

Data Format

配置


Data Format

Avro

Hive Metastore destination

General

配置


Stage Library

CDH 6.3.0

Hive

配置


JDBC URL

jdbc:hive2://gateway01.bigdata.zxxk.com:10000/default;principal=hive/gateway01.bigdata.zxxk.com@BIGDATA.ZXXK.COM

Hadoop Configuration Directory

/etc/hive/conf

Hadoop FS destination

General

配置


Stage Library

CDH 6.3.0

Connection

配置


说明

Impersonation User

hive

模拟用户。

Kerberos Authentication

True

使用Kerberos认证。

Configuration Files Directory

/etc/hadoop/conf

Output Files

配置


说明

Directory in Header

通用。如果True,则从header属性的targetDirectory中读取。如果False,则使用Directory Template配置。

Directory Template

/user/hive/warehouse/ods.db/ods_user

适用于单库单表,可以指定固定的值。

Data Time Zone

+8:00 CT (Asia/Chongqing)

时区。

Use Roll Attribute

True

使用滚动属性。

Roll Attribute Name

roll

固定值。不要使用其他值。

Data Format

配置


Data Format

Avro

Avro Schema Location

In Record Header