使用Dataproc Serverless将数据从GCS导入到数据库(通过JDBC)。

244 阅读3分钟

在运行Spark作业的同时管理服务器始终是一个挑战。使用完全按需管理的服务器和Spark作业是当今时代的需要。它可以帮助开发者集中精力处理核心应用逻辑,而不是花时间去管理框架。Dataproc Serverless就是谷歌云平台提供的这样一个产品。

大多数交易数据仍然停留在关系型数据库服务器上,可以通过使用JDBC驱动进行连接。MySQL、Oracle和SQL Server主要用于此。

今天的世界正在向基于云的存储服务转变,以存储数据。它已经引发了谷歌云存储桶的使用。

这篇文章是关于通过Dataproc Serverless将数据从GCS Buckets转移到JDBC数据库的。

关键优势

  1. 使用Dataproc Serverless来运行Spark批处理工作负载,无需管理Spark框架。在这个模板中,批量大小也是可以配置的。
  2. GCST toJDBC模板是开源的,配置驱动的,并且可以随时使用。执行代码只需要JDBC和GCS凭证。
  3. 支持的文件格式有Avro、Parquet和ORC。
  4. JDBCT toGCS模板可以反过来使用,即通过JDBC将数据从数据库导出到GCS桶。

使用方法

  1. 如果你打算使用GCP生成的 "默认 "VPC网络,请确保你已经启用了谷歌私人访问的子网。你仍然需要启用私人访问,如下所示。

gcloud compute networks subnets update default --region=us-central1 --enable-private-ip-google-access

2.创建一个GCS桶和jar文件的暂存位置。

3.3. 在预先安装了各种工具的云端外壳中克隆git repo。也可以使用任何预装了JDK 8+、Maven和Git的机器。

git clone 

4.4. 获得认证凭证(用于提交工作)。

gcloud auth application-default login

5.执行GCSToJDBC模板。
Eg:

export GCP_PROJECT=my-gcp-project
bin/start.sh \

注意:它将要求你启用Dataproc Api,如果尚未启用。

设置每日增量数据导出

有时需要在日/周/月末进行导出。除此之外,你可能想只提取增量变化,因为在每个迭代中导出整个数据可能是矫枉过正。

注意:Dataproc Serverless不支持实时作业。因此,如果你的目标是将变化从GCS实时复制到JDBC,那么你将需要研究变化数据捕获(CDC)的替代方案。

  1. 使用标准数据库的提交时间戳功能,你可以跟踪插入/更新的行(删除不能被捕获)。
  2. 重写sql查询,提交给spark,以捕获自上次执行以来的变化。例如
jdbctogcs.sql='select trip_id, bikeid, duration_minutes from bikeshare where LastUpdateTime >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY'

3.安排批处理作业。
GCP原生提供了云调度器+云功能,可以用来提交spark批处理作业。另外,也可以使用自我管理的软件,如linux cron tab, Jenkins等。

设置额外的spark属性

如果你需要指定Dataproc Serverless支持的spark属性,如调整驱动器、内核、执行器的数量等。

你可以编辑start.sh文件中的OPT_PROPERTIES值。

参考资料
https://medium.com/google-cloud/cloud-spanner-export-query-results-using-dataproc-serverless-6f2f65b583a4https://cloud.google.com/pubsub/docs/overviewhttps://github.com/GoogleCloudPlatform/dataproc-templates


使用Dataproc Serverless从GCS导入数据到数据库(通过JDBC)最初发表于Google Cloud - Communityon Medium,人们通过强调和回应这个故事继续对话。