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 能力,实现“数据湖治理 + 智能实时分析”的现代化架构。

 

posted on 2025-11-11 13:50  肥仔鱼  阅读(0)  评论(0)    收藏  举报