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
文档更新时间: 2025-01-06 22:32   作者:操李红