Advertisement

Streamsets(四)SS配置MySQL存量数据同步到kudu

阅读量:

1、MySQL建表

在MySQL中建表

复制代码
 CREATE TABLE `test`  (

    
   `id` int(11) NOT NULL AUTO_INCREMENT,
    
   `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
    
   `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
    
   `height` double NULL DEFAULT NULL,
    
   `weight` double NULL DEFAULT NULL,
    
   `create_at` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
    
   `update_at` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0),
    
   PRIMARY KEY (`id`) USING BTREE
    
 ) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

添加几条测试数据

复制代码
 INSERT INTO `test` VALUES (1, '周先生', '安徽合肥', 171, 120, '2020-04-01 14:11:54', '2020-04-01 14:13:56');

    
 INSERT INTO `test` VALUES (2, '胡磊', '安徽合肥', 170, 130, '2020-04-01 14:14:10', '2020-04-01 14:14:10');
    
 INSERT INTO `test` VALUES (3, '张军', '安徽合肥', 169, 135, '2020-04-01 14:14:27', '2020-04-01 14:14:27');
    
 INSERT INTO `test` VALUES (4, '潘大帅', '安徽合肥', 170, 131, '2020-04-01 14:14:57', '2020-04-01 14:14:57');
    
 INSERT INTO `test` VALUES (5, '孙浪', '安徽铜陵', 183, 176, '2020-04-01 14:15:18', '2020-04-01 14:15:24');

2、Kudu建表

在kudu中建表

复制代码
 CREATE TABLE `test`  (

    
   `id` int,
    
   `name` string,
    
   `address` string,
    
   `height` double,
    
   `weight` double,
    
   `create_at` timestamp,
    
   `update_at` timestamp,
    
   PRIMARY KEY (`id`)
    
 ) partition by hash(id) partitions 3 stored as kudu;

3、配置SS pipeline

3.1、创建pipelinemysql2kudu

3.2、创建JDBC Query Consumer

3.3、创建kudu

kudu可以直接作为一个 destinations;在操作过程中,请确保所选择的 stage library 版本号与当前 kudu 集群版本一致。

这里需要对kudu集群进行参数配置, 包括指定主节点地址以及目标存储对象(即目标表格名称)。由于采用了impala架构来构建数据仓库, 因此在kudu集群中存储对应的元数据时需在表名前缀上添加impala::标识符。当mysql数据库中的字段与kudu集群中的元数据字段一一对应时, 则无需额外配置映射关系。

当mysql字段名与kudu字段名不一致时需进行手动配置具体对应关系

4、运行测试

运行mysql2kudu的pipeline

可以从dashboard上观察到input与output各有5条记录,在impala系统中进行验证

所有数据已成功同步完成。随后发现与时间相关的create_at和update_at字段存在偏差。这些字段的时间戳较MySQL数据库少显示了8个小时。此前我们也曾遇到过类似情况。当时为了解决这一问题曾对SS的一个Java Class Library进行了源代码更新。然而这次并未采用传统的技术手段而是转向在网络上搜索新的解决方案。在JDBC Query Consumer阶段,在JDBC配置选项卡下继续设置参数时,并在附加的Jdbc配置属性中新增了两个设置

复制代码
 serverTimezone    UTC

    
 useTimezone    true

请清除kudu数据库中的所有数据,并重新设置pipeline的offset参数。启动一次测试后发现的数据传输至kudu过程中时区不一致的问题得到了解决。

全部评论 (0)

还没有任何评论哟~