Apache Doris 4.0 的 AI 功能(LLM 函数 + 向量索引)与 Cloudera CDP 7.3(或类 CDP 的 CMP 7.13 平台,如华为鲲鹏 ARM 版)操作过程
以下是 在启用 TLS + Kerberos 的 Cloudera CDP 7 环境中,部署 Apache Doris 4.0 并实现与外部云上 LLM(如 Qwen/DeepSeek)集成 的完整操作指南和脚本。
🧩 环境假设
|
组件 |
版本/配置 |
|
CDP Base |
7.3.1 或 CMP 7.13.x |
|
安全 |
启用 Kerberos + TLS(Hive Metastore、HDFS、YARN 均加密) |
|
Doris 部署 |
独立集群(3 FE + 3 BE),部署在 CDP 集群同 VPC 内网 |
|
LLM 服务 |
公有云 API(如阿里云 DashScope / DeepSeek API),通过公网 HTTPS 访问 |
|
网络 |
Doris 节点可访问外网(或通过代理),CDP ↔ Doris 网络互通 |
第一步:准备 Doris 节点(所有 FE/BE 节点执行)
1.1 安装依赖 & 同步时间
Bash:
# 所有节点执行
sudo yum install -y krb5-workstation ntp openssl
sudo systemctl enable --now ntpd
# 同步 CDP 的 krb5.conf(从任意 CDP 节点复制)
sudo scp cdp-node1:/etc/krb5.conf /etc/krb5.conf
1.2 创建 Doris Kerberos 主体(在 KDC 服务器执行)
Bash:
# 登录 KDC(通常为 CDP 的 KDC 节点)
kadmin.local
# 创建主体(假设 Doris FE 节点 hostname 为 doris-fe-1.example.com)
addprinc -randkey doris/doris-fe-1.example.com@EXAMPLE.COM
addprinc -randkey doris/doris-be-1.example.com@EXAMPLE.COM
# ... 为每个节点创建
# 生成 keytab(以 FE 为例)
ktadd -k /tmp/doris.keytab doris/doris-fe-1.example.com@EXAMPLE.COM
ktadd -k /tmp/doris.keytab doris/doris-be-1.example.com@EXAMPLE.COM
# 将 keytab 分发到对应节点
scp /tmp/doris.keytab doris-fe-1:/etc/security/keytabs/
chmod 600 /etc/security/keytabs/doris.keytab
chown doris:doris /etc/security/keytabs/doris.keytab
⚠️ 注意:doris 用户需提前创建:
Bash:
useradd -m doris
第二步:部署 Apache Doris 4.0
2.1 下载并解压(任选一节点操作,再分发)
Bash:
# 以 doris-fe-1 为例
cd /opt
wget https://downloads.apache.org/doris/4.0.0-incubating/apache-doris-4.0.0-incubating-bin-x86_64.tar.gz
tar -xzf apache-doris-4.0.0-incubating-bin-x86_64.tar.gz
ln -s apache-doris-4.0.0-incubating-bin-x86_64 doris
chown -R doris:doris doris*
2.2 配置 FE(conf/fe.conf)
Ini:
# fe/conf/fe.conf
priority_networks = 192.168.10.0/24 # 替换为实际内网网段
http_port = 8030
rpc_port = 9020
query_port = 9030
edit_log_port = 9010
# 启用 MySQL 协议 TLS(可选,若 BI 工具要求)
mysql_ssl_enabled = true
ssl_key_path = /opt/doris/certs/server.key
ssl_cert_path = /opt/doris/certs/server.crt
# 日志
sys_log_dir = /opt/doris/log/fe
2.3 配置 BE(conf/be.conf)
Ini:
# be/conf/be.conf
priority_networks = 192.168.10.0/24
be_port = 9060
webserver_port = 8040
brpc_port = 8060
brpc_num_threads = 8
# 存储路径(确保磁盘足够)
storage_root_path = /data1/doris/storage
# 日志
sys_log_dir = /opt/doris/log/be
2.4 启动 Doris(按顺序)
Bash
编辑
# 在所有 FE 节点
su - doris
/opt/doris/fe/bin/start_fe.sh --daemon
# 在 leader FE 添加 follower(首次只需 start)
# /opt/doris/fe/bin/stop_fe.sh && rm -rf /opt/doris/fe/meta && start_fe.sh --daemon
# 在所有 BE 节点
su - doris
/opt/doris/be/bin/start_be.sh --daemon
2.5 在 FE 中添加 BE(通过 MySQL 客户端)
Sql:
-- 连接 FE(默认 root 无密码)
mysql -h doris-fe-1 -P9030 -uroot
-- 添加 BE
ALTER SYSTEM ADD BACKEND "doris-be-1:9050";
ALTER SYSTEM ADD BACKEND "doris-be-2:9050";
ALTER SYSTEM ADD BACKEND "doris-be-3:9050";
-- 查看状态
SHOW PROC '/backends';
第三步:配置 Hive Catalog(支持 Kerberos + TLS)
3.1 获取 Hive Metastore 的 TLS 证书(可选,若启用双向 TLS)
Bash:
# 从 CDP 节点导出 Hive Metastore 的 CA 证书
openssl s_client -connect cdp-hms-host:9083 -showcerts </dev/null 2>/dev/null | openssl x509 -outform PEM > /opt/doris/conf/hms-ca.pem
3.2 在 Doris 中创建 Hive Catalog
Sql:
CREATE EXTERNAL CATALOG cdp_hive_krb
PROPERTIES (
"type" = "hive",
"hive.metastore.uris" = "thrift://cdp-hms-host.example.com:9083",
"hive.metastore.sasl.enabled" = "true",
"hive.metastore.kerberos.principal" = "hive/_HOST@EXAMPLE.COM",
"doris.hive.catalog.kerberos.principal" = "doris/doris-fe-1.example.com@EXAMPLE.COM",
"doris.hive.catalog.kerberos.keytab" = "/etc/security/keytabs/doris.keytab",
"hadoop.security.authentication" = "kerberos",
"dfs.client.use.datanode.hostname" = "true",
-- 若 HDFS 启用 TLS
"dfs.encrypt.data.transfer" = "true",
"dfs.trustedchannel.resolver.class" = "org.apache.hadoop.hdfs.DFSClientConfigKeys$TrustedChannelResolver"
);
✅ 验证:
Sql:
SHOW CATALOGS;
SHOW DATABASES FROM cdp_hive_krb;
SELECT * FROM cdp_hive_krb.default.user_comments LIMIT 5;
第四步:配置云上 LLM(以阿里云 Qwen 为例)
4.1 获取 API Key
- 登录 DashScope 控制台
- 创建 API Key(如 sk-xxxxxx)
4.2 在 Doris 中创建 LLM 资源
Sql:
CREATE RESOURCE 'qwen_llm' PROPERTIES (
"type" = "llm",
"llm.provider_type" = "qwen",
"llm.endpoint" = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation",
"llm.model_name" = "qwen-max",
"llm.api_key" = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
);
-- 设置为默认(可选)
SET default_llm_resource = 'qwen_llm';
🔒 安全建议:
- 不要在 SQL 中硬编码 api_key,生产环境建议使用 Doris Resource Manager 的密钥管理插件(社区版暂不支持,可考虑 Vault 代理);
- 或通过 本地代理服务 中转请求(见下文“高级安全”)。
第五步:测试 AI 功能(端到端)
Sql:
-- 测试语法修正(调用云上 Qwen)
SELECT LLM_FIXGRAMMAR('这个产品很不好用,根本没法用!') AS corrected;
-- 测试情感分析(从 CDP Hive 表读取)
SELECT
id,
comment,
LLM_SENTIMENT(comment) AS sentiment
FROM cdp_hive_krb.prod.user_feedback_table
WHERE dt = '2025-11-10'
LIMIT 10;
预期输出:
Text:
corrected: "该产品非常不好用,根本无法使用!"
sentiment: "negative"
🔐 高级安全建议(LLM 调用隔离)
由于 LLM API Key 敏感,且 Doris 社区版不支持密钥加密存储,推荐:
方案:部署本地 LLM 代理(Python Flask)
Python:
# llm_proxy.py
from flask import Flask, request, jsonify
import requests
import os
app = Flask(__name__)
API_KEY = os.getenv('DASHSCOPE_API_KEY')
@app.route('/qwen', methods=['POST'])
def proxy():
payload = request.json
headers = {
'Authorization': f'Bearer {API_KEY}',
'Content-Type': 'application/json'
}
resp = requests.post(
'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation',
json=payload,
headers=headers,
timeout=10
)
return jsonify(resp.json()), resp.status_code
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)
启动代理:
Bash:
export DASHSCOPE_API_KEY=sk-xxxxxx
nohup python3 llm_proxy.py > proxy.log 2>&1 &
Doris 中配置资源指向本地代理:
Sql:
CREATE RESOURCE 'qwen_local_proxy' PROPERTIES (
"type" = "llm",
"llm.provider_type" = "openai", -- 代理兼容 OpenAI 格式
"llm.endpoint" = "http://localhost:8080/qwen",
"llm.model_name" = "qwen-max",
"llm.api_key" = "dummy" -- 实际由代理处理
);
✅ 优势:API Key 不暴露给 Doris,网络策略可限制 Doris 仅访问内网代理。
📦 附:关键文件清单
|
文件 |
路径 |
说明 |
|
Kerberos 配置 |
/etc/krb5.conf |
从 CDP 复制 |
|
Doris Keytab |
/etc/security/keytabs/doris.keytab |
包含所有节点 principal |
|
Hive CA 证书 |
/opt/doris/conf/hms-ca.pem |
若启用 TLS |
|
LLM 代理 |
/opt/doris/llm_proxy.py |
可选,增强安全 |
✅ 验证清单
- Doris FE/BE 正常启动,SHOW PROC '/frontends' 和 '/backends' 显示 healthy
- SHOW DATABASES FROM cdp_hive_krb; 成功列出 Hive DB
- SELECT COUNT(*) FROM cdp_hive_krb.db.table; 返回正确行数
- SELECT LLM_FIXGRAMMAR('测试'); 返回修正文本(检查 Doris FE 日志是否有 LLM 调用记录)
- 网络:Doris 节点可 curl -v https://dashscope.aliyuncs.com
通过以上步骤,你已在 安全加固的 CMP 7.13 环境 中成功集成 Apache Doris 4.0 的 AI 能力,实现“数据湖治理 + 智能实时分析”的现代化架构。

浙公网安备 33010602011771号