最佳实践 | 在 EMR Serverless Spark 中实现 Doris 读写操作

01

背景信息

阿里云 EMR Serverless Spark 版是一款兼容开源 Spark 的高性能 Lakehouse 产品,提供了企业级全托管的数据平台服务。

Apache Doris是一个高性能、实时的分析型数据库,能够较好地满足报表分析、即席查询、数据湖联邦查询加速等使用场景。更多信息,请参见Apache Doris 简介。(链接:https://x.sm.cn/FVRekM4)

基于Apache Doris官方提供的Spark Connector,EMR Serverless Spark可以在开发时添加对应的配置来连接Doris。通过结合Apache Doris与EMR Serverless Spark,您可以高效地进行数据读取、写入和分析操作,从而实现端到端的数据处理流程。

EMR Serverless Spark 新用户可 免费领取 1000 CU*小时 资源包,欢迎体验。(链接:https://www.aliyun.com/product/emr/getting-started?utm_content=g_1000402199)

02

前提条件

  • 已创建Serverless Spark工作空间,详情请参见创建工作空间。(链接:https://x.sm.cn/5PT3myd)

  • 已创建Doris集群。

如果是在EMR on ECS创建包含Doris服务的数据分析(OLAP)集群,详情请参见创建集群。本文以在EMR on ECS创建包含Doris服务的集群为例,后续简称EMR Doris集群。(链接:https://x.sm.cn/GsRtsdl)

03

使用限制

EMR Serverless Spark引擎的版本要求为esr-2.5.0、esr-3.1.0、esr-4.1.0及以上版本。

04

操作流程

步骤一:获取Doris Spark Connector JAR并上传至OSS

您需要查阅Doris的官方文档Spark Doris Connector。该文档通常会列出不同版本的连接器与不同版本的 Spark 引擎的兼容情况。您需要确认您正在使用的 Spark 版本与 Doris Spark Connector 版本之间的兼容性。(链接:https://x.sm.cn/4LaHo6R)

1. 访问Doris Spark Connector的GitHub仓库,选择合适的版本进行下载。(链接:https://x.sm.cn/729dfO3)

Doris Spark Connector JAR包的命名格式为 spark-doris-connector-spark-${spark_version}-${connector_version}.jar。例如,您使用的引擎版本为esr-3.1.0 (Spark 3.4.3, Scala 2.12),则可以下载 spark-doris-connector-spark-3.4-24.0.0.jar

2. 将下载的Spark Connector JAR上传至阿里云OSS中,上传操作可以参见简单上传。(链接:https://x.sm.cn/GFAIaoS)

步骤二:创建网络连接

EMR Serverless Spark需要能够打通与EMR Doris集群之间的网络才可以正常访问Doris服务。更多网络连接信息,请参见EMR Serverless Spark与其他VPC间网络互通。(链接:https://x.sm.cn/FBE5hnX)

重要

配置安全组规则时,端口范围请根据实际需求选择性开放必要的端口。端口范围的取值为1~65535。本文示例需开启HTTP 端口(8031)、RPC 端口(9061)以及Webserver端口(8041)。

步骤三:在EMR Doris集群中创建库表

1. 使用SSH方式登录集群,详情请参见登录集群。(链接:https://x.sm.cn/APz8T1s)

2. 执行以下命令,连接EMR Doris集群。

mysql -h127.0.0.1  -P 9031 -uroot

3. 创建数据库和表。

CREATE DATABASE IF NOT EXISTS testdb;
USE testdb;
CREATE TABLE test (    id INT,     name STRING) PROPERTIES("replication_num" = "1");

4. 插入测试数据。

INSERT INTO test VALUES (1, 'a'), (2, 'b'), (3, 'c');

5. 查询数据。

SELECT * FROM test;

返回信息如下图所示。

image

步骤四:EMR Serverless Spark读取Doris表

📍 使用 SQL 会话读 Doris 表

1. 创建SQL会话,详情请参见管理SQL会话。(链接:https://x.sm.cn/B3NSd0U)

创建会话时,在引擎版本下拉列表中选择与Doris Spark Connector版本对应的引擎版本,在网络连接中选择步骤二中创建好的网络连接,并在Spark配置中添加以下参数来加载Doris Spark Connector。

spark.user.defined.jars  oss://<bucketname>/path/connector.jar

其中,oss://<bucketname>/path/connector.jar为您步骤一中上传至OSS的Doris Spark Connector的路径。例如,oss://emr-oss/spark/spark-doris-connector-spark-3.4-24.0.0.jar

2. 在数据开发页面,选择创建一个SQL > SparkSQL类型的任务,然后在右上角选择创建好的SQL会话。

更多操作,请参见SparkSQL开发。(链接:https://x.sm.cn/BJPDwLp)

3. 拷贝如下代码到新增的SparkSQL页签中,并根据需要修改相应的参数信息,然后单击运行

CREATE TEMPORARY VIEW testUSING dorisOPTIONS(  "table.identifier" = "testdb.test",  "fenodes" = "<doris_address>:<http_port>",  "user" = "<user>",  "password" = "<password>");
SELECT * FROM test;

其中,涉及参数信息说明如下。

参数

描述

示例

testdb.test

Doris服务中实际的数据库和表名。

1. 如果您使用的是其他Doris集群,请根据实际情况填写相应的配置。

2. 如果您使用的是EMR on ECS中创建的集群,则填写如下参数值:

  • testdb.test:本文以testdb.test为例。

  • <doris_address>:您可以在EMR on ECS控制台Doris集群的节点管理页面,单击emr-master前的图标,查看内网IP地址。

  • <http_port>:默认为8031。

  • <user>:默认用户名为root

  • <password>:默认密码为空。

<doris_address>

Doris服务所在的节点内网IP地址。

<http_port>

Doris服务监听HTTP请求的端口号。

<user>

用于连接Doris服务的用户名。

<password>

用于连接Doris服务的用户密码。

如果能够正常返回数据,则表明配置正确。

a6085019eb29ea40c57e23544acc9e59.png

📍 使用 Notebook 会话读 Doris 表

1. 创建Notebook会话,详情请参见管理Notebook会话。(链接:https://x.sm.cn/5WVeGOF)

创建会话时,在引擎版本下拉列表中选择与Doris Spark Connector版本对应的引擎版本,在网络连接中选择步骤二中创建好的网络连接,并在Spark配置中添加以下参数来加载Doris Spark Connector。

spark.user.defined.jars  oss://<bucketname>/path/connector.jar

其中,oss://<bucketname>/path/connector.jar 为您步骤一中上传至OSS的Doris Spark Connector的路径。例如,oss://emr-oss/spark/spark-doris-connector-spark-3.4-24.0.0.jar

2. 在数据开发页面,选择创建一个Python > Notebook类型的任务,然后在右上角选择创建的Notebook会话。

更多操作,请参见管理Notebook会话。

3. 拷贝如下代码到新增的Notebook页签中,并根据需要修改相应的参数信息,然后单击运行

dorisSparkDF = spark.read.format("doris") \  .option("doris.table.identifier", "testdb.test") \  .option("doris.fenodes", "<doris_address>:<http_port>") \  .option("user", "<user>") \  .option("password", "<password>") \  .load()
  dorisSparkDF.show(3)

其中,涉及参数信息说明如下。

参数

描述

示例

testdb.test

Doris服务中实际的数据库和表名。

1. 如果您使用的是其他Doris集群,请根据实际情况填写相应的配置。

2. 如果您使用的是EMR on ECS中创建的集群,则填写如下参数值:

  • testdb.test:本文以testdb.test为例。

  • <doris_address>:您可以在EMR on ECS控制台Doris集群的节点管理页面,单击emr-master前的图标,查看内网IP地址。

  • <http_port>:默认为8031。

  • <user>:默认用户名为root

  • <password>:默认密码为空。

<doris_address>

Doris服务所在的节点内网IP地址。

<http_port>

Doris服务监听HTTP请求的端口号。

<user>

用于连接Doris服务的用户名。

<password>

用于连接Doris服务的用户密码。

如果能够正常返回数据,则表明配置正确。

1f05eca1fd5537ab1f25f3d954799c7c.png

步骤五:EMR Serverless Spark写入Doris表

📍 使用 SQL 会话写 Doris 表

拷贝如下代码到前一个步骤中新增的SparkSQL页签中,并根据需要修改相应的参数信息,然后单击运行

CREATE TEMPORARY VIEW test_writeUSING dorisOPTIONS(  "table.identifier" = "testdb.test",  "fenodes" = "<doris_address>:<http_port>",  "user" = "<user>",  "password" = "<password>");
INSERT INTO test_write VALUES (4, 'd'), (5, 'e');SELECT * FROM test_write;

如果能够返回以下数据,则表明数据写入成功。

dfd16307eeb2077aa8ee6379e8bbd59e.png

📍 使用 Notebook 会话写 Doris 表

拷贝如下代码到前一个步骤中新增的Notebook页签中,并根据需要修改相应的参数信息,然后单击运行

data = [(7, 'f'), (8, 'g')]mockDataDF = spark.createDataFrame(data, ["id", "name"])mockDataDF.write.mode("append").format("doris") \  .option("doris.table.identifier", "testdb.test") \  .option("doris.fenodes", "<doris_address>:<http_port>") \  .option("user", "<user>") \  .option("password", "<password>") \  .save()  dorisSparkDF = spark.read.format("doris") \  .option("doris.table.identifier", "testdb.test") \  .option("doris.fenodes", "<doris_address>:<http_port>") \  .option("user", "<user>") \  .option("password", "<password>") \  .load()
  dorisSparkDF.show(10)

如果能够返回以下数据,则表明数据写入成功。

946bff7cc27ea48437ce2a6c84a7f78c.png


如果您在使用 EMR Serverless Spark 的过程中遇到任何疑问,可加入钉钉群58570004119咨询。

点击阅读原文,立即开通免费试用!

### 使用 AutoGPTQ 库量化 Transformer 模型 为了使用 `AutoGPTQ` 对 Transformer 模型进行量化,可以遵循如下方法: 安装所需的依赖包是必要的操作。通过 pip 安装 `auto-gptq` 可以获取最新版本的库。 ```bash pip install auto-gptq ``` 加载预训练模型并应用 GPTQ (General-Purpose Tensor Quantization) 技术来减少模型大小和加速推理过程是一个常见的流程。下面展示了如何利用 `AutoGPTQForCausalLM` 类来进行这一工作[^1]。 ```python from transformers import AutoModelForCausalLM, AutoTokenizer from auto_gptq import AutoGPTQForCausalLM model_name_or_path = "facebook/opt-350m" quantized_model_dir = "./quantized_model" tokenizer = AutoTokenizer.from_pretrained(model_name_or_path) model = AutoModelForCausalLM.from_pretrained(model_name_or_path) # 加载已经量化的模型或者创建一个新的量化器对象用于量化未压缩过的模型 gptq_model = AutoGPTQForCausalLM.from_pretrained(quantized_model_dir, model=model, tokenizer=tokenizer) ``` 对于那些希望进一步优化其部署环境中的模型性能的人来说,`AutoGPTQ` 提供了多种配置选项来自定义量化参数,比如位宽(bit-width),这有助于平衡精度损失与运行效率之间的关系。 #### 注意事项 当处理特定硬件平台上的部署时,建议查阅官方文档以获得最佳实践指导和支持信息。此外,在实际应用场景之前应该充分测试经过量化的模型以确保满足预期的质量标准。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值