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 节点的主机。
  • cassandraKeyspace:表所在的 Apache Cassandra 键空间。
  • cassandraTable:要复制的 Apache Cassandra 表。
  • bigtableProjectId:与 Bigtable 实例关联的 Google Cloud 项目 ID。
  • bigtableInstanceId:Apache Cassandra 表复制到的 Bigtable 实例的 ID。
  • bigtableTableId:Apache Cassandra 表复制到的 Bigtable 表的名称。

可选参数

  • cassandraPort:用于在节点上访问 Apache Cassandra 的 TCP 端口。默认值为 9042。
  • defaultColumnFamily:Bigtable 表的列族名称。默认值为 default。
  • rowKeySeparator:用于构建行键的分隔符。默认值为“#”。
  • splitLargeRows:用于启用将大行拆分为多个 MutateRows 请求的标志。请注意,当一个较大的行被拆分为多个 API 调用时,对该行的更新不是原子性的。

运行模板

控制台

  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 表

后续步骤