本文介绍使用开源DataX配置同步任务将云数据库Cassandra全量数据导入至云原生多模数据库 Lindorm宽表的方法。
前提条件
已阅读并了解Lindorm CQL使用限制。详细信息,请参见Lindorm CQL使用限制。
已将客户端IP地址添加至Lindorm白名单。如何添加,请参见设置白名单。
已在云原生多模数据库 Lindorm宽表中创建Namespace和表。
创建Namespace的方法,请参见CREATE KEYSPACE。
通过CREATE TABLE语法创建Lindorm宽表,请参见CREATE TABLE。
注意事项
如果开源DataX部署在ECS实例,通过专有网络访问Lindorm实例前,需要确保Lindorm实例和ECS实例满足以下条件,以保证网络的连通性。
所在地域相同,并建议所在可用区相同(以减少网络延时)。
ECS实例与Lindorm实例属于同一专有网络。
操作步骤
以下操作以开源DataX部署在ECS实例上为例。
执行以下命令下载开源DataX安装包。
wget https://github.com/alibaba/DataX/archive/refs/tags/datax_v202303.tar.gz
解压下载的开源DataX安装包。
tar zxvf datax_v202303.tar.gz
执行以下命令在DataX_datax_v202303项目中新建job目录并创建同步任务文件,文件名为JOB.json。
mkdir job touch JOB.json
打开同步任务文件JOB.json。
vi JOB.json
配置同步任务文件,同步任务文件的配置内容如下,根据下表的参数说明配置同步任务。
{ "job": { "setting": { "speed": { "channel": 1 } }, "content": [ { "reader": { "name": "cassandrareader", "parameter": { "host": "ld-bp17j28j2y7pm****-proxy-lindorm-pub.lindorm.rds.aliyuncs.com", "port": 9042, "username": "TestUser01", "password": "testPassword", "useSSL": false, "consistancyLevel": "LOCAL_ONE", "timeout": 600000, "fetchsize": 1, "keyspace": "db", "table": "tt", "column": [ "id", "n", "id1" ], "where": "id > ${split_task_min} and id < ${split_task_max}" } }, "writer": { "name": "cassandrawriter", "parameter": { "host": "ld-bp17j28j2y7pm****-proxy-lindorm-pub.lindorm.rds.aliyuncs.com", "port": 9042, "username": "TestUser01", "password": "testPassword", "useSSL": false, "keyspace": "t1", "table": "tt", "column": [ "id", "n", "id1" ] } } } ] } }
参数
是否必选
说明
channel
是
表示同步任务的并行度,通过设置数值来提高同步任务的运行速度。
host
是
port
是
端口号固定为9042。
reader.parameter.port:云数据库Cassandra集群的连接地址端口号。
writer.parameter.port:云原生多模数据库 Lindorm宽表引擎的Cassandra兼容地址端口号。
useSSL
是
是否开启SSL(Secure Sockets Layer)加密。
true:开启SSL加密。
false:不开启SSL加密。
keyspace
是
reader.parameter.keyspace:云数据库Cassandra中需要导入的Keyspace名称。
writer.parameter.keyspace:导入至Lindorm宽表的Namespace名称。
table
是
reader.parameter.table:云数据库Cassandra中需要导入的Table。
writer.parameter.table:导入至Lindorm宽表的表名。
column
是
reader.parameter.column:云数据库Cassandra中需要导入的Table的列名。
writer.parameter.column:导入至Lindorm宽表中指定表的列名。
where
否
表示任务进行拆分的条件。利用where参数可以将单个任务拆分为多个任务。
执行以下代码,在DataX_datax_v202303项目的job目录下构建Datax可执行文件。
mvn -U package assembly:assembly -Dmaven.test.skip=true
可选:参数调优。
您可以使用以下代码,替换mvn执行成功以后生成的target/datax/datax/bin/目录下的datax.py执行脚本中相同格式的代码,来提升迁移效率:
DEFAULT_JVM = "-Xms8g -Xmx8g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%s/log" % (DATAX_HOME) DEFAULT_PROPERTY_CONF = "-Dfile.encoding=UTF-8 -Dcom.datastax.driver.NATIVE_TRANSPORT_MAX_FRAME_SIZE_IN_MB=1900 -Dlogback.statusListenerClass=ch.qos.logback.core.status.NopStatusListener -Djava.security.egd=file:///dev/urandom -Ddatax.home=%s -Dlogback.configurationFile=%s" % ( DATAX_HOME, LOGBACK_FILE)
执行以下命令,运行单个同步任务。
#用法: python target/datax/datax/bin/datax.py --help python target/datax/datax/bin/datax.py job/JOB.json -p "-Dsplit_task_min=100 -Dsplit_task_max=1000"
其中JOB.json为同步任务文件的名称。
说明您也可以根据源集群和目标集群的内存、CPU或网络等限制条件,在job目录下创建多个同步任务文件,执行命令同时运行多个同步任务。
示例
如果您在执行本文操作步骤时需要参考示例代码,或在执行步骤6时希望提高mvn -U命令的运行速度,请参见datax.tar.gz。