对于定时或将某一时刻的数据同步到大数据平台,如hdfs或者hive的需求,建议将生产数据实时同步到DORIS,再使用软件的快照推动到HDFS或者hive中。

1.配置快照

订阅客户端目标库为DORIS的数据表里有快照功能:

备注:
月周期:快照推送的日期。空值表示每天执行。可以多选。
天周期:快照推送的时间。为1表示01:00:00推送。可以多选。


点击添加子任务配置具体的推送内容及目标信息,如HDFS配置,HDFS路径等

备注:
任务目标库:点击可以看到此客户端下已经配置的HDFS,也可以点击添加新增,新增页面如下图及说明。当此项配置不为空时,快照触发时软件通过tableexp,tableimp按照"执行SQL"项的配置导出成固定大小的txt文件,再通过hdfs客户端或者zcbusService.jar服务将生成的txt文件推送到HDFS,目前只支持HDFS推送。当此项配置为空时,快照触发时软件在DORIS数据里执行"执行SQL"的内容,不进行tableexp和tableimp以及推送HDFS的步骤,此时可利用DORIS自带的功能往HDFS和hive推送数据。
目标库名:在目标库里的数据库名,后边配置的SQL中可以通过#table_schema#进行变量传递。
目标表名:在目标库里的表名,后边配置的SQL中可以通过#table_name#进行变量传递。
依赖键:
前置条件:初始值或者上次快照任务执行的"后置条件值SQL"的结果,可通过#zcbus_min#进行变量传递。
后置条件值SQL:通过SQL获取一个值,通通过#zcbus_max#进行变量传递。
执行SQL前执行:执行快照推送逻辑之前在DORIS数据库里执行的SQL,比如在DORIS数据库生成一个快照表(create table XXXX as select * from XXXXX).
执行SQL:具体的推送逻辑。
执行SQL后执行:执行快照推送逻辑完成之后在DORIS数据库里执行的SQL,比如在DORIS数据库删除快照表(drop table XXXX)
目标端装载之前执行:执行快照推送逻辑之前在目标库里执行的命令或SQL。
目标端装载之后执行:执行快照推送逻辑完成之后在目标库里执行的命令或SQL。

备注:
host:HDFS的IP地址或者域名,使用域名时需要在/etc/hosts下做IP地址和域名的配置。
port:HDFS的端口号
hdfs_path:推送的路径,推送时#table_name#会替换成上步中配置的目标表名,#YYYYMMDD#会替换成上次任务时间的年月日,即管理库中bus_client_product_object_task中的start_time时间。
service_host:zcbusService.jar服务所在的ip地址,一般在当前容器下创建,填写容器名即可。
service_port:zcbusService.jar服务的号。

创建zcbusService.jar服务

任务目标库不为空的快照配置实例:

任务目标库为空的快照配置实例:

2.订阅到doris时ZCBUS参数配置

需确认以下几个参数:

