約束與限制
更新時間 2023-07-03 22:13:48
最近更新時間: 2023-07-03 22:13:48
分享文章
本章節主要介紹約束與限制。
CDM系統級限制和約束
- 集群創建好以后不支持修改規格,如果需要使用更高規格的,需要重新創建一個集群。
- ARM版本的CDM集群不支持Agent功能。CDM集群為ARM或X86版本,依賴于底層資源的架構。
- CDM暫不支持控制遷移數據的速度,請避免在業務高峰期執行遷移數據的任務。
- 當前CDM集群cdm.large實例規格網卡的基準/最大帶寬為0.8/3 Gbps,單個實例一天傳輸數據量的理論極限值在8TB左右。同理,cdm.xlarge實例規格網卡的基準/最大帶寬為4/10 Gbps,理論極限值在40TB左右;cdm.4xlarge實例規格網卡的基準/最大帶寬為36/40 Gbps,理論極限值在360TB左右。對傳輸速度有要求的情況下可以使用多個數據集成實例實現。上述數據量為理論極限值,實際傳輸數據量受數據源類型、源和目的數據源讀寫性能、帶寬等多方面因素制約,實測cdm.large規格最大可達到約8TB每天(大文件遷移到OBS場景)。推薦用戶在正式遷移前先用小數據量實測進行速度摸底。
- 遷移文件或對象時支持文件級增量遷移(通過配置跳過重復文件實現),但不支持斷點續傳。例如要遷移3個文件,第2個文件遷移到一半時由于網絡原因失敗,再次啟動遷移任務時,會跳過第1個文件,從第2個文件開始重新傳,但不能從第2個文件失敗的位置重新傳。
- 文件遷移時,單個任務支持千萬數量的文件,如果待遷移目錄下文件過多,建議拆分到不同目錄并創建多個任務。
- 用戶在CDM上配置的連接和作業支持導出到本地保存,考慮到密碼的安全性,CDM不會將對應數據源的連接密碼導出。因此在將作業配置重新導入到CDM前,需要手工編輯導出的JSON文件補充密碼或在導入窗口配置密碼。
- 不支持集群自動升級到新版本,需要用戶通過作業的導出和導入功能,實現升級到新版本。
- 在無OBS的場景下,CDM系統不會自動備份用戶的作業配置,需要用戶通過作業的導出功能進行備份。
- 如果配置了VPC對等連接,可能會出現對端VPC子網與CDM管理網重疊,從而無法訪問對端VPC中數據源的情況。推薦使用公網做跨VPC數據遷移,或聯系管理員在CDM后臺為VPC對等連接添加特定路由。
- CDM遷移,當目的端為DWS和NewSQL的時候,不支持將源端的主鍵和唯一索引等約束一起遷移過去。
- CDM遷移作業時,需確保兩個集群版本的JSON文件格式保持一致,才可以從將源集群的作業導入到目標集群。
數據庫遷移通用限制和約束
- CDM以批量遷移為主,僅支持有限的數據庫增量遷移,不支持數據庫實時增量遷移。
- CDM支持的數據庫整庫遷移,僅支持數據表遷移,不支持存儲過程、觸發器、函數、視圖等數據庫對象遷移。
- CDM僅適用于一次性將數據庫遷移到云上的場景,包括同構數據庫遷移和異構數據庫遷移,不適合數據同步場景,比如容災、實時同步。
- CDM遷移數據庫整庫或數據表失敗時,已經導入到目標表中的數據不會自動回滾,對于需要事務模式遷移的用戶,可以配置“先導入到階段表”參數,實現遷移失敗時數據回滾。極端情況下,可能存在創建的階段表或臨時表無法自動刪除,也需要用戶手工清理(階段表的表名以“_cdm_stage”結尾,例如:cdmtet_cdm_stage)。
- CDM訪問用戶本地數據中心數據源時(例如本地自建的MySQL數據庫),需要用戶的數據源可支持Internet公網訪問,并為CDM集群實例綁定彈性IP。這種方式下安全實踐是:本地數據源通過防火墻或安全策略僅允許CDM彈性IP訪問。
- 僅支持常用的數據類型,字符串、數字、日期,對象類型有限支持,如果對象過大會出現無法遷移的問題。
- 僅支持數據庫字符集為GBK和UTF-8。
- 字段名不可使用&和%。
關系數據庫遷移權限配置
常見關系數據庫遷移需要的最小權限級:
- MySQL:INFORMATION_SCHEMA庫的讀權限,以及對數據表的讀權限。
- Oracle:需要該用戶有resource角色,并在tablespace下有數據表的select權限。
- 達夢:具有該schema下select any table的權限。
- DWS:需要表的schema usage權限和數據表的查詢權限
- SQL Server:用戶需要有sysadmin權限。
- PostgreSQL:角色擁有數據庫下schema下表的select權限。
FusionInsight HD和Apache Hadoop數據源約束
FusionInsight HD和Apache Hadoop數據源在用戶本地數據中心部署時,由于讀寫Hadoop文件需要訪問集群的所有節點,需要為每個節點都放通網絡訪問。
數據倉庫服務(DWS) 和FusionInsight LibrA數據源約束
- DWS主鍵或表只有一個字段時,要求字段類型必須是如下常用的字符串、數值、日期類型。從其他數據庫遷移到DWS時,如果選擇自動建表,主鍵必須為以下類型,未設置主鍵的情況下至少要有一個字段是以下類型,否則會無法創建表導致CDM作業失敗。
- INTEGER TYPES:TINYINT,SMALLINT,INT,BIGINT,NUMERIC/DECIMAL
- CHARACTER TYPES:CHAR,BPCHAR,VARCHAR,VARCHAR2,NVARCHAR2,TEXT
- DATA/TIME TYPES:DATE,TIME,TIMETZ,TIMESTAMP,TIMESTAMPTZ,INTERVAL,SMALLDATETIME
- DWS字符類型字段認為空字符串('')是空值,有非空約束的字段無法插入空字符串(''),這點與MySQL行為不一致,MySQL不認為空字符串('')是空值。從MySQL遷移到DWS時,可能會因為上述原因導致遷移失敗。
- 使用GDS模式快速導入數據到DWS時,需要配置相關安全組或防火墻策略,允許DWS/LibrA的數據節點訪問CDM IP地址的25000端口。
- 使用GDS模式導入數據到DWS時,CDM會自動創建外表(foreign table)用于數據導入,表名以UUID結尾(例如:cdmtest_aecf3f8n0z73dsl72d0d1dk4lcir8cd),作業失敗正常會自動刪除,極端情況下可能需要用戶手工清理。
對象存儲服務(OBS )數據源約束
- 遷移文件時系統會自動并發,任務配置中的“抽取并發數”無效。
- 不支持斷點續傳。CDM傳文件失敗會產生OBS碎片,需要用戶到OBS控制臺清理碎片文件避免空間占用。
- 不支持對象多版本的遷移。
- 增量遷移時,單個作業的源端目錄下的文件數量或對象數量,根據CDM集群規格分別有如下限制:大規格集群30萬、中規格集群20萬、小規格集群10萬。如果單目錄下文件或對象數量超過限制,需要按照子目錄來拆分成多個遷移作業。
DLI數據源約束
使用CDM服務遷移數據到DLI時,當前用戶需擁有OBS的讀取權限。
Oracle數據源約束
不支持Oracle實時增量數據同步。
分布式緩存服務(DCS )和Redis數據源約束
- 由于分布式緩存服務(DCS)限制了獲取所有Key的命令,CDM無法支持DCS作為源端,但可以作為遷移目的端,第三方云的Redis服務也無法支持作為源端。如果是用戶在本地數據中心或ECS上自行搭建的Redis支持作為源端或目的端。
- 僅支持Hash和String兩種數據格式。
文檔數據庫服務(DDS )和MongoDB數據源約束
從MongoDB、DDS遷移數據時,CDM會讀取集合的首行數據作為字段列表樣例,如果首行數據未包含該集合的所有字段,用戶需要自己手工添加字段。
云搜索服務和Elasticsearch數據源約束
- CDM支持自動創建索引和類型,索引和類型名稱只能全部小寫,不能有大寫。
- 索引下的字段類型創建后不能修改,只能創建新字段。如果一定要修改字段類型,需要創建新索引或到Kibana上用Elasticsearch命令刪除當前索引重新創建(數據也會刪除)。
- CDM自動創建的索引,字段類型為date時,要求數據格式為“yyyy-MM-dd HH:mm:ss.SSS Z”,即“2018-08-08 08:08:08.888 +08:00”。遷移數據到云搜索服務時如果date字段的原始數據不滿足格式要求,可以通過CDM的表達式轉換功能轉換為上述格式。
Kafka數據源約束
消息體中的數據是一條類似CSV格式的記錄,可以支持多種分隔符。不支持二進制格式或其他格式的消息內容解析。
表格存儲服務(CloudTable )和HBase數據源約束
- CloudTable或HBase作為源端時,CDM會讀取表的首行數據作為字段列表樣例,如果首行數據未包含該表的所有字段,用戶需要自己手工添加字段。
- 由于HBase的無Schema技術特點,CDM無法獲知數據類型,如果數據內容是使用二進制格式存儲的,CDM會無法解析。
Hive數據源約束
Hive作為遷移的目的時,如果存儲格式為Textfile,在Hive創建表的語句中需要顯式指定分隔符。例如:
CREATE TABLE csv_tbl(smallint_value smallint,tinyint_value tinyint,int_value int,bigint_value bigint,float_value float,double_value double,decimal_value decimal(9, 7),timestmamp_value timestamp,date_value date,varchar_value varchar(100),string_value string,char_value char(20),boolean_value boolean,binary_value binary,varchar_null varchar(100),string_null string,char_null char(20),int_null int)ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'WITH SERDEPROPERTIES ("separatorChar" = "\t","quoteChar" ="'","escapeChar" ="")STORED AS TEXTFILE;