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中创建一个数据表,作为要导出的数据
创建一个数据库
create database demo;
创建数据表
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" );
示例数据
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
文件中导入数据
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的图形化工具中查看导入的结果
打开http://192.168.9.200:9870/
点击Utilities下拉菜单的 Browse the file system
根据我们导出路径去查找从doris导出的数据