以下是关于 Doris Broker Load 结合 Kerberos 认证的 HDFS 数据导入的详细解析:
一、Broker Load 核心原理
Broker Load 是 Doris 中用于从 HDFS/S3 等远程存储系统异步导入大数据的工具,其核心流程如下:
- 任务提交:用户通过 SQL 提交 Broker Load 任务至 FE(Frontend)。
- 计划生成:FE 根据文件大小和 BE(Backend)节点数量生成分布式执行计划。
- 数据拉取:BE 通过 Broker 进程(已集成 HDFS/S3 支持)拉取 HDFS 数据。
- 转换与写入:BE 进行数据格式转换(如 ORC/Parquet 解析)并写入 Doris 存储层。
- 状态确认:所有 BE 完成写入后,FE 汇总状态并标记任务成功或失败。
二、Kerberos 认证的 HDFS 配置要点
当 HDFS 启用 Kerberos 安全认证时,需额外配置以下参数:
1. Broker 进程配置
在 Broker 的 conf/apache_hdfs_broker.conf 中添加:
# 启用 Kerberos 认证
hadoop.security.authentication = kerberos
# Kerberos 主体和密钥表路径
kerberos_principal = your_principal@REALM
kerberos_keytab = /path/to/keytab/file.keytab
# HDFS 核心配置
hadoop_conf_dir = /path/to/hadoop/conf
需确保:
- Keytab 文件权限:Broker 进程有读取权限(
是broker的启动用户对keytab文件有读权限
)。 - krb5.conf 同步:所有节点同步 Kerberos 配置文件(
/etc/krb5.conf
)。
2. 导入任务 SQL 示例
-- 创建hdfs broker,不指定字段
LOAD LABEL broker_load_test_user111
(DATA INFILE("hdfs://hadoop/user/test/zpf/test/user_test.txt")INTO TABLE `user_test`COLUMNS TERMINATED BY ","FORMAT AS CSV
)
WITH HDFS
("fs.defaultFS" = "hdfs://ns01","hadoop.security.authentication" = "kerberos","hadoop.kerberos.principal" = "user01@HADOOP.COM","hadoop.kerberos.keytab" = "/etc/security/keytabs/user01.keytab","dfs.nameservices" = "ns01","dfs.ha.namenodes.ns01" = "nn1,nn2","dfs.namenode.rpc-address.ns01.nn1" = "192.168.1.101:8020","dfs.namenode.rpc-address.ns01.nn2" = "192.168.1.102:8020","dfs.client.failover.proxy.provider.ns01" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider","hadoop.security.auth_to_local" = "RULE:[1:$1@$0](^.*@.*$)s/^(.*)@.*$/$1/gRULE:[2:$1@$0](^.*@.*$)s/^(.*)@.*$/$1/gDEFAULT"
)
PROPERTIES
("timeout" = "14400", # 导入的超时时间,单位秒。范围是 1 秒 ~ 259200 秒。"max_filter_ratio" = "0", # 最大容忍可过滤(数据不规范等原因)的数据比例,默认零容忍。"strict_mode" = "true", # 是否开启严格模式。"partial_columns" = "false", # 是否使用部分列更新,只在表模型为 Unique Key 且采用 Merge on Write 时有效。"timezone" = "Asia/Shanghai", # 本次导入所使用的时区"load_parallelism" = "8", # 每个 BE 上并发 instance 数量的上限。"send_batch_parallelism" = "1", # sink 节点发送数据的并发度,仅在关闭 memtable 前移时生效。"load_to_single_tablet" = "false", # 是否每个分区只导入一个 tablet,默认值为 false。"skip_lines" = "0", # 跳过 CSV 文件的前几行。"trim_double_quotes" = "false", # 是否裁剪掉导入文件每个字段最外层的双引号。"priority" = "NORMAL", # 导入任务的优先级。"HIGH" 或 "NORMAL" 或 "LOW""exec_mem_limit" = "2147483648" # 导入内存限制,默认为 2GB,单位为字节。
)
COMMENT "备注、注释";
三、常见问题与解决方案
1. 认证失败:Server asks to fall back to SIMPLE auth
- 原因:Broker 未正确配置 Kerberos 或密钥表路径错误。
- 解决:
- 检查
kerberos_keytab
路径是否存在且权限正确。 - 在
hadoop_conf_dir
中确认core-site.xml
和hdfs-site.xml
包含 Kerberos 配置。
- 检查
2. 文件读取超时
- 原因:HDFS 节点网络延迟或 Kerberos 票据过期。
- 解决:
- 增加
timeout
参数(默认 4 小时)。 - 使用
kinit -kt /path/to/keytab your_principal
手动续期票据。
- 增加
3. 数据格式解析错误
- 原因:HDFS 文件格式(如 ORC/Parquet)与 Doris 表结构不匹配。
- 解决:
- 使用
DESC target_table
核对字段顺序和类型。 - 通过
FORMAT AS
显式指定文件格式。
- 使用
4. Hadoop 版本兼容性
Hadoop 版本兼容性:确保 Broker 支持的 Hadoop 版本与集群一致(如 Hadoop 3.3 需对应配置)
5. 端口冲突
端口冲突:修改 Doris 默认端口(如 webserver_port)避免与 Hadoop 服务冲突
四、性能优化建议
- 并行度控制:通过
BROKER_INSTANCE
参数分配多个 Broker 进程提升吞吐。 - 压缩优化:启用 HDFS 的 Snappy/LZ4 压缩减少传输时间。
- 内存调整:增大 BE 节点的
mem_limit
和query_timeout
避免 OOM。
五、与其他导入方式的对比
特性 | Broker Load | Stream Load | Routine Load |
---|---|---|---|
数据源 | HDFS/S3 | 本地文件/HTTP流 | Kafka |
认证支持 | Kerberos/简单认证 | 简单认证 | SASL/SSL |
适用场景 | 大数据批量导入 | 小文件实时写入 | 流式数据持续消费 |
通过以上配置和优化,Broker Load 可高效稳定地完成 Kerberos 认证的 HDFS 数据导入。如需进一步调试,可通过 SHOW LOAD WHERE LABEL = "label_20250319"
查看任务状态。
-- 查看导入状态
show load from test where label = 'broker_load_test_user111'\G;
-- 查看具体报错内容
show load warnings on '';