Delta Lake 与 Microsoft Azure Blob 存储
注册与配置
注册账号并登录
关于 Microsoft Azure 账号,请联系您的组织或以个人身份注册账号。详情请参阅 Microsoft Azure 官方网站。
创建存储容器
使用您的 Microsoft Azure 账号登录后,请按照以下步骤创建数据存储容器:

获取访问密钥

部署 Spark
下载 Spark 安装包
从 Spark 官方网站 下载与您的环境相匹配的 spark 安装包,然后解压:`shell tar -xzvf spark-3.2.0-bin-hadoop3.2.tgz `
配置 Spark
进入 $SPARK_HOME/conf 目录并执行:
cp spark-defaults.conf.template spark-defaults.conf将以下配置添加到 spark-defaults.conf 中,具体的个性化配置请参考您本地的实际配置:
spark.master spark://<YOUR_HOST>:7077
spark.sql.extensions io.delta.sql.DeltaSparkSessionExtension
spark.sql.catalog.spark_catalog org.apache.spark.sql.delta.catalog.DeltaCatalog在 $SPARK_HOME/conf 目录下创建一个名为 core-site.xml 的新文件,并添加以下配置:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.AbstractFileSystem.wasb.Impl</name>
<value>org.apache.hadoop.fs.azure.Wasb</value>
</property>
<property>
<name>fs.azure.account.key.YOUR_AZURE_ACCOUNT.blob.core.windows.net</name>
<value>YOUR_AZURE_ACCOUNT_ACCESS_KEY</value>
</property>
<property>
<name>fs.azure.block.blob.with.compaction.dir</name>
<value>/hbase/WALs,/tmp/myblobfiles</value>
</property>
<property>
<name>fs.azure</name>
<value>org.apache.hadoop.fs.azure.NativeAzureFileSystem</value>
</property>
<property>
<name>fs.azure.enable.append.support</name>
<value>true</value>
</property>
</configuration>将依赖项复制到 Spark
将 Delta Lake 和 Microsoft Azure 所需的 jar 包复制到 ./spark/jars 目录:
wget https://repo1.maven.org/maven2/io/delta/delta-core_2.12/1.0.0/delta-core_2.12-1.0.0.jar -O ./spark/jars/delta-core_2.12-1.0.0.jar
wget https://repo1.maven.org/maven2/com/microsoft/azure/azure-storage/8.6.6/azure-storage-8.6.6.jar -O ./spark/jars/azure-storage-8.6.6.jar
wget https://repo1.maven.org/maven2/com/azure/azure-storage-blob/12.14.2/azure-storage-blob-12.14.2.jar -O ./spark/jars/azure-storage-blob-12.14.2.jar
wget https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-azure/3.1.1/hadoop-azure-3.1.1.jar -O ./spark/jars/hadoop-azure-3.1.1.jar启动 Spark Standalone 集群
./spark/sbin/start-master.sh -h <YOUR_HOST> -p 7077 --webui-port 9090
./spark/sbin/start-worker.sh spark://<YOUR_HOST>:7077测试 Spark 与 Delta Lake 的连通性
启动 Spark shell:
./bin/spark-shell生成一段随机数据并将其推送到 Delta Lake 中:
scala> val data = spark.range(1000, 2000)
scala> data.write.format("delta").mode("overwrite").save("wasbs://<YOUR_CONTAINER_NAME>@<YOUR_AZURE_ACCOUNT>.blob.core.windows.net/<YOUR_TABLE_NAME>")之后,你可以在 Azure 网页界面上查看数据。例如,我的容器名称为 1000,表名称为 alexDemo20211127:

