使用 Dataproc Serverless for Spark 加载 BigQuery
实验
45 分钟
universal_currency_alt
5 个积分
show_chart
入门级
info
此实验可能会提供 AI 工具来支持您学习。
概览
Dataproc Serverless 是一项全托管式服务,可以更轻松地运行开源数据处理和分析工作负载,而无需管理基础设施或手动调整工作负载。
Dataproc Serverless for Spark 提供优化的环境,旨在将现有 Spark 工作负载轻松迁移至 Google Cloud。
在本实验中,您将在 Dataproc Serverless 环境中运行批处理工作负载。此工作负载将使用 Spark 模板来处理 Avro 文件,以便创建和加载 BigQuery 表。
您将执行的操作
- 配置环境
- 下载实验资源
- 配置并执行 Spark 代码
- 在 BigQuery 中查看数据
设置
点击“开始实验”按钮前的注意事项
请阅读以下说明。实验会以定时的方式进行,且您无法暂停实验。定时器(点击“开始实验”即可启动)会显示云资源可供您使用的时间。
Qwiklabs 实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud Platform。
要求
要完成此实验,您需要:
- 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
- 为完成实验留出时间。
注意:如果您已拥有个人 GCP 帐号或项目,请不要使用其进行此实验。
如何开始实验并登录控制台
-
点击开始实验按钮。如果该实验需要付费,系统会打开一个弹出式窗口供您选择付款方式。左侧面板中包含您在进行该实验时必须使用的临时凭据。

-
复制用户名,然后点击打开 Google 控制台。
该实验会启动资源并打开另一个标签页,显示选择账号页面。
注意:请在单独的窗口打开标签页,让它们并排显示。
-
在“选择账号”页面中点击使用其他账号。“登录”页面即会打开。

-
粘贴您从“连接详情”面板复制的用户名,然后复制并粘贴相应的密码。
注意:您必须使用“连接详情”面板中的凭据,请勿使用您的 Google Cloud Skills Boost 凭据。如果您拥有自己的 Google Cloud 账号,请不要在此实验中使用,以免产生费用。
- 继续在后续页面中点击以完成相应操作:
- 接受条款及条件。
- 由于该账号为临时账号,请勿添加账号恢复选项或双重验证。
- 请勿注册免费试用。
片刻之后,系统会在此标签页中打开 Cloud 控制台。
注意:您可以点击左上角的导航菜单来查看列有 Google Cloud 产品和服务的菜单。
激活 Google Cloud Shell
Google Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。
Google Cloud Shell 提供了可用于访问您的 Google Cloud 资源的命令行工具。
-
在 Cloud 控制台右上角的工具栏中,点击“打开 Cloud Shell”按钮。

-
点击继续。
预配并连接到环境需要一些时间。如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 PROJECT_ID。例如:

gcloud 是 Google Cloud 的命令行工具。它会预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。
gcloud auth list
输出:
Credentialed accounts:
- @.com (active)
输出示例:
Credentialed accounts:
- google1623327_student@qwiklabs.net
gcloud config list project
输出:
[core]
project =
输出示例:
[core]
project = qwiklabs-gcp-44776a13dea667a6
注意:有关 gcloud 的完整文档,请参阅 gcloud CLI 概览指南。
任务 1. 完成环境配置任务
首先,您要执行几个环境配置任务,为执行 Dataproc Serverless 工作负载提供支持。
- 在 Cloud Shell 中,运行以下命令以启用专用 IP 访问通道:
gcloud compute networks subnets update default --region={{{project_0.default_region |REGION}}} --enable-private-ip-google-access
- 使用以下命令创建新的 Cloud Storage 存储桶作为暂存位置:
gsutil mb -p {{{project_0.project_id |PROJECT_ID}}} gs://{{{project_0.project_id |PROJECT_ID}}}
- 使用以下命令创建新的 Cloud Storage 存储桶,作为 BigQuery 创建和加载表时的临时位置:
gsutil mb -p {{{project_0.project_id |PROJECT_ID}}} gs://{{{project_0.project_id |PROJECT_ID}}}-bqtemp
- 创建一个 BQ 数据集来存储数据。
bq mk -d loadavro
完成环境配置任务
任务 2. 下载实验资源
接下来,您要把完成实验所需的一些资源下载到实验提供的 Compute Engine 虚拟机中。您将在 Compute Engine 虚拟机中执行其余实验步骤。
- 在导航菜单中点击 Compute Engine。您会看到为您预配的 Linux 虚拟机。点击 lab-vm 实例旁的 SSH 按钮。

