文章
问答
冒泡
Doris导出数据到HDFS

Doris 提供了将数据导出到HDFS 上的功能,但是官网写的较为简单,今天亲自踩坑后做个笔记.

1.部署hadoop

1.1修改handoop的配置文件

此处修改的配置文件都是和后面doris导入数据有关的

1.2配置hdfs的ip和端口号以及安全机制

vi etc/hadoop/core-site.xml

<configuration>
    <!-- 配置hdfs的ip -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
    <!-- 配置Simple类型的安全机制 -->
    <property>
      <name>hadoop.http.authentication.type</name>
      <value>simple</value>
    </property>
</configuration>

1.3创建hdfs目录

部署完成后,启动hadoop,创建hdfs目录,后面doris数据要导入到此处

hdfs dfs -mkdir -p /user/hive/warehouse

2.部署doris

官网有部署教程https://doris.apache.org/zh-CN/docs/dev/get-starting/


在doris中创建一个数据表,作为要导出的数据

  1. 创建一个数据库


    create database demo;

  2. 创建数据表

    use demo;
    
    CREATE TABLE IF NOT EXISTS demo.example_tbl
    (
        `user_id` LARGEINT NOT NULL COMMENT "用户id",
        `date` DATE NOT NULL COMMENT "数据灌入日期时间",
        `city` VARCHAR(20) COMMENT "用户所在城市",
        `age` SMALLINT COMMENT "用户年龄",
        `sex` TINYINT COMMENT "用户性别",
        `last_visit_date` DATETIME REPLACE DEFAULT "1970-01-01 00:00:00" COMMENT "用户最后一次访问时间",
        `cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费",
        `max_dwell_time` INT MAX DEFAULT "0" COMMENT "用户最大停留时间",
        `min_dwell_time` INT MIN DEFAULT "99999" COMMENT "用户最小停留时间"
    )
    AGGREGATE KEY(`user_id`, `date`, `city`, `age`, `sex`)
    DISTRIBUTED BY HASH(`user_id`) BUCKETS 1
    PROPERTIES (
        "replication_allocation" = "tag.location.default: 1"
    );
  3. 示例数据

    10000,2017-10-01,北京,20,0,2017-10-01 06:00:00,20,10,10
    10000,2017-10-01,北京,20,0,2017-10-01 07:00:00,15,2,2
    10001,2017-10-01,北京,30,1,2017-10-01 17:05:45,2,22,22
    10002,2017-10-02,上海,20,1,2017-10-02 12:59:12,200,5,5
    10003,2017-10-02,广州,32,0,2017-10-02 11:20:00,30,11,11
    10004,2017-10-01,深圳,35,0,2017-10-01 10:00:15,100,3,3
    10004,2017-10-03,深圳,35,0,2017-10-03 10:20:22,11,6,6

    将上面的数据保存在test.csv文件中

  4. 导入数据

    curl  --location-trusted -u root: -T test.csv -H "column_separator:," http://127.0.0.1:8030/api/demo/example_tbl/_stream_load
    • -T test.csv : 这里使我们刚才保存的数据文件,如果路径不一样,请指定完整路径

    • -u root : 这里是用户名密码,我们使用默认用户root,密码是空

    • 127.0.0.1:8030 : 分别是 fe 的 ip 和 http_port

    执行成功之后我们可以看到下面的返回信息

    {
        "TxnId": 30303,
        "Label": "8690a5c7-a493-48fc-b274-1bb7cd656f25",
        "TwoPhaseCommit": "false",
        "Status": "Success",
        "Message": "OK",
        "NumberTotalRows": 7,
        "NumberLoadedRows": 7,
        "NumberFilteredRows": 0,
        "NumberUnselectedRows": 0,
        "LoadBytes": 399,
        "LoadTimeMs": 381,
        "BeginTxnTimeMs": 3,
        "StreamLoadPutTimeMs": 5,
        "ReadDataTimeMs": 0,
        "WriteDataTimeMs": 191,
        "CommitAndPublishTimeMs": 175
    }

3.部署apache_hdfs_broker

此文件在下载的doris中有,1.1.3版本在fe文件夹中,1.1.3以上应该和fe,be平级.


启动apache_hdfs_broker

bin/start_broker.sh --daemon

4.导出数据

4.1 创建hdfs的broker

执行下面的命令使用mysql连接 Doris。


mysql -uroot -P9030 -h127.0.0.1

1. 这里使用的 root 用户是 doris 内置的默认用户,也是超级管理员用户,具体的用户权限查看 [权限管理](https://doris.apache.org/zh-CN/docs/dev/admin-manual/privilege-ldap/user-privilege)
2. -P :这里是我们连接 Doris 的查询端口,默认端口是 9030,对应的是fe.conf里的 `query_port`
3. -h : 这里是我们连接的 FE IP地址,如果你的客户端和 FE 安装在同一个节点可以使用127.0.0.1,这种也是 Doris 提供的如果你忘记 root 密码,可以通过这种方式不需要密码直接连接登录,进行对 root 密码进行重置

查看现有的broker


mysql> show broker;


此时为空,添加broker

EXPORT TABLE demo.example_tbl               -- 指定对应的库名和表名(步骤2中在drios创建的表)
TO "hdfs://localhost:8020/user/hive/warehouse"            -- 导出路径(步骤 1.2和1.3中配置的hdfs的地址)
PROPERTIES
(
    "label" = "mylabel",
    "column_separator"=",",
    "exec_mem_limit"="2147483648",           --单个查询计划的内存使用限制
    "timeout" = "3600"
)
WITH BROKER "hdfs";

此时再执行查询broker命令,

mysql> show broker;
+------+----------------+------+-------+---------------+----------------+--------+
| Name | IP             | Port | Alive | LastStartTime | LastUpdateTime | ErrMsg |
+------+----------------+------+-------+---------------+----------------+--------+
| hdfs | 192.168.10.144 | 8000 | true | NULL          | NULL           |        |
+------+----------------+------+-------+---------------+----------------+--------+
1 row in set (0.00 sec)

至此,hdfs的broker部署完成,下面开始使用hdfs的broker导出数据到hdfs中

EXPORT TABLE demo.example_tbl               -- 指定对应的库名和表名
PARTITION (p1,p2)                           -- 指定导出的分区
[WHERE [expr]]
TO "hdfs://localhost:8020/user/hive/warehouse"            -- 导出路径
PROPERTIES
(
    "label" = "mylabel",
    "column_separator"=",",
    "exec_mem_limit"="2147483648",           --单个查询计划的内存使用限制
    "timeout" = "3600"
)
WITH BROKER "hdfs";

返回报文:

| 10014 | mylabe2  | FINISHED  | 100%     | {"partitions":["*"],"exec mem limit":2147483648,"column separator":",","line delimiter":"\n","tablet num":1,"broker":"hdfs","coord num":1,"db":"default_cluster:demo","tbl":"example_tbl"} | hdfs://localhost:9000/user/hive/warehouse | 2023-03-09 14:31:09 | 2023-03-09 14:31:11 | 2023-03-09 14:31:17 | 3600    | NULL     

成功.


我们可以去hadoop的图形化工具中查看导入的结果

  1. 打开http://192.168.9.200:9870/

  2. 点击Utilities下拉菜单的 Browse the file system

  3. 根据我们导出路径去查找从doris导出的数据

hadoop
doris
数仓

关于作者

BenbobaBigKing
获得点赞
文章被阅读