你也可以通过从 Delta Lake 中读回数据来检查数据:
scala> val df=spark.read.format("delta").load("wasbs://<YOUR_CONTAINER_NAME>@<YOUR_AZURE_ACCOUNT>.blob.core.windows.net/<YOUR_TABLE_NAME>")
scala> df.show()如果上述步骤没有问题,就说明 Spark 已经成功集成了 Delta Lake。
部署 Kyuubi
安装 Kyuubi
从 kyuubi 下载页面下载最新版本的 kyuubi。
解压
tar -xzvf apache-kyuubi-1.9.1-bin.tgz
配置 Kyuubi
进入 ./kyuubi/conf 目录
cp kyuubi-defaults.conf.template kyuubi-defaults.conf
vim kyuubi-defaults.conf添加以下内容:
spark.master spark://<YOUR_HOST>:7077
kyuubi.authentication NONE
kyuubi.frontend.bind.host <YOUR_HOST>
kyuubi.frontend.bind.port 10009
# If you use your own zk cluster, you need to configure your zk host port.
# kyuubi.ha.addresses <YOUR_HOST>:2181启动 Kyuubi
bin/kyuubi start查看 kyuubi 日志,以检查 kyuubi 启动状态并找到 JDBC 连接 URL:
2021-11-26 17:49:50.235 INFO service.ThriftFrontendService: Starting and exposing JDBC connection at: jdbc:hive2://HOST:10009/
2021-11-26 17:49:50.265 INFO client.ServiceDiscovery: Created a /kyuubi/serviceUri=host:10009;version=1.3.1-incubating;sequence=0000000037 on ZooKeeper for KyuubiServer uri: host:10009
2021-11-26 17:49:50.267 INFO server.KyuubiServer: Service[KyuubiServer] is started.通过上述日志即可获取 JDBC 连接 URL。
测试 Kyuubi 与 Delta Lake 的连通性
使用 $KYUUBI_HOME/bin/beeline 工具,
./bin//beeline -u 'jdbc:hive2://<YOUR_HOST>:10009/'同时,你也可以在 Spark UI 上检查引擎是否正在运行:

当引擎启动后,它会暴露一个 thrift 端点并注册到 ZooKeeper 中,Kyuubi 服务器可以从 ZooKeeper 获取连接信息并与引擎建立连接。因此,你可以在 ZooKeeper 路径 /kyuubi\_USER/anonymous 中查看注册详情。
使用 Kyuubi 示例处理 Delta Lake 数据
通过 SQL 操作 Delta Lake 数据:
创建表
-- Create or replace table with path
CREATE OR REPLACE TABLE delta.`wasbs://1000@azure_account.blob.core.windows.net/alexDemo20211129` (
date DATE,
eventId STRING,
eventType STRING,
data STRING)
USING DELTA
PARTITIONED BY (date);插入数据
追加模式
INSERT INTO delta.`wasbs://1000@azure_account.blob.core.windows.net/alexDemo20211129` (
date,
eventId,
eventType,
data)
VALUES
(now(),'001','test','Hello World!'),
(now(),'002','test','Hello World!'),
(now(),'003','test','Hello World!');结果:
+-------------+----------+------------+---------------+
| date | eventId | eventType | data |
+-------------+----------+------------+---------------+
| 2021-11-29 | 001 | test | Hello World! |
| 2021-11-29 | 003 | test | Hello World! |
| 2021-11-29 | 002 | test | Hello World! |
+-------------+----------+------------+---------------+覆盖模式
INSERT OVERWRITE TABLE delta.`wasbs://1000@azure_account.blob.core.windows.net/alexDemo20211129`(
date,
eventId,
eventType,
data)
VALUES
(now(),'001','test','hello kyuubi'),
(now(),'002','test','hello kyuubi');结果:
+-------------+----------+------------+---------------+
| date | eventId | eventType | data |
+-------------+----------+------------+---------------+
| 2021-11-29 | 002 | test | hello kyuubi |
| 2021-11-29 | 001 | test | hello kyuubi |
+-------------+----------+------------+---------------+删除表数据
DELETE FROM
delta.`wasbs://1000@azure_account.blob.core.windows.net/alexDemo20211129`
WHERE eventId = 002;结果:
+-------------+----------+------------+---------------+
| date | eventId | eventType | data |
+-------------+----------+------------+---------------+
| 2021-11-29 | 001 | test | hello kyuubi |
+-------------+----------+------------+---------------+更新表数据
UPDATE
delta.`wasbs://1000@azure_account.blob.core.windows.net/alexDemo20211129`
SET data = 'This is a test for update data.'
WHERE eventId = 001;结果:
+-------------+----------+------------+----------------------------------+
| date | eventId | eventType | data |
+-------------+----------+------------+----------------------------------+
| 2021-11-29 | 001 | test | This is a test for update data. |
+-------------+----------+------------+----------------------------------+查询表数据
SELECT *
FROM
delta.`wasbs://1000@azure_account.blob.core.windows.net/alexDemo20211129`;结果:
+-------------+----------+------------+----------------------------------+
| date | eventId | eventType | data |
+-------------+----------+------------+----------------------------------+
| 2021-11-29 | 001 | test | This is a test for update data. |
+-------------+----------+------------+----------------------------------+评论
登录后参与评论
KnowForge