- 在虚拟机终端提示符处输入以下命令,下载将被处理并存储到 BigQuery 中的 Avro 文件。
wget https://storage.googleapis.com/cloud-training/dataengineering/lab_assets/idegc/campaigns.avro
- 接下来,将 Avro 文件复制到之前创建的用于暂存的 Cloud Storage 存储桶中。
gcloud storage cp campaigns.avro gs://{{{project_0.project_id |PROJECT_ID}}}
- 下载包含要在无服务器环境中执行的 Spark 代码的归档文件。
wget https://storage.googleapis.com/cloud-training/dataengineering/lab_assets/idegc/dataproc-templates.zip
- 解压缩归档文件。
unzip dataproc-templates.zip
- 切换到 Python 目录。
cd dataproc-templates/python
下载实验资源
任务 3. 配置并执行 Spark 代码
下面,您将在虚拟机实例终端中设置几个环境变量,并执行 Spark 模板以将数据加载至 BigQuery。
- 为 Dataproc Serverless 环境设置以下环境变量。
export GCP_PROJECT={{{project_0.project_id |PROJECT_ID}}}
export REGION={{{project_0.default_region |REGION}}}
export GCS_STAGING_LOCATION=gs://{{{project_0.project_id |PROJECT_ID}}}
export JARS=gs://cloud-training/dataengineering/lab_assets/idegc/spark-bigquery_2.12-20221021-2134.jar
- 运行以下代码以执行 Spark Cloud Storage to BigQuery 模板,将 Avro 文件加载到 BigQuery 中。
./bin/start.sh \
-- --template=GCSTOBIGQUERY \
--gcs.bigquery.input.format="avro" \
--gcs.bigquery.input.location="gs://{{{project_0.project_id |PROJECT_ID}}}" \
--gcs.bigquery.input.inferschema="true" \
--gcs.bigquery.output.dataset="loadavro" \
--gcs.bigquery.output.table="campaigns" \
--gcs.bigquery.output.mode=overwrite\
--gcs.bigquery.temp.bucket.name="{{{project_0.project_id |PROJECT_ID}}}-bqtemp"
注意:您可以放心地忽略陈述以下信息的警告:警告 FileStreamSink:假设没有元数据目录。在路径中查找元数据目录时出错… 这是一个小测试,不需要元数据目录。
注意:如果您看到错误消息提示批量作业失败,请稍等,然后重新运行该命令,直到作业成功为止。
配置并执行 Spark 代码
任务 4. 确认数据已加载至 BigQuery
现在,您已经成功执行 Spark 模板,该在 BigQuery 中检查结果了。
- 在 BigQuery 中查看新表中的数据。
bq query \
--use_legacy_sql=false \
'SELECT * FROM `loadavro.campaigns`;'
- 该查询应返回类似以下结果:
输出示例:
+------------+--------+---------------------+--------+---------------------+----------+-----+
| created_at | period | campaign_name | amount | advertising_channel | bid_type | id |
+------------+--------+---------------------+--------+---------------------+----------+-----+
| 2020-09-17 | 90 | NA - Video - Other | 41 | Video | CPC | 81 |
| 2021-01-19 | 30 | NA - Video - Promo | 325 | Video | CPC | 137 |
| 2021-06-28 | 30 | NA - Video - Promo | 78 | Video | CPC | 214 |
| 2021-03-15 | 30 | EU - Search - Brand | 465 | Search | CPC | 170 |
| 2022-01-01 | 30 | EU - Search - Brand | 83 | Search | CPC | 276 |
| 2020-02-18 | 30 | EU - Search - Brand | 30 | Search | CPC | 25 |
| 2021-06-08 | 30 | EU - Search - Brand | 172 | Search | CPC | 201 |
| 2020-11-29 | 60 | EU - Search - Other | 83 | Search | CPC | 115 |
| 2021-09-11 | 30 | EU - Search - Other | 86 | Search | CPC | 237 |
| 2022-02-17 | 30 | EU - Search - Other | 64 | Search | CPC | 296 |
+------------+--------+---------------------+--------+---------------------+----------+-----+
确认数据已加载至 BigQuery
恭喜!
您已成功使用 Dataproc Serverless for Spark 执行了批量工作负载,将 Avro 文件加载到了 BigQuery 表中。
版权所有 2020 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。