table_properties: ENGINE=OLAP UNIQUE KEY(#zcbus_key#) COMMENT #zcbus_comment# DISTRIBUTED BY HASH(#zcbus_distribute_key#) BUCKETS 10 PROPERTIES ("replication_num" = "1","enable_unique_key_merge_on_write" = "true","store_row_column" = "false")
ZCBUS_SOURCE_OPTIME:1
ZCBUS_TARGET_OPTIME:1
zcbus_source_optype: 1
audit_mode:开启

3.通过zcbusSever.jar(API)方式推送hdfs时kerbors的配置

1..keytab文件配置

将客户提供<username>.keytab文件放到容器的/usr/local/zcbus/config/<订阅节点号>.keytab,如下订阅客户端为10040的配置:
[root@594504f06cfe config]# pwd
/usr/local/zcbus/config
[root@594504f06cfe config]# ls
10040.ini  10040.keytab  10040_krb5.conf  auxconf

2.krb5.conf配置

将客户提供的krb5.conf文件放到容器的/usr/local/zcbus/config/<订阅节点号>_krb5.conf,如下订阅客户端为10040的配置:
[root@594504f06cfe config]# pwd
/usr/local/zcbus/config
[root@594504f06cfe config]# ls
10040.ini  10040.keytab  10040_krb5.conf  auxconf

3.配置连接认证方式

在/usr/local/zcbus/config目录下编辑<订阅节点号>.ini,如下订阅客户端为10040的配置:
[root@594504f06cfe config]# pwd
/usr/local/zcbus/config
[root@594504f06cfe config]# ls
10040.ini  10040.keytab  10040_krb5.conf  auxconf
[root@594504f06cfe config]# cat 10040.ini 
[kerberos]
hadoop.rpc.protection=authentication,privacy

4.hdfs需要域名登录的,容器内需配置/etc/hosts解析,具体根据客户提供的各节点的信息进行配置。

4.通过hdfs客户端命令推送时kerbors的配置

1.需在容器内安装hdfs客户端以及kinit
2.将客户提供的krb5.conf文件放到容器的/etc/krb5.conf
3.将客户提供的hdfs的配置文件hdfs-site.xml和core-site.xml放到容器内安装的hdfs客户端的指定位置
4.认证

source /usr/local/zcbus/bin/TDH-client/init.sh
/usr/bin/kinit -kt /usr/local/zcbus/config/10009.keytab kafka@CETDH

5.通过在doris中执行SQL推送时kerbors的配置

1.根据客户给的ip和节点对应关系编辑be和fe各服务器的/etc/hosts文件。
2.客户开通doris所有be,fe节点到HDFS集群的网络策略,提供krb5.conf,.keytab,以及hdfs的配置文件hdfs-site.xml和core-site.xml。
3.将krb5.conf文件放到所有的be和fe服务器的/etc/目录下。或者采用如下方式自定义krb5.conf位置:

  • FE:在 fe.conf 配置 JVM 参数 -Djava.security.krb5.conf。
  • BE:在 be.conf 使用 kerberos_krb5_conf_path 配置项,默认值为/etc/krb5.conf。

4.将.keytab放在所有的be和fe节点服务器,路径随意,SQL中使用跟真实路径对应即可。
5.推送SQL(集群高可用方式)

SELECT * FROM payment_11809 
INTO OUTFILE "hdfs:///warehouse/tablespace/external/hive/stgb_acct.db/acct_item_end/eday_id=20241201/year=tmp/1.txt"
FORMAT AS PARQUET
PROPERTIES
(
    "fs.defaultFS"="hdfs://hacluster/",
    "hadoop.username" = "hadoop",
    "dfs.nameservices"="hacluster",
    "dfs.ha.namenodes.hacluster"="n1,n2",
    "dfs.namenode.rpc-address.hacluster.n1"="pass-bigdata-hadoop-001.chinatelecom.cn:8020",
    "dfs.namenode.rpc-address.hacluster.n2"="pass-bigdata-hadoop-002.chinatelecom.cn:8020",
    "dfs.client.failover.proxy.provider.hacluster"="org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider",
    "dfs.namenode.kerberos.principal"="zcbus@CHINATELECOM.CN",
    "hadoop.security.authentication"="kerberos",
    "hadoop.kerberos.principal"="zcbus@CHINATELECOM.CN",
    "hadoop.kerberos.keytab"="/home/zcbus/10040.keytab",
     "column_separator" = "\\x01",
     "line_delimiter" = "\n"
);

解释:

SELECT * FROM payment_11809 :生成快照的SQLINTO OUTFILE:后边配置HDFS路径,可指定ip或者通过后边参数指定,如下写法:"hdfs://192.168.2.37:8020/path/to/result_"或者"hdfs:///warehouse/tablespace/external/hive/stgb_acct.db/"
FORMAT AS PARQUET: 推动到hdfs的文件格式,支持PARQUET,CSV,ORC三种模式。
PROPERTIES:hdfs相关认证信息,子项解释如下:
     "fs.defaultFS":对应core-site.xml中的<name>fs.defaultFS</name>选项;
     "hadoop.username":默认使用hadoop;
      "dfs.nameservices":对应hdfs-site.xml中的<name>dfs.internal.nameservices</name>选项;
     "dfs.ha.namenodes.hacluster":不用更改,如果更改了,后边两名字中对应的n1和n2也需要进行变动。
     "dfs.namenode.rpc-address.hacluster.n1""dfs.namenode.rpc-address.hacluster.n2":对应hdfs-site.xml中的<name>dfs.namenode.http-address.hacluster.XXX</name>选项;
     "dfs.namenode.kerberos.principal":客户提供的<username>.keytab对应的用户名;
      "hadoop.security.authentication"="kerberos":保持不变;
      "hadoop.kerberos.principal":客户提供的<username>.keytab对应的用户名;
      "hadoop.kerberos.keytab":客户提供的<username>.keytab在be和fe各服务器对应的文件名。
      "column_separator": 列的分割符。hive默认的0x01采用的写法就是"column_separator" = "\\x01""line_delimiter": 行的分隔符。
文档更新时间: 2025-03-30 22:55   作者:wangyanjie