通过Broker Load将ORC格式的Hive数据导入Doris
应用场景
通过Broker Load将ORC格式的Hive表数据导入到Doris。
方案架构
离线数据可以从数据湖加载,也可以直接加载本地文件。从数据湖加载可以使用工具CDM,在没有CDM工具时,可以直接使用外表加载、BrokerLoad的方式。
本地文件加载则使用Doris自带的StreamLoad工具。

- 场景特点:
- 数据加载方式:
- 在存在DataArts Studio工具的场景下,数据加载统一使用CDM进行(DataArts Studio需要2.10及以上版本)。
- 在不存在DataArts Studio工具的场景下,可以使用Spark或者外表方式加载。由数据加工方进行数据推送加载时,推荐使用BrokerLoad加载方式,方便数据加工方统一调度;如果有数据应用方负责数据加载,则使用外表方式进行数据加载较为方便应用层另外配置加载数据。
- 在没有数据湖的场景下,轻量化数仓场景中,数据直接由源端文件加载到Doris中,可以使用Streamload方式加载本地文件。
- 注意事项:
操作流程
步骤1:创建MRS Doris集群并配置
- 创建MRS Doris集群。
详细操作请参考自定义购买MRS集群,例如相关参数如下:
- 集群名称:自定义,例如“mrs_doris”
- 集群版本:MRS 3.3.0-LTS
- 组件选择:Doris集群。
- Kerberos认证:开启
其他参数根据实际需要进行配置。
- 集群购买完成后安装集群客户端。
详细操作请参考安装客户端(3.x版本)。
例如客户端安装路径为“/opt/dorisclient”。
- 在Doris集群安装MySQL客户端。
详细操作请参考使用MySQL客户端连接Doris。
- 创建拥有Doris管理权限的人机用户(例如用户名为dorisuser),并修改初始密码。
- 登录Doris集群Manager页面。
- 选择“系统 > 权限 > 角色 > 添加角色”,填写角色名称,如“dorisrole”,在“配置资源权限”选择“待操作的集群 > Doris”,勾选“Doris管理员权限”,单击“确定”。
- 选择“用户 > 添加用户”,填写用户名称,如“dorisuser”,“用户类型”选择“人机”,“密码策略”默认,输入用户密码并确认密码,关联“dorisrole”角色,单击“确定”。
- 使用新建的dorisuser用户重新登录FusionInsight Manager,修改该用户初始密码。
步骤2:创建MRS Hive集群并配置
- 创建MRS Hive集群。
详细操作请参考自定义购买MRS集群,例如相关参数如下:
- 集群名称:自定义,例如“mrs_test”
- 集群版本:MRS 3.3.0-LTS
- 集群组件包含:Hive等
其他参数根据实际需要进行配置。
- 集群购买完成后安装集群全量客户端,详细操作请参考安装客户端(3.x版本)。
例如客户端安装路径为“/opt/client”。
- 已存在Hive外表(数据格式仅限ORC格式),且存在一定量数据。
建表语句参考:
CREATE TABLE wxk.`lineorder_broker`( `lo_orderkey` bigint, `lo_linenumber` int, `lo_custkey` bigint, `lo_partkey` bigint, `lo_suppkey` bigint, `lo_orderpriority` varchar(300), `lo_shippriority` int, `lo_quantity` int, `lo_orderdate` date, `lo_extendedprice` bigint, `lo_ordtotalprice` bigint, `lo_discount` int, `lo_revenue` bigint, `lo_supplycost` int, `lo_commitdate` date, `lo_shipmode` varchar(300) ) PARTITIONED BY (`lo_tax` int) row format delimited fields terminated by ',' lines terminated by '\n' stored as orc;
步骤3:Doris与Hive跨集群配置
如果Hive、Doris服务在两个集群部署时需要执行该操作,否则请跳过。
- 配置MRS Hive集群与Doris集群互信,详细操作请参考集群互信管理。
- 配置后验证。
- 以root用户登录Doris集群客户端,执行以下命令加载环境变量。
source 客户端安装路径/bigdata_env
- 执行以下命令认证Hive集群用户。
kinit Hive集群业务用户@Hive集群系统域名
输入Hive集群用户相应密码,认证成功即为互信成功。
- Hive集群用户:可以自行创建也可使用默认的系统用户,例如hive,用户默认密码请参考MRS集群用户账号一览表。
- Hive集群系统域名:可以登录Hive集群Manager页面,选择“系统 > 权限 > 域和互信”,查看“本端域”参数获取。
- 以root用户登录Doris集群客户端,执行以下命令加载环境变量。
步骤4:创建Doris数据表
- 登录Doris集群中已安装好MySQL客户端的节点,执行如下命令进入Doris数据库。
export LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1 //若集群已启用Kerberos认证(安全模式)需执行该命令。
mysql -u数据库登录用户 -p数据库登录用户密码 -P数据库连接端口 -hDoris FE实例IP地址
- 数据库连接端口为Doris FE的查询连接端口,可通过登录MRS Doris集群的Manager界面,选择“集群 > 服务 > Doris > 实例”,查看任一FE实例的业务IP地址获取。
- Doris FE实例IP地址可通过登录MRS Doris集群的Manager界面,选择“集群 > 服务 > Doris > 配置 > 全部配置”,搜索并查看“query_port”参数值获取。
- 执行以下命令创建数据库(例如名称为“example_db”)并切换。
create database if not exists example_db;
use example_db;
- 执行以下命令创建表。
CREATE TABLE `lineorder_brokerload_u` ( `LO_ORDERKEY` bigint NOT NULL COMMENT "订单id", `LO_LINENUMBER` int NOT NULL COMMENT "订单码", `LO_CUSTKEY` bigint NOT NULL COMMENT "客户id", `LO_PARTKEY` bigint NOT NULL COMMENT "商品id", `LO_SUPPKEY` bigint NOT NULL COMMENT "供应商id", `LO_ORDERDATE` date DEFAULT NULL COMMENT "订单日期", `LO_ORDERPRIORITY` varchar(100) DEFAULT NULL COMMENT "订单优先级", `LO_SHIPPRIORITY` int DEFAULT NULL COMMENT "物流优先级", `LO_QUANTITY` int DEFAULT NULL COMMENT "数量", `LO_EXTENDEDPRICE` bigint DEFAULT NULL COMMENT "扩展价格", `LO_ORDTOTALPRICE` bigint DEFAULT NULL COMMENT "订单总价", `LO_DISCOUNT` int DEFAULT NULL COMMENT "折扣", `LO_REVENUE` bigint DEFAULT NULL COMMENT "收入", `LO_SUPPLYCOST` int DEFAULT NULL COMMENT "成本", `LO_TAX` int DEFAULT NULL COMMENT "税款", `LO_COMMITDATE` date DEFAULT NULL COMMENT "承诺日期", `LO_SHIPMODE` varchar(100) NOT NULL COMMENT "运输方式" ) UNIQUE KEY ( `LO_ORDERKEY`, `LO_LINENUMBER`, `LO_CUSTKEY`, `LO_PARTKEY`, `LO_SUPPKEY`, `LO_ORDERDATE` ) PARTITION BY RANGE(`LO_ORDERDATE`) ( PARTITION `p1992` VALUES LESS THAN ("1993-01-01"), PARTITION `p1993` VALUES LESS THAN ("1994-01-01"), PARTITION `p1994` VALUES LESS THAN ("1995-01-01"), PARTITION `p1995` VALUES LESS THAN ("1996-01-01"), PARTITION `p1996` VALUES LESS THAN ("1997-01-01"), PARTITION `p1997` VALUES LESS THAN ("1998-01-01"), PARTITION `p1998` VALUES LESS THAN ("1999-01-01"), PARTITION `p1999` VALUES LESS THAN ("2000-01-01"), PARTITION `p2000` VALUES LESS THAN ("2001-01-01"), PARTITION `p2001` VALUES LESS THAN ("2002-01-01") ) DISTRIBUTED BY HASH(`LO_ORDERDATE`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 3", "dynamic_partition.enable" = "true", "dynamic_partition.time_unit" = "MONTH", "dynamic_partition.start" = "-2147483648", "dynamic_partition.end" = "2", "dynamic_partition.prefix" = "P_", "dynamic_partition.buckets" = "1", "in_memory" = "false", "storage_format" = "V2" );
例如执行show tables;后结果如下,表示建表成功:
步骤5:通过Broker Load导入数据至Doris
- 在Doris客户端执行以下命令,使用Broker Load导入数据。
LOAD LABEL broker_load_u( DATA INFILE( "hdfs://主NameNode实例IP地址:RPC端口号/user/hive/warehouse/wxk.db/lineorder_broker/*/*" ) INTO TABLE lineorder_brokerload_u FORMAT AS "orc" ( LO_ORDERKEY, LO_LINENUMBER, LO_CUSTKEY, LO_PARTKEY, LO_SUPPKEY, LO_ORDERDATE, LO_ORDERPRIORITY, LO_SHIPPRIORITY, LO_QUANTITY, LO_EXTENDEDPRICE, LO_ORDTOTALPRICE, LO_DISCOUNT, LO_REVENUE, LO_SUPPLYCOST, LO_COMMITDATE, LO_SHIPMODE, LO_TAX ) ) WITH BROKER "broker_192_168_0_221" ( "hadoop.security.authentication" = "kerberos", "kerberos_principal" = "doris/hadoop.hadoop.com@HADOOP.COM", "kerberos_keytab" = "${BIGDATA_HOME}/FusionInsight_Doris_*/install/FusionInsight-Doris-*/doris-fe/bin/doris.keytab" ) PROPERTIES ("timeout" = "1200", "max_filter_ratio" = "0.1");
- broker_load_u:表示任务名称,自定义。
- 主NameNode实例IP地址:可在Manager界面,选择“集群 > 服务 > HDFS > 实例”查看(此配置中要注意集群重启会导致NameNode实例主备倒换)。
- RPC端口号:可在Manager界面,选择“集群 > 服务 > HDFS > 配置”,搜索“dfs.namenode.rpc.port”查看。
- broker_192_168_0_221:Doris数据库的Broker名称,连接Doris数据库后执行show broker;获取。
- kerberos_principal:访问Hadoop集群的keytab文件对应的principal,格式为“doris/hadoop.${系统域名转换为小写}@${系统域名}”,系统域名可登录Manager页面,选择“系统 > 权限 > 域和互信”,查看“本端域”参数获取。Hive与Doris非同集群部署时要使用Hive用户@Hive集群的系统域名,如hive/hadoop.hadoop.com@HADOOP.COM。
- kerberos_keytab:
访问Hadoop集群的keytab文件,该keytab位于FE节点的“${BIGDATA_HOME}/FusionInsight_Doris_*/install/FusionInsight-Doris-*/doris-be/bin/doris.keytab”路径中,需要拷贝该keytab文件到所有Broker节点上,例如“/home/omm/doris_keytab”目录下,并执行chown omm:wheel /home/omm/doris_keytab -R命令设置“doris.keytab”文件属组。
Hive与Doris非同集群部署时,要从Hive集群拷贝hive.keytab文件到DBroker实例对应目录下。
- 执行以下命令查看任务执行情况。
show load order by createtime desc limit 1\G;
例如执行结果如下,表示数据导入成功。
- 执行以下命令查看目标表数据情况。
select * from lineorder_brokerload_u;
可以查看到MySQL数据导入Doris成功,且根据UNIQUE KEY指定字段自动去重。