Apache Doris 4.0 的 AI 功能(LLM 函数 + 向量索引)与 Cloudera CDP 7.3(或类 CDP 的 CMP 7.13 平台,如华为鲲鹏 ARM 版)在银行信信用卡的操作指南和脚本

针对 国有商业银行 场景下,Apache Doris 4.0(ARM64 鲲鹏环境)与华为 Cloud Data AI CMP 7.13 集成的 具体部署脚本与配置样例,涵盖:

  • Doris 在鲲鹏 ARM 服务器上的编译与部署脚本
  • Doris 通过 Routine Load 接入 CMP 的 Kafka(启用了 Kerberos
  • Doris 多 Catalog 直连 CMP 的 Hive(启用 Ranger + Kerberos
  • LLM UDF 调用本地 Qwen 模型服务(ARM 优化版)示例
  • 向量索引建表示例(含 HNSW 索引)

一、环境前提

  • 操作系统:麒麟 V10 SP2(ARM64)
  • CPU 架构:Huawei Kunpeng 920
  • CMP 版本Cloud Data AI Manager 7.13(含 Kafka 3.3 + Hive 3.1 + Ranger 2.3 + Kerberos)
  • Doris 版本:Apache Doris 4.0.1(社区版)
  • LLM 服务:Qwen-1.8B-Chat,运行于 vLLM(ARM 支持需定制)

二、1. Doris ARM64 编译与部署脚本

deploy_doris_arm.sh

Bash:

#!/bin/bash

# 部署 Apache Doris 4.0 到鲲鹏 ARM64 环境(麒麟 V10)

set -e

# === 配置 ===

DORIS_HOME=/opt/doris

VERSION=4.0.0

USER=doris

GROUP=doris

# 创建用户

sudo useradd -m -s /bin/bash -U $USER || true

# 安装依赖

sudo yum install -y git gcc gcc-c++ make flex bison binutils-devel \

    libstdc++-static glibc-static python3 cmake openssl-devel \

    java-11-openjdk-devel libtool autoconf automake wget

# 设置 JAVA_HOME

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk

export PATH=$JAVA_HOME/bin:$PATH

# 下载源码

cd /tmp

git clone https://github.com/apache/doris.git

cd doris

git checkout "branch-$VERSION"

# 编译(使用 ARM 优化参数)

sh build.sh --clean --be --fe --arm

# 安装到目标目录

sudo mkdir -p $DORIS_HOME/{fe,be}

sudo cp -r output/fe/* $DORIS_HOME/fe/

sudo cp -r output/be/* $DORIS_HOME/be/

sudo chown -R $USER:$GROUP $DORIS_HOME

# 启动脚本(简化)

cat > $DORIS_HOME/start_fe.sh <<EOF

#!/bin/bash

cd $DORIS_HOME/fe

bin/start_fe.sh --daemon

EOF

cat > $DORIS_HOME/start_be.sh <<EOF

#!/bin/bash

cd $DORIS_HOME/be

bin/start_be.sh --daemon

EOF

chmod +x $DORIS_HOME/*.sh

echo "Doris deployed to $DORIS_HOME"

✅ 注意:build.sh --arm 是 Doris 4.0+ 新增选项,自动启用 -march=armv8-a+crc+crypto。


三、2. Doris 接入 CMP Kafka(Kerberos 认证)

前提:

  • CMP Kafka 已启用 Kerberos(如 kafka/kafka01@EXAMPLE.COM)
  • 已获取 keytab:doris.keytab

步骤:

(1) 将 keytab 和 krb5.conf 放入 Doris BE 节点

Bash

编辑

# 在所有 BE 节点执行

sudo mkdir -p /etc/security/keytabs

sudo cp doris.keytab /etc/security/keytabs/

sudo chown doris:doris /etc/security/keytabs/doris.keytab

sudo chmod 400 /etc/security/keytabs/doris.keytab

# 确保 /etc/krb5.conf 与 CMP 集群一致

sudo cp krb5.conf /etc/

(2) 修改 BE 配置(be.conf

Ini:

# be.conf

kafka_client_kerberos_principal = doris@EXAMPLE.COM

kafka_client_kerberos_keytab = /etc/security/keytabs/doris.keytab

enable_routine_load_task_consume_by_kafka_client = true

重启 BE。

(3) Doris 中创建 Routine Load 任务

Sql:

-- 创建数据库和表

CREATE DATABASE IF NOT EXISTS bank_dw;

USE bank_dw;

CREATE TABLE transaction_log (

    tx_id VARCHAR(64),

    cust_id VARCHAR(32),

    amount DECIMAL(18,2),

    event_time DATETIME,

    raw_json STRING

)

DUPLICATE KEY(tx_id)

DISTRIBUTED BY HASH(tx_id) BUCKETS 10

PROPERTIES("replication_num" = "3");

-- 创建 Routine Load(对接 CMP Kafka)

CREATE ROUTINE LOAD bank_dw.rload_tx FROM KAFKA

(

    "kafka_broker_list" = "kafka01:9092,kafka02:9092",

    "kafka_topic" = "bank_tx_raw",

    "property.security.protocol" = "SASL_PLAINTEXT",

    "property.sasl.mechanism" = "GSSAPI",

    "property.sasl.kerberos.service.name" = "kafka"

)

PROPERTIES

(

    "desired_concurrent_number" = "3",

    "max_batch_interval" = "20",

    "format" = "json"

);


四、3. Doris 多 Catalog 直连 CMP Hive(Kerberos + Ranger

(1) FE 配置 fe.conf

Ini:

# 启用 catalog

enable_multi_catalog = true

# Hive metastore 连接(需 Kerberos)

hadoop_kerberos_keytab = /etc/security/keytabs/doris.keytab

hadoop_kerberos_principal = doris@EXAMPLE.COM

hadoop_security_authentication = kerberos

重启 FE。

(2) Doris 中创建 Hive Catalog

Sql:

CREATE CATALOG cmp_hive PROPERTIES (

    'type' = 'hms',

    'hive.metastore.uris' = 'thrift://cmp-hive-metastore:9083',

    'dfs.client.use.datanode.hostname' = 'true',

    'hadoop.security.authentication' = 'kerberos',

    'kerberos.principal' = 'doris@EXAMPLE.COM',

    'kerberos.keytab' = '/etc/security/keytabs/doris.keytab',

    'hive.security.authorization.enabled' = 'true'

);

(3) 查询示例

Sql:

-- 直接查询 CMP Hive 表(只读)

SELECT * FROM cmp_hive.default.customer_dim LIMIT 10;

🔒 Ranger 会自动拦截未授权访问,确保符合银行权限策略。


五、4. LLM UDF 调用本地 Qwen 服务(ARM

(1) 部署 Qwen API 服务(假设运行在 http://localhost:8000/v1/chat/completions

使用 vLLM 或 FastChat 启动(ARM 适配需自行编译或使用 MindIE)。

(2) 编写 Python UDF(Doris 4.0 支持 HTTP UDF

Doris 4.0 引入 HTTP UDF,无需编译 C++,直接调用 REST API。

创建 UDF 函数

Sql:

CREATE FUNCTION llm_summarize(input STRING)

RETURNS STRING

PROPERTIES (

    "type" = "HTTP",

    "symbol" = "http://localhost:9000/summarize",

    "timeout" = "5000"

);

启动轻量代理(Python Flask

Python:

# summarize_proxy.py

from flask import Flask, request, jsonify

import requests

app = Flask(__name__)

@app.route('/summarize', methods=['POST'])

def summarize():

    data = request.json

    text = data['input']

    # 调用本地 Qwen

    resp = requests.post('http://localhost:8000/v1/chat/completions', json={

        "model": "qwen-1_8b-chat",

        "messages": [{"role": "user", "content": f"请用一句话总结以下内容:{text}"}],

        "max_tokens": 100

    }, timeout=3)

    result = resp.json()['choices'][0]['message']['content'].strip()

    return jsonify({"result": result})

if __name__ == '__main__':

    app.run(host='0.0.0.0', port=9000)

启动:

Bash:

nohup python3 summarize_proxy.py > proxy.log 2>&1 &

使用示例

Sql

编辑

SELECT llm_summarize(complaint_text) AS summary

FROM bank_dw.customer_complaints

LIMIT 5;


六、5. 向量索引建表示例(HNSW

Sql:

-- 启用向量功能(需在 fe.conf 中设置 enable_vectorized_engine=true

CREATE TABLE customer_embedding (

    cust_id VARCHAR(32),

    name VARCHAR(100),

    embedding ARRAY<FLOAT>,   -- 或 VECTOR(768)(Doris 4.0 实验性支持)

    update_time DATETIME

)

DUPLICATE KEY(cust_id)

DISTRIBUTED BY HASH(cust_id) BUCKETS 8

PROPERTIES (

    "replication_num" = "3",

    "enable_persistent_index" = "true"

);

-- 创建 HNSW 向量索引(Doris 4.0 支持)

CREATE INDEX idx_emb_hnsw ON customer_embedding (embedding)

USING HNSW

PROPERTIES (

    "metric" = "cosine",

    "ef_construction" = "200",

    "m" = "16"

);

-- 查询相似客户

SET vector_sim_threshold = 0.8;

SELECT cust_id, name, cosine_similarity(embedding, [0.1,0.2,...,0.5]) AS score

FROM customer_embedding

ORDER BY score DESC

LIMIT 10;

⚠️ 注意:ARRAY<FLOAT> 是当前稳定方案;VECTOR 类型需确认 Doris 4.0 是否已 GA(建议查看 Release Note)。


七、附:关键配置文件路径汇总

组件

文件

说明

Doris FE

$DORIS_HOME/fe/conf/fe.conf

启用 multi-catalogKerberos

Doris BE

$DORIS_HOME/be/conf/be.conf

Kafka Kerberosroutine load

系统

/etc/krb5.conf

CMP 集群一致

安全

/etc/security/keytabs/doris.keytab

Doris 服务账号凭证

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