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-catalog、Kerberos

Doris BE

$DORIS_HOME/be/conf/be.conf

Kafka Kerberos、routine load

系統

/etc/krb5.conf

與 CMP 集羣一致

安全

/etc/security/keytabs/doris.keytab

Doris 服務賬號憑證