本文介紹使用開源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。