Apache Cassandra to Bigtable 模板

Apache Cassandra to Bigtable 模板会将 Apache Cassandra 中的表复制到 Bigtable。 此模板需要最低限度的配置,可在 Bigtable 中尽可能接近地复制 Cassandra 中的表结构。

Apache Cassandra to Bigtable 模板适用于以下情况:

  • 在可以接受短时间停机的情况下,迁移 Apache Cassandra 数据库。
  • 定期将 Cassandra 表复制到 Bigtable 以便提供全球服务。

流水线要求

  • 在运行此流水线之前,目标 Bigtable 表必须已存在。
  • Dataflow 工作器与 Apache Cassandra 节点之间建立了网络连接。

类型转换

Apache Cassandra to Bigtable 模板会自动将 Apache Cassandra 数据类型转换为 Bigtable 的数据类型。

大多数原语在 Bigtable 和 Apache Cassandra 中的表示方式相同;但以下原语的表示方式有所不同:

  • DateTimestamp 会转化为 DateTime 对象
  • UUID 被转换为 String
  • Varint 被转换为 BigDecimal

Apache Cassandra 还原生支持更复杂的类型,例如 TupleListSetMap。此流水线不支持元组,因为 Apache Beam 中没有相应的类型。

例如,在 Apache Cassandra 中,您有一个 List 类型的列,名为“mylist”,还有一些类似下表内容的值。

row mylist
1 (a,b,c)

流水线会将列表列扩展为三个不同的列(在 Bigtable 中称为列限定符)。列名称为“mylist”,但流水线还会附加上列表中各项的索引编号,例如“mylist[0]”。

row mylist[0] mylist[1] mylist[2]
1 a b c

流水线按照处理列表的方式来处理集合,但添加了后缀来指明单元是键还是值。

row mymap
1 {"first_key":"first_value","another_key":"different_value"}

转换后,表如下所示:

row mymap[0].key mymap[0].value mymap[1].key mymap[1].value
1 first_key first_value another_key different_value

主键转换

在 Apache Cassandra 中,主键是使用数据定义语言定义的。主键可以是简单的、复合的,或者是与聚簇列复合的。Bigtable 支持手动行键构造,按字典顺序对字节数组进行排序。此流水线会收集有关键类型的信息,并遵循基于多个值构建行键的最佳做法构建键。

模板参数

参数 说明
cassandraHosts 以英文逗号分隔的列表中的 Apache Cassandra 节点的主机。
cassandraPort (可选)节点上用于访问 Apache Cassandra 的 TCP 端口(默认为 9042)。
cassandraKeyspace 表格所在的 Apache Cassandra 键空间。
cassandraTable 要复制的 Apache Cassandra 表格。
bigtableProjectId 从中复制 Apache Cassandra 表的 Bigtable 实例的 Google Cloud 项目 ID。
bigtableInstanceId 要复制 Apache Cassandra 表格的 Bigtable 实例 ID。
bigtableTableId 要复制 Apache Cassandra 表格的 Bigtable 表格的名称。
defaultColumnFamily (可选)Bigtable 表格的列族名称(默认为 default)。
rowKeySeparator (可选)用于构建行键的分隔符(默认为 #)。

运行模板

控制台

  1. 转到 Dataflow 基于模板创建作业页面。
  2. 转到“基于模板创建作业”
  3. 作业名称字段中,输入唯一的作业名称。
  4. 可选:对于区域性端点,从下拉菜单中选择一个值。默认区域为 us-central1

    如需查看可以在其中运行 Dataflow 作业的区域列表,请参阅 Dataflow 位置

  5. Dataflow 模板下拉菜单中,选择 the Cassandra to Cloud Bigtable template。
  6. 在提供的参数字段中,输入您的参数值。
  7. 点击运行作业

gcloud

在 shell 或终端中,运行模板:

gcloud dataflow jobs run JOB_NAME \
    --gcs-location gs://dataflow-templates-REGION_NAME/VERSION/Cassandra_To_Cloud_Bigtable \
    --region REGION_NAME \
    --parameters \
bigtableProjectId=BIGTABLE_PROJECT_ID,\
bigtableInstanceId=BIGTABLE_INSTANCE_ID,\
bigtableTableId=BIGTABLE_TABLE_ID,\
cassandraHosts=CASSANDRA_HOSTS,\
cassandraKeyspace=CASSANDRA_KEYSPACE,\
cassandraTable=CASSANDRA_TABLE

请替换以下内容:

  • JOB_NAME:您选择的唯一性作业名称
  • VERSION:您要使用的模板的版本

    您可使用以下值:

  • REGION_NAME:要在其中部署 Dataflow 作业的区域,例如 us-central1
  • BIGTABLE_PROJECT_ID:Bigtable 所在项目的 ID
  • BIGTABLE_INSTANCE_ID:Bigtable 实例 ID
  • BIGTABLE_TABLE_ID:Bigtable 表名称
  • CASSANDRA_HOSTS:Apache Cassandra 主机列表;如果提供了多个主机,请按照此说明了解如何转义逗号
  • CASSANDRA_KEYSPACE:表格所在的 Apache Cassandra 键空间
  • CASSANDRA_TABLE:需要迁移的 Apache Cassandra 表

API

如需使用 REST API 来运行模板,请发送 HTTP POST 请求。如需详细了解 API 及其授权范围,请参阅 projects.templates.launch

POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/templates:launch?gcsPath=gs://dataflow-templates-LOCATION/VERSION/Cassandra_To_Cloud_Bigtable
{
   "jobName": "JOB_NAME",
   "parameters": {
       "bigtableProjectId": "BIGTABLE_PROJECT_ID",
       "bigtableInstanceId": "BIGTABLE_INSTANCE_ID",
       "bigtableTableId": "BIGTABLE_TABLE_ID",
       "cassandraHosts": "CASSANDRA_HOSTS",
       "cassandraKeyspace": "CASSANDRA_KEYSPACE",
       "cassandraTable": "CASSANDRA_TABLE"
   },
   "environment": { "zone": "us-central1-f" }
}

请替换以下内容:

  • PROJECT_ID:您要在其中运行 Dataflow 作业的 Google Cloud 项目的 ID
  • JOB_NAME:您选择的唯一性作业名称
  • VERSION:您要使用的模板的版本

    您可使用以下值:

  • LOCATION:要在其中部署 Dataflow 作业的区域,例如 us-central1
  • BIGTABLE_PROJECT_ID:Bigtable 所在项目的 ID
  • BIGTABLE_INSTANCE_ID:Bigtable 实例 ID
  • BIGTABLE_TABLE_ID:Bigtable 表名称
  • CASSANDRA_HOSTS:Apache Cassandra 主机列表;如果提供了多个主机,请按照此说明了解如何转义逗号
  • CASSANDRA_KEYSPACE:表格所在的 Apache Cassandra 键空间
  • CASSANDRA_TABLE:需要迁移的 Apache Cassandra 表

后续步骤