1 目标库配置
1.1 创建用户及赋权
创建用户
create user 'zcbus'@'%' identified by 'zcbus';
用户赋权
grant all on *.* to zcbus@'%' identified by 'zcbus'; flush privileges;
2 补充说明
2.1 订阅相关操作
* Hive支持自动建表,不支持自动同步DDL。
* Hive不支持update和delete操作,需要开启审计模式使用。
* 在开始同步之前请开启订阅通道参数ifFilterRealDDL,增量装载时过滤掉ddl操作。
* 建表时请注意字段名是否含有#号开头,暂不支持同步以#开头的列。
* 同步开启前请将并发线程数修改为1,避免并发丢数。
2.1.1 准确配置以下关键参数
- 说明:
- 在API端口服务处选择之前创建好的API客户端,API服务地址由系统自动填写。
- Hive端口号填写Hiveserver2服务的端口号。
- HDFS端口填写访问NameNode的端口号。
- HDFS路径填写文件上传到HDFS的存放路径(hdfs_path区别于Hive建表时的location路径,当有多个通道往Hive订阅数据时,应分别配置不同的hdfs_path),如图所示:
- 用户名为Hive的操作用户,密码填写Hive用户的密码。
- authentication和principal等配置均与HDFS的Kerberos认证相关,请根据参数注释进行配置。
- version为Hive JDBC驱动程序(hive-jdbc-*-standalone.jar,*为Hive版本号)的版本号,和Hive的版本相同。
- table_format为生成的Hive数据文件格式,暂时支持textfile和orc,默认使用textfile
2.1.2 特殊属性通道参数说明
发送全量数据时,在通道属性处修改MERGE_KAFKA_MESSAGE_MAX_LEN参数提升效率
- 参数描述:
- 此参数可以指定Merge后数据包的大小,单位M,最小为5M,最大上限根据数据库类型有所不同,当前Hive可以支持1024M,其他类型10M。
- 此参数修改后,需要重启服务才能生效。
- 参数描述:
Hive支持同步分区表,在通道属性处修改partition_pattern参数
- 参数描述:
- 填写dt='YYYY-MM-DD'可指定分区为源端数据的操作日期,日期会自动更新。
- 注:当前仅支持日期字段,并且需要目标端创建相应的分区表,指定字段为
- 参数描述:
点击数据表选项,对目标库信息进行配置,注意配置applybykey参数
- 参数描述:
- 数据在应用的时候,针对不存在主键、唯一键的表,则需要配置此功能,在更新和删除的时候,依赖此参数,设置对应的应用条件列。ApplyByKey 优先级最高,其次为主键,再其次为唯一键,即默认情况没有配置ApplyByKey,情况下优先使用主键、其次唯一键。对于源端数据有主键的表可直接点击自动补充选项;对于源端无主键的表需要自行添加。
- 参数描述:
开启数据延迟加载real_delay_load_max和real_delay_load_min,配置增量同时只加载1张表real_load_table_count_at_once
- 参数描述:
(1)增量延迟加载最大时间,单位为分钟,默认为0,不延迟。real_delay_load_min和real_delay_load_max必须同时设置,而且real_delay_load_max需要大于real_delay_load_min。 如果(当前时间-kafka里数据的时间) <= real_delay_load_min,则暂时不加载,等到(当前时间-kafka里数据的时间) > real_delay_load_max启动加载,直到(当前时间-kafka里数据的时间) <= real_delay_load_min暂停加载,进入下一轮等待。
(2)增量延迟加载最小时间,单位为分钟,默认为0,不延迟。
(3)增量时同时装载的表个数,默认为0,所有的表一起装载。
- 参数描述:
配置参数table_properties为Hive自动建表添加对应的properties
- 参数描述:
表的额外属性,需要替换的部分设置特定关键字,例如: hive自动建表,支持分区,属性配置,以及路径等信息,支持属性参数种含有table_name参数 partitioned by (dt string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\001’ STORED AS TEXTFILE LOCATION ‘/user/hive/warehouse/other/#table_name#’
- 参数描述:
备注:
(1)MERGE_KAFKA_MESSAGE_MAX_LEN参数受订阅目标端Hive写入效率影响,300-500M为适当区间,请逐步修改参数优化写入速率。
(2)Hive中,可以用String、Date和Timestamp表示日期时间,String和Date均 用 yyyy-MM-dd的形式表示,Timestamp用 yyyy-MM-dd hh:mm:ss 的形式表示。在通道属性处配置了相关时间参数后,请在手动创建Hive表时特别注意字段类型,以免出现数据写入失败的问题。
(3)当前软件仅支持Hive数据的存储格式为TEXTFILE和ORC格式,请在建表时注意指定存储格式或验证订阅端Hive的默认存储格式,HDFS在接收文件时不会对存储格式进行校验,但在Hive查询数据时会报格式不匹配的错误。
(4)当前软件仅支持按照日期分区,全量历史数据会写入发布数据的当日分区,增量数据的分区字段是根据数据的源端操作时间来自动设置的。
2.1.3 文件存放目录赋权
hdfs dfs -chmod 777 hdfs_path
2.2 KERBEROS认证
如客户环境为zookeeper管理的hive集群模式,在zookeeper认证中 采用KERBEROS三段式认证方式:principal=hadoop.hadoop.com@HADOOP.COM ;通过zookeeper后 zookeeper自动将principal改为dmo@HADOOP.COM,数据上传HDFS仍需要再次进行KERBEROS 认证。
注意:
- (1) principal大小写敏感,且时差必须在五分钟之内;
- (2) 数据库配置时 host填写如下信息:jdbc:hive2://10.29.43.39:21066/default;principal=hive/hadoop.hadoop.com@HADOOP.com;
port,user,password置空即可—因为采用KERBEROS认证 不再需要输入用户密码等信息 ;- (3) 配置HDFS时注意dfs.data.transfer.protection参数 要求两端保持一致
2.2.1 在后台程序中:可用如下内容检测hive连接是否正常
[root@a6647b3b0b79 jar]# java -cp zcbusService.jar com.zcbus.connector.HiveAccess -h
ZCBUS_CACHE_PATH=/usr/local/zcbus/cache
ZCBUS_CLUSTERID=0
Usage:
-h help
-server user/pwd@ip:port hive ip port
-jdbc jdbc:hive2://node72.xdata:10000
hive jdbc string
-principal hive/node72.xdata@EXAMPLE.COM
for kerberos
-customerid 10000 for kerberos make keytab file name
-hdfs ip:port hdfs ip port
-version 2.1 can be 2.1, default 3.1
-table node0.t1 test select count of node0.t1
-jar /tmp/hive-jdbc-2.1.1-standalone.jar
hive jar file path
例如:
java -Duser.timezone=Asia/Shanghai -Djava.security.krb5.conf=/usr/local/zcbus/config/10004_krb5.conf -cp zcbusService.jar com.zcbus.connector.HiveAccess -jdbc "jdbc:hive2://10.29.34.39:21066/default;principal=hive/hadoop.hadoop.com@HADOOP.COM" -principal dmo@HADOOP.COM -customerid 10004 -hdfs 10.29.34.40:25000
2.2.2 在后台程序中:可用如下内容检测hdfs连接是否正常
[root@a6647b3b0b79 jar]# java -cp zcbusService.jar com.zcbus.connector.HadoopAccess -h
ZCBUS_CACHE_PATH=/usr/local/zcbus/cache
ZCBUS_CLUSTERID=0
Usage:
-h help
-hdfs ip:port hadoop ip port
-user hadoop user
-principal dmo@HADOOP.COM for kerberos
-customerid 10000 for kerberos make keytab file name
-put /usr/1.txt /hadoop/1.txt upload file to hdfs
例如:
java -Duser.timezone=Asia/Shanghai -cp zcbusService.jar com.zcbus.connector.HadoopAccess -hdfs 10.29.34.40:25000 -principal dmo@HADOOP.COM -customerid 10004 -put /usr/local/zcbus/cache/db_service10019/1.txt hdfs://hacluster/user/hive/warehouse/test.db/
2.3 配置目标数据库参数列表
序号 | 参数名 | 参考值 | 是否隐藏 | 描述 |
---|---|---|---|---|
0 | label | - | NO | 标签 |
1 | db_type | hive | NO | 数据库类型 |
2 | service_host | 127.0.0.1 | NO | API服务地址 |
3 | service_port | 10000 | NO | API服务端口 |
4 | host | 127.0.0.1 | NO | hive地址 |
5 | port | 10000 | NO | hive端口号 |
6 | user | zcbus | NO | 用户名 |
7 | password | 1qaz!QAZ | NO | 密码 |
8 | hdfs_host | 127.0.0.1 | NO | hdfs地址 |
9 | hdfs_port | 9000 | NO | hdfs端口 |
10 | hdfs_path | /tmp | NO | hdfs路径 |
11 | hadoop_user | NO | hadoop用户名 | |
12 | authentication | NO | 认证方式,目前支持kerberos认证,需要将认证用到的文件krb5.conf和krb5.keytab拷贝到config目录下,为了防止冲突,加customerid前缀进行区分,比如customerid是10002的订阅服务使用的配置文件,修改为10002_krb5.conf和10002.keytab | |
13 | principal | NO | kerberos认证使用,注册过KDC的客户端名称 | |
14 | version | NO | hive版本依赖库 | |
15 | password_encrypt | 0 | YES | 设置为1时,password和source_password参数使用密文保存,默认为0 |