Doris在CMP7(类Cloudera CDP 7 404版)启用 Kerberos部署Doris
- CMP Base 7.1.7(即 Cloud Data AI Data Platform ,基于 Cloud Data AI Manager 管理)
- 启用 Kerberos(企业级安全认证)
这三种场景下,Apache Doris 与 CMP 的集成策略需区别对待 。下面我将分别说明 可行方案、安全集成要点、实施建议 ,并提供 可运行的代码/ 脚本模板(包括 Kerberos 配置、Spark Connector 示例、Hive Catalog 配置等)。
一、总体原则
| 环境 | 是否推荐部署 Doris | 推荐集成方式 |
|---|---|---|
| CMP Base 7.1.7 (私有云,Kerberos ) | ✅ 推荐(可控环境) | 独立部署 Doris + Kerberos 集成 + Hive Catalog / Spark Connector |
| CMP Public Cloud | ⚠️ 有限支持 | 仅可通过 External Compute(如 AWS EC2 / Azure VM)部署 Doris,通过 VPC 对等连接访问 CMP 数据湖 |
| Kerberos 启用 | ✅ 必须配置 | Doris 需配置 Kerberos 客户端,获取 keytab,支持 HDFS/Hive 安全访问 |
❗ CMP Public Cloud 限制 :
CMP Public Cloud(如 Data Lake、DW、Streams 等服务)不开放底层节点 SSH 或 Parcel 安装权限 ,无法在托管集群内直接部署 Doris。必须使用 外部计算资源。
二、方案 1 :CMP Base 7.1.7 + Kerberos 环境(推荐生产使用)
目标
- 在 CMP 私有云集群旁独立部署 Doris
- Doris 能安全读取 Hive 表(通过 Hive Metastore + Kerberos)
- Spark on YARN 作业可写入 Doris
步骤 1 :准备 Doris 部署节点(3 台)
- 操作系统:RHEL/CentOS 7/8(与 CMP 一致)
- 安装 Kerberos 客户端:
Bash:
yum install -y krb5-workstation krb5-libs
- 从 CMP 集群复制 /etc/krb5.conf 到 Doris 节点
步骤 2 :创建 Doris 服务主体并生成 keytab
在 CMP 的 KDC(如 FreeIPA 或 MIT KDC)中执行:
Bash:
创建主体
kadmin.local -q "addprinc -randkey doris/CMP-node1@EXAMPLE.COM"
kadmin.local -q "addprinc -randkey doris/CMP-node2@EXAMPLE.COM"
kadmin.local -q "addprinc -randkey doris/CMP-node3@EXAMPLE.COM"
生成 keytab(在 Doris FE 节点执行)
kadmin.local -q "xst -k /etc/security/keytabs/doris.keytab doris/CMP-node1@EXAMPLE.COM"
注意:BE 节点也需要对应主机名的主体(或使用通配符 doris/_HOST@REALM,需 KDC 支持)。
步骤 3 :部署 Apache Doris (2.0+ )
下载地址(以 2.1.0 为例):
Bash:
wget https://archive.apache.org/dist/doris/2.1.0-rc01/apache-doris-2.1.0-bin-x86_64.tar.gz
tar -xzf apache-doris-2.1.0-bin-x86_64.tar.gz -C /opt/
ln -s /opt/apache-doris-2.1.0 /opt/doris
配置 fe/conf/fe.conf:
Ini:
priority_networks = 10.0.0.0/24
enable_token_check = false
配置 be/conf/be.conf:
Ini:
priority_networks = 10.0.0.0/24
步骤 4 :配置 Hive Catalog (支持 Kerberos )
在 Doris 中执行 SQL:
Sql:
CREATE EXTERNAL CATALOG hive_kerberos_catalog
PROPERTIES (
"type" = "hive",
"hive.metastore.uris" = "thrift://CMP-hms-host.example.com:9083",
"hive.metastore.sasl.enabled" = "true",
"hive.metastore.kerberos.principal" = "hive/_HOST@EXAMPLE.COM",
"doris.hive.catalog.kerberos.principal" = "doris/CMP-node1@EXAMPLE.COM",
"doris.hive.catalog.kerberos.keytab" = "/etc/security/keytabs/doris.keytab",
"hadoop.security.authentication" = "kerberos",
"hadoop.security.kerberos.ticket.cache.path" = "/tmp/doris_krb5cc"
);
✅ 验证:
Sql:
SHOW CATALOGS;
SWITCH hive_kerberos_catalog;
SHOW DATABASES;
SELECT * FROM default.sales LIMIT 10;
步骤 5 :Spark on YARN 写入 Doris (Kerberos 环境)
5.1 准备 JAR 包
从 Maven Central 下载适配 Spark 3.2(CMP Base 7.1.7 默认)的版本:
Bash:
示例:Spark 3.2 + Scala 2.12
5.2 Spark 作业示例(PySpark )
Python:
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.appName("Write to Doris") \
.config("spark.jars", "/path/to/spark-doris-connector-3.2_2.12-1.3.0.jar") \
.getOrCreate()
df = spark.sql("SELECT * FROM hive_table")
df.write.format("doris") \
.option("doris.fenodes", "doris-fe-host:8030") \
.option("doris.table.identifier", "analytics.sales") \
.option("user", "root") \
.option("password", "") \
.option("doris.write.fields", "col1,col2,col3") \
.mode("append") \
.save()
🔐 Kerberos 注意 :Spark 作业本身已通过 CMP 的 YARN/Kerberos 认证,Doris 写入走的是 Doris 自身的 MySQL 协议(非 Kerberos ),因此只需确保 Doris FE 开放 8030 端口且网络可达。
三、方案 2 :CMP Public Cloud (外部 Doris 部署)
架构
Text:
CMP **Public** Cloud Data Lake
↑ (VPC Peering / PrivateLink)
AWS EC2 / Azure VM\] ←─ 部署 Apache Doris **实施要点** * **网络打通** : * 在 AWS:使用 **VPC Peering** 或 **PrivateLink** 连接 CMP Public Cloud VPC * 在 Azure:使用 **VNet Peering** * **Hive Metastore** **访问** : * CMP Public Cloud 的 HMS 通常通过 **Atlas/ Ranger** **网关** 暴露,需申请 **Private Endpoint** * 或通过 **CMP Data Engineering** 集群的 HMS(需开通访问权限) * **Kerberos** : * CMP Public Cloud 使用 **FreeIPA + Kerberos** * 需在 Doris 节点加入 FreeIPA 域(或手动配置 krb5.conf + keytab) * **数据导入** : * 推荐使用 **S3 / ADLS Gen2** 作为中间层: * Spark 作业写 Parquet 到 S3 * Doris 通过 S3 Load 或 Broker Load 导入 **示例:Doris** **从 S3** **加载(无需 Kerberos** **)** Sql: CREATE LOAD LABEL sales_20251105 ( DATA INFILE("s3://my-bucket/sales/\*.parquet") INTO TABLE sales FORMAT **AS** "parquet" ) WITH BROKER "my_s3_broker" PROPERTIES ( "s3.endpoint" = "s3.us-west-2.amazonaws.com", "s3.access_key" = "AKIA...", "s3.secret_key" = "xxxx", "timeout" = "3600" ); *** ** * ** *** **四、关键脚本模板(CMP Base 7.1.7 + Kerberos** **)** **1. krb5.conf** **(与 CMP** **一致)** Ini: \[libdefaults
default_realm = EXAMPLE.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
realms
EXAMPLE.COM = {
kdc = kdc.example.com
admin_server = kdc.example.com
}
domain_realm
.example.com = EXAMPLE.COM
2. 自动续期 Kerberos Ticket (Cron )
Bash:
/etc/cron.d/doris-krb
0 */8 * * * root kinit -k -t /etc/security/keytabs/doris.keytab doris/$(hostname -f)@EXAMPLE.COM && cp /tmp/krb5cc_* /tmp/doris_krb5cc
3. Doris 启动脚本(systemd )
Ini:
/etc/systemd/system/doris-fe.service
Unit
Description=Apache Doris FE
After=network.target
Service
Type=forking
User=doris
ExecStart=/opt/doris/fe/bin/start_fe.sh --daemon
ExecStop=/opt/doris/fe/bin/stop_fe.sh
Restart=on-failure
Install
WantedBy=multi-user.target
五、总结与建议
| 环境 | 推荐做法 | 风险 |
|---|---|---|
| CMP Base 7.1.7 + Kerberos | 独立部署 Doris + Hive Catalog + Spark Connector | 需手动维护 Doris 集群 |
| CMP Public Cloud | 外部 VM 部署 Doris + S3 中转 + VPC Peering | 网络/权限配置复杂 |
| 通用 | 不要尝试 Parcel 集成 | 无官方支持,升级困难 |