本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
步驟 4:配cqlsh COPY FROM
置設置
本節概述如何決定的參數值cqlsh COPY
FROM
。此命cqlsh COPY FROM
令會讀取您之前準備好的 CSV 檔案,並使用 CQL 將資料插入 Amazon Keyspaces。該命令分割行,並在一組 Worker 之間分配INSERT
操作。每個工作者都會與 Amazon Keyspaces 建立連線,並沿著此通道傳送INSERT
請求。
該cqlsh COPY
命令沒有內部邏輯,可以在其 Worker 之間平均分配工作。但是,您可以手動配置它,以確保工作均勻分佈。請先檢閱下列 cqlsh 索引鍵參數:
-
DELIMI@@ TER — 如果您使用逗號以外的分隔符,則可以設置該參數,該參數默認為逗號。
-
INGRATE — 每秒
cqlsh COPY FROM
嘗試處理的目標資料列數目。如果未設定,則預設值為 100,000。 -
NUMLSH 處理作業 — cqlsh 為工作建立的子工作者處理作業數目。
COPY FROM
此設定的最大值為 16,預設值為num_cores - 1
,其num_cores
中是執行 cqlsh 之主機上的處理核心數目。 -
MAXBATCHSI ZE — 批次大小決定在單一批次中插入目標資料表的最大列數。如果未設定,cqlsh 會使用 20 個插入資料列的批次。
-
區塊大小 — 傳遞給子工作者的工作單位大小。默認情況下,它設置為 5,000。
-
最大嘗試次數 — 重試失敗的工作站區塊的次數上限。達到最大嘗試次數之後,失敗的記錄會寫入新的 CSV 檔案,您可以稍後在調查失敗後再次執行該檔案。
INGESTRATE
根據您佈建至目標目的地表格的 WCU 數目來設定。cqlsh COPY FROM
命令INGESTRATE
的不是限制,而是目標平均值。這意味著它可以(並且通常會)超出您設置的數字。若要允許突發並確定有足夠的容量來處理資料載入要求,請設定INGESTRATE
為表格寫入容量的 90%。
INGESTRATE = WCUs * .90
接下來,將NUMPROCESSES
參數設定為等於少於系統核心數的 1。要了解系統的內核數量,可以運行以下代碼。
python -c "import multiprocessing; print(multiprocessing.cpu_count())"
在本教程中,我們使用以下值。
NUMPROCESSES = 4
每個程序都會建立一個工作者,每個工作者都會建立與 Amazon Keyspaces 的連線。Amazon Keyspaces 在每個連線上每秒最多可支援 3,000 個 CQL 請求。這表示您必須確定每個 Worker 每秒處理的要求少於 3,000 個。
與此同樣INGESTRATE
,工作人員通常超過您設定的數字,並且不受時鐘秒數的限制。因此,若要解決突發問題,請將 cqlsh 參數設定為每個 Worker 以每秒處理 2,500 個要求為目標。若要計算分配給 Worker 的工作量,請使用下列準則。
-
除
INGESTRATE
以NUMPROCESSES
。 -
如果
INGESTRATE
/NUMPROCESSES
> 2,500,則降低INGESTRATE
以使此公式成立。
INGESTRATE / NUMPROCESSES <= 2,500
在您設定設定以最佳化範例資料上傳之前,讓我們先檢閱cqlsh
預設設定,並瞭解使用這些設定如何影響資料上傳程序。因為cqlsh COPY FROM
使CHUNKSIZE
用建立工作區塊 (INSERT
陳述式) 來散發給 Worker,因此工作不會自動均勻分配。某些工作人員可能會閒置,具體取決於INGESTRATE
設置。
若要在 Worker 之間平均分配工作,並使每個 Worker 保持每秒 2,500 個要求的最佳速率CHUNKSIZE
,您必須設定MAXBATCHSIZE
、並INGESTRATE
變更輸入參數。若要最佳化資料載入期間的網路流量使用率,請選擇接近最大值 30 的值。MAXBATCHSIZE
通過更改CHUNKSIZE
為 100 和 MAXBATCHSIZE
25,10,000 行平均分佈在四個工人之間(萬/2500 = 4)。
下面的代碼示例說明了這一點。
INGESTRATE = 10,000 NUMPROCESSES = 4 CHUNKSIZE = 100 MAXBATCHSIZE. = 25 Work Distribution: Connection 1 / Worker 1 : 2,500 Requests per second Connection 2 / Worker 2 : 2,500 Requests per second Connection 3 / Worker 3 : 2,500 Requests per second Connection 4 / Worker 4 : 2,500 Requests per second
總而言之,在設定cqlsh COPY FROM
參數時,請使用下列公式:
-
內容 = 寫入容量 _ 單位 * .90
-
程序數 = 核心數 -1 (預設值)
-
整理/數量進程 = 2,500(這必須是一個真實的陳述。)
-
最大批次大小 = 30 (預設為 20。 Amazon Keyspaces 接受多達 30 個批次。)
-
區塊大小 = (擷取/處理編號)/最大批次大小
現在您已經計算NUMPROCESSES
INGESTRATE
、、和CHUNKSIZE
,就可以載入資料了。