• Doris1.1.1多种异构数据源数据导入方案


    Doris分析型数据库

            Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。基于此,Apache Doris 能够较好的满足报表分析、即时查询、统一数仓构建、数据湖联邦查询加速等使用场景,用户可以在此之上构建用户行为分析、AB 实验平台、日志检索分析、用户画像分析、订单分析等应用。

    Doris的几种数据源导入方案

    1、Doris数据仓库的第一种导入方案(Stream Load):

    1. 创建Doris 基础的分桶表,OLAP类型
    2. CREATE TABLE example_db.test
    3. (
    4. id int,
    5. outpost_uid INT,
    6. create_time DATETIME,
    7. apply_open_id VARCHAR(1024),
    8. scan_result INT,
    9. reason VARCHAR(1024),
    10. phone VARCHAR(100),
    11. tz_place_id VARCHAR(100),
    12. address_id INT,
    13. u_id INT,
    14. case_type INT
    15. )
    16. ENGINE=olap
    17. AGGREGATE KEY(id, outpost_uid,create_time,apply_open_id,scan_result,reason,phone,tz_place_id,address_id,u_id,case_type)
    18. COMMENT "my first doris table"
    19. DISTRIBUTED BY HASH(id) BUCKETS 10;
    1. 将需要的TXT的文件,上传到服务器某一个文件夹下面。
    2. /home/wx_outpost_scan.txt

    书写Doris 数据倒入脚本命令

    curl -u root:doris密码 -H "label:liuwunan2" -H "column_separator:," -T /home/wx_outpost_scan.txt http://BE_IP:8040/api/example_db/aaaaa/_stream_load

     Demo操作:

     数据样例对比

    1. 查看日志:
    2. show load order by createtime desc limit 1\G

    备注说明

    数据倒入,此处需要注意一个问题:
    column_separator 用于指定倒入文件中的列的分隔符,默认为\t,如果是不可见字符,则需要加\x作为前缀,使用十六进制来表示分隔符。
    如Hive文件分隔符\x01,则需要指定为-H “column_separator:\x01”。

    2、HDFS文本文件导入Doris中(Broker Load):

    HDFS文件倒入Doris
    需要启动apache_hdfs_broker组件:
    直接启动,不需要修改配置文件 组件服务:BrokerBootstrap,【切记后台守护进程运行】

    第1步:创建Doris表(指定对应字段)

    1. create table student1
    2. (
    3. phone varchar(50) ,
    4. user_name String ,
    5. id_card varchar(50),
    6. times date
    7. )
    8. DUPLICATE KEY(phone)
    9. DISTRIBUTED BY HASH(id_card) BUCKETS 10;

     第2步:创建HDFS数据导入的流

    1. LOAD LABEL student
    2. (
    3. DATA INFILE("hdfs://HDFS_IP(活跃节点):8020/test_copy_copy/*")
    4. INTO TABLE student1
    5. COLUMNS TERMINATED BY "^"
    6. (c1, c2, c3, c4)
    7. set(
    8. user_name=c1,
    9. id_card=c2,
    10. phone=c3,
    11. times=c4)
    12. )
    13. WITH BROKER "BROKER_NAME"
    14. (
    15. "username"="hdfs",
    16. "password"=""
    17. )
    18. PROPERTIES
    19. (
    20. "timeout" = "3600",
    21. "max_filter_ratio"="0.1"
    22. );

    解释说明:

    第3步:查看过程和结果

    第4步:查看结果

    3、Kafka实时接入数据进入Doris(Routine Load

    第1步:创建Doris 导入表

    1. create table student222
    2. (
    3. id varchar(50),
    4. user_name varchar(50) ,
    5. times varchar(50)
    6. )
    7. DUPLICATE KEY(id)
    8. DISTRIBUTED BY HASH(id) BUCKETS 10;

    第2步:创建Doris 接入Kafka 数据持续任务

    1. CREATE ROUTINE LOAD student001 ON student222
    2. COLUMNS TERMINATED BY ",",
    3. COLUMNS(id, user_name, times )
    4. PROPERTIES
    5. (
    6. "desired_concurrent_number"="3",
    7. "max_batch_interval" = "10",
    8. "max_batch_rows" = "300000",
    9. "max_batch_size" = "209715200",
    10. "strict_mode" = "false"
    11. )
    12. FROM KAFKA
    13. (
    14. "kafka_broker_list" = "zk_IP:9092,zk_IP:9092,zk_IP:9092",
    15. "kafka_topic" = "test_1",
    16. "property.group.id" = "test_1_001",
    17. "property.client.id" = "test_1_001",
    18. "property.kafka_default_offsets" = "OFFSET_END"
    19. );

    截图指示说明:

    offset 可以指定从大于等于 0 的具体 offset,或者:
    OFFSET_BEGINNING: 从有数据的位置开始订阅。
    OFFSET_END: 从末尾开始订阅。
    时间格式,如:"2021-05-22 11:00:00"
    如果没有指定,则默认从 OFFSET_END 开始订阅 topic 下的所有 partition。

    第3步:检查流任务状态(SHOW ROUTINE LOAD \G)

    第4步:Kafka推送测试数据

    第5步:查询Doris数据库数据

    第六步:【重要说明】

    show ROUTINE LOAD \G;

    查看日志

    取消

    stop ROUTINE LOAD for  任务名称

    stop ROUTINE LOAD for student001;

    启动

    resume routine load for student222;

    1. "max_batch_interval" = "20", 每个子任务最大执行时间,单位是秒。范围为 5 到 60。默认为10。
    2. "max_batch_rows" = "300000", 每个子任务最多读取的行数。必须大于等于200000。默认是200000。
    3. "max_batch_size" = "209715200"每个子任务最多读取的字节数。单位是字节,范围是 100MB 到 1GB。默认是 100MB。
    4. 这三个参数,用于控制一个子任务的执行时间和处理量。当任意一个达到阈值,则任务结束。

    4、Mysql外部表数据引用导入(支持CDC模式

    第一步:安装unixODBC相关依赖
    yum install -y unixODBC unixODBC-devel libtool-ltdl libtool-ltdl-devel
    查看是否安装成功

    1. [root@localhost ~]# odbcinst -j 
    2. unixODBC 2.3.1
    3. DRIVERS............: /etc/odbcinst.ini
    4. SYSTEM DATA SOURCES: /etc/odbc.ini
    5. FILE DATA SOURCES..: /etc/ODBCDataSources
    6. USER DATA SOURCES..: /root/.odbc.ini
    7. SQLULEN Size.......: 8
    8. SQLLEN Size........: 8
    9. SQLSETPOSIROW Size.: 8

    第二步:安装ODBC

    当前我的数据库版本为5.7 所以下载下面链接地址文件即可。

    wget https://downloads.mysql.com/archives/get/p/10/file/mysql-connector-odbc-5.3.11-1.el7.x86_64.rpm

    下载完毕  在下载文件夹下面 进行安装

    yum install -y mysql-connector-odbc-5.3.11-1.el7.x86_64.rpm

    本博主已经下载:
    链接:https://pan.baidu.com/s/12gPrDaDI7XyaJt4-mRd4Lg 
    提取码:k0rl

    所有BE节点都要相同操作 安装。

    第3步:配置 unixODBC,验证通过 ODBC 访问 Mysql(相当于对服务器进行ODBC安装,同时测试客户端)

    编辑 ODBC 配置文件 【3台服务器

    1. vim /etc/odbc.ini
    2. [mysql]
    3. Description = Data source MySQL
    4. Driver = MySQL ODBC 5.3 Unicode Driver
    5. Server = hadoop1 【mysql服务器IP的hostname】
    6. Host = hadoop1 【mysql服务器IP的hostname】
    7. Database = test 【mysql数据库】
    8. Port = 3306 【数据库端口】
    9. User = root 【mysql用户名】
    10. Password = xxxxxx 【mysql密码】

    测试链接                                                                                                          【3台服务器】

    isql -v mysql

    第三步、准备MYSQL 测试表和数据 

    1. CREATE TABLE `test_cdc` ( 
    2. `id` int NOT NULL AUTO_INCREMENT, 
    3. `name` varchar(255) DEFAULT NULL
    4. PRIMARY KEY (`id`) 
    5. ) ENGINE=InnoDB AUTO_INCREMENT=91234 DEFAULT CHARSET=utf8mb4; 
    6. 插入数据
    7. INSERT INTO `test_cdc` VALUES (123, 'this is a update');
    8. INSERT INTO `test_cdc` VALUES (1212, '测试 flink CDC');
    9. INSERT INTO `test_cdc` VALUES (1234, '这是测试');
    10. INSERT INTO `test_cdc` VALUES (11233, 'zhangfeng_1');
    11. INSERT INTO `test_cdc` VALUES (21233, 'zhangfeng_2');
    12. INSERT INTO `test_cdc` VALUES (31233, 'zhangfeng_3');
    13. INSERT INTO `test_cdc` VALUES (41233, 'zhangfeng_4');
    14. INSERT INTO `test_cdc` VALUES (51233, 'zhangfeng_5');
    15. INSERT INTO `test_cdc` VALUES (61233, 'zhangfeng_6');
    16. INSERT INTO `test_cdc` VALUES (71233, 'zhangfeng_7');
    17. INSERT INTO `test_cdc` VALUES (81233, 'zhangfeng_8');
    18. INSERT INTO `test_cdc` VALUES (91233, 'zhangfeng_9');

    第四步:修改 Doris 的配置文件(每个 BE 节点都要,不用重启 BE)
    在 BE 节点的 conf/odbcinst.ini,添加我们的刚才注册的的 ODBC 驱动([MySQL ODBC 
    5.3.11]
    红色这部分) 

     # Driver from the postgresql-odbc package

    # Setup from the unixODBC package

    [PostgreSQL]

    Description = ODBC for PostgreSQL

    Driver = /usr/lib/psqlodbc.so

    Setup = /usr/lib/libodbcpsqlS.so

    FileUsage = 1

    # Driver from the mysql-connector-odbc package

    # Setup from the unixODBC package

    [MySQL ODBC 5.3.11] 【此处名称不允许修改写错 后面需要用到

    Description = ODBC for MySQL

    Driver= /usr/lib64/libmyodbc5w.so

    FileUsage = 1

    # Driver from the oracle-connector-odbc package

    # Setup from the unixODBC package

    [Oracle 19 ODBC driver]

    Description=Oracle ODBC driver for Oracle 19

    Driver=/usr/lib/libsqora.so.19.1

    第五步:Doris 建 Resource表

    通过 ODBC_Resource 来创建 ODBC 外表,这是推荐的方式,这样 resource 可以复用。

    CREATE EXTERNAL RESOURCE `mysql_5_3_11`

    PROPERTIES (

    "host" = "hadoop1",                                             【mysql服务器IP的hostname】

    "port" = "3306",                                                    【Mysql端口】

    "user" = "root",                                                     【Mysql用户名

    "password" = "XXXXX",                                       【Mysql密码】

    "database" = "test",                                              Mysql数据库】

    "table" = "test_cdc",                                              Mysql需要的外表

    "driver" = "MySQL ODBC 5.3.11", 【名称要和上面[]里的名称一致,BE的配置文件头

    "odbc_type" = "mysql",                                         【固定】

    "type" = "odbc_catalog")                                       【固定】 

    第六步:基于 Resource 创建 Doris 外表 

    CREATE EXTERNAL TABLE `test_odbc` (

    `id` int NOT NULL , 【和Mysql字段相同】

    `name` varchar(255) null 【和Mysql字段相同】

    ) ENGINE=ODBC            【固定引擎

    COMMENT "ODBC"

    PROPERTIES (

    "odbc_catalog_resource"="mysql_5_3_11",【名称就是 resource 的名称

    "database" = "test", 【同步的数据库

    "table" = "test_cdc"   【同步表】

    );

    第七步:查询数据 ,检查Mysql数据库完全相同

    第八步:测试修改Mysql数据


    修改Mysql 数据库 Doris 外表数据相同

    备份说明:Doris 数据库同样支持Mysql的数据库文件备份命令,mysqldump

    eg:/usr/local/mysql/bin/mysqldump -u用户名 -p密码 --databases 数据库  > /home/mysqlDataBak/$(date "+%Y%m%d%H")_jjga_mydb.sql

  • 相关阅读:
    c primer plus(2)
    【angular】实现简单的angular国际化(i18n)
    CSS文本超出显示小数点
    TypeScript中的类型断言
    PHP LFI 利用临时文件Getshell
    Unity动态创建Avatar骨骼映射
    [论文阅读]VoxSet——Voxel Set Transformer
    2022秋招,Java框架最全面试攻略,吃透32个必问题直接速通大厂
    数据库——JDBC基本连接步骤
    Docker
  • 原文地址:https://blog.csdn.net/weixin_38822045/article/details/126751130