You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在本地Debian服务器部署Delta Lake(Databricks方案)

在Debian服务器上部署无云依赖的Delta Lake(Python环境)

一、基础环境准备

Delta Lake依赖Apache Spark,所有节点(单节点/集群)需先完成以下配置:

  1. 安装Java(Spark依赖)

    sudo apt update && sudo apt install -y openjdk-11-jdk
    # 配置环境变量(写入~/.bashrc永久生效)
    echo "export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64" >> ~/.bashrc
    echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> ~/.bashrc
    source ~/.bashrc
    
  2. 安装Python与依赖管理

    sudo apt install -y python3 python3-pip python3-venv
    # 可选:创建虚拟环境隔离依赖
    python3 -m venv delta-env
    source delta-env/bin/activate
    
  3. 安装Apache Spark
    选择与Delta Lake兼容的版本(例:Spark 3.3.x对应Delta Lake 2.4.x):

    wget https://dlcdn.apache.org/spark/spark-3.3.4/spark-3.3.4-bin-hadoop3.tgz
    tar xzf spark-3.3.4-bin-hadoop3.tgz
    sudo mv spark-3.3.4-bin-hadoop3 /opt/spark
    # 配置环境变量
    echo "export SPARK_HOME=/opt/spark" >> ~/.bashrc
    echo "export PATH=\$PATH:\$SPARK_HOME/bin:\$SPARK_HOME/sbin" >> ~/.bashrc
    source ~/.bashrc
    
  4. 添加Delta Lake依赖
    两种方式二选一:

    # 方式1:启动PySpark时动态加载
    pyspark --packages io.delta:delta-core_2.12:2.4.0
    # 方式2:下载jar包到Spark目录(永久生效)
    wget https://repo1.maven.org/maven2/io/delta/delta-core_2.12/2.4.0/delta-core_2.12-2.4.0.jar -P /opt/spark/jars/
    wget https://repo1.maven.org/maven2/io/delta/delta-storage/2.4.0/delta-storage-2.4.0.jar -P /opt/spark/jars/
    

二、单节点Delta Lake验证

用Python编写代码测试核心功能:

from pyspark.sql import SparkSession
from delta.tables import DeltaTable

# 初始化支持Delta Lake的SparkSession
spark = SparkSession.builder \
    .appName("LocalDeltaLake") \
    .config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension") \
    .config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog") \
    .getOrCreate()

# 1. 写入Delta表到本地磁盘
sample_data = spark.createDataFrame([(1, "apple"), (2, "banana"), (3, "cherry")], ["id", "fruit"])
sample_data.write.format("delta").mode("overwrite").save("/data/delta/fruits")

# 2. 读取Delta表
delta_df = spark.read.format("delta").load("/data/delta/fruits")
delta_df.show()

# 3. 执行ACID合并操作
update_data = spark.createDataFrame([(2, "blueberry"), (4, "date")], ["id", "fruit"])
delta_table = DeltaTable.forPath(spark, "/data/delta/fruits")

delta_table.alias("old") \
    .merge(update_data.alias("new"), "old.id = new.id") \
    .whenMatchedUpdate(set={"fruit": "new.fruit"}) \
    .whenNotMatchedInsert(values={"id": "new.id", "fruit": "new.fruit"}) \
    .execute()

# 验证合并结果
delta_df_updated = spark.read.format("delta").load("/data/delta/fruits")
delta_df_updated.show()

spark.stop()

三、搭建分布式集群(存储+机器学习)

3.1 集群规划

  • 1台Master节点:负责集群调度
  • N台Worker节点:执行计算、存储数据
  • 可选:部署MinIO作为分布式对象存储(替代云存储,兼容S3接口)

3.2 集群统一配置

所有节点完成基础环境后,执行以下步骤:

  1. 配置SSH免密登录
    Master节点生成密钥并分发到Worker节点:

    ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
    for worker_ip in 192.168.1.101 192.168.1.102; do
        ssh-copy-id your-username@$worker_ip
    done
    
  2. 配置Spark集群参数
    Master节点修改$SPARK_HOME/conf/spark-env.sh:

    cp $SPARK_HOME/conf/spark-env.sh.template $SPARK_HOME/conf/spark-env.sh
    echo "export SPARK_MASTER_HOST=你的Master节点IP" >> $SPARK_HOME/conf/spark-env.sh
    

    所有Worker节点修改$SPARK_HOME/conf/spark-env.sh:

    echo "export SPARK_MASTER_URL=spark://你的Master节点IP:7077" >> $SPARK_HOME/conf/spark-env.sh
    

3.3 启动集群

# Master节点启动服务
start-master.sh
# 每个Worker节点启动服务
start-worker.sh spark://你的Master节点IP:7077

访问http://Master节点IP:8080查看集群状态,确认Worker节点已注册。

3.4 配置MinIO分布式存储

  1. 安装并启动MinIO:
    wget https://dl.min.io/server/minio/release/linux-amd64/minio
    chmod +x minio
    sudo mv minio /usr/local/bin/
    mkdir -p /data/minio
    # 后台启动MinIO,控制台端口9001
    nohup minio server /data/minio --console-address ":9001" > minio.log 2>&1 &
    
  2. Spark配置MinIO访问:
    修改$SPARK_HOME/conf/spark-defaults.conf:
    spark.hadoop.fs.s3a.endpoint http://MinIO节点IP:9000
    spark.hadoop.fs.s3a.access.key 你的MinIO访问密钥
    spark.hadoop.fs.s3a.secret.key 你的MinIO秘密密钥
    spark.hadoop.fs.s3a.path.style.access true
    spark.hadoop.fs.s3a.impl org.apache.hadoop.fs.s3a.S3AFileSystem
    
    之后可将Delta表存储到MinIO路径:s3a://bucket-name/delta-table

3.5 集群机器学习示例

结合PySpark MLlib与Delta Lake完成分类任务:

from pyspark.sql import SparkSession
from pyspark.ml.classification import LogisticRegression
from pyspark.ml.feature import VectorAssembler

# 连接到Spark集群
spark = SparkSession.builder \
    .appName("DeltaMLCluster") \
    .master("spark://你的Master节点IP:7077") \
    .config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension") \
    .config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog") \
    .getOrCreate()

# 从MinIO的Delta表读取训练数据
train_data = spark.read.format("delta").load("s3a://ml-bucket/training-data")

# 特征工程
assembler = VectorAssembler(inputCols=["feature1", "feature2", "feature3"], outputCol="features")
train_data_processed = assembler.transform(train_data)

# 训练逻辑回归模型
lr = LogisticRegression(featuresCol="features", labelCol="label")
model = lr.fit(train_data_processed)

# 保存模型到MinIO
model.save("s3a://ml-bucket/models/lr-model")

spark.stop()

四、关键注意事项

  • 版本匹配:确保Spark、Scala、Delta Lake版本兼容(例:Spark 3.3.x对应Scala 2.12、Delta Lake 2.4.x)
  • 资源调优:根据服务器硬件调整spark.executor.memory、spark.driver.memory等参数
  • 数据备份:定期备份Delta表目录或MinIO存储桶,避免数据丢失

内容的提问来源于stack exchange,提问作者Tavakoli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 09:05:14