本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
第 4 步:配置cqlsh COPY FROM
设置
本部分概述如何确定的参数值cqlsh COPY
FROM
. 这些区域有:cqlsh COPY FROM
命令读取您之前准备好的 CSV 文件,然后使用 CQL 将数据插入到 Amazon Keyspaces 中。该命令将行划分并分发INSERT
在一组员工之间进行操作。每个工作人员与亚马逊 Keyspaces 建立连接并发送INSERT
这个频道上的请求。
这些区域有:cqlsh COPY
命令没有在其工作人员之间平均分配工作的内部逻辑。但是,您可以手动配置它以确保工作均匀分布。首先查看这些关键的 cqlsh 参数:
-
分隔符— 如果您使用的是逗号以外的分隔符,则可以设置此参数,默认为逗号。
-
吸收— 目标行数
cqlsh COPY FROM
每秒尝试处理。如果未设置,则默认为 100,000。 -
NUMPROCESS— cqlsh 为其创建的童工进程的数量
COPY FROM
任务。此设置的最大值为 16,默认值为num_cores - 1
在哪里,num_cores
是运行 cqlsh 的主机上的处理内核数。 -
MAXBATCHSIZE批处理大小决定单个批次中插入到目标表的最大行数。如果未设置,cqlsh 将使用 20 个插入的行的批次。
-
区块大小— 传递给童工的工作单位的大小。默认情况下,它设置为 5,000。
-
最大尝试— 重试失败的工作程序块的最大次数。达到最大尝试次数后,失败的记录将写入新的 CSV 文件中,您可以在调查失败后再次运行该文件。
SetINGESTRATE
基于您为目标目标表预配置的 WCU 的数量。这些区域有:INGESTRATE
的cqlsh COPY FROM
命令不是限制 —— 它是目标平均值。这意味着它可能(而且经常确实)超过你设置的数字。要允许突发并确保有足够的容量来处理数据加载请求,请设置INGESTRATE
达到表的写入容量的 90%。
INGESTRATE = WCUs * .90
接下来,设置NUMPROCESSES
参数等于系统上的内核数少一个。要了解系统的内核数量是多少,你可以运行以下代码。
python -c "import multiprocessing; print(multiprocessing.cpu_count())"
在本教程中,我们使用以下值。
NUMPROCESSES = 4
每个进程都会创建一个工作人员,每个工作人员都建立与 Amazon Keyspaces 的连接。亚马逊 Keyspaces 在每个连接上每秒最多可支持 3,000 个 CQL 请求。这意味着您必须确保每个工作人员每秒处理的请求少于 3,000 个。
和INGESTRATE
,工作人员经常超过您设置的数字,并且不受时钟秒限制。因此,为了考虑突发事件,请将 cqlsh 参数设置为针对每个工作人员每秒处理 2,500 个请求。要计算分配给工作人员的工作量,请使用以下指南。
-
Divide
INGESTRATE
通过NUMPROCESSES
. -
如果
INGESTRATE
/NUMPROCESSES
> 2,500,降低INGESTRATE
为了使这个公式成真。
INGESTRATE / NUMPROCESSES <= 2,500
在配置设置以优化我们的示例数据的上传之前,让我们来查看cqlsh
默认设置并了解使用它们如何影响数据上传过程。由于cqlsh COPY FROM
使用CHUNKSIZE
创建大块工作(INSERT
语句)要分发给工作人员,工作不会自动均匀分配。一些工作人员可能会闲置,具体取决于INGESTRATE
设置。
要在员工之间均匀分配工作并使每个员工保持每秒 2,500 个最佳请求的速率,您必须设置CHUNKSIZE
、MAXBATCHSIZE
, 和INGESTRATE
通过更改输入参数。要在数据加载期间优化网络流量利用率,请选择MAXBATCHSIZE
接近 30 的最大值。通过更改为CHUNKSIZE
到 100 并且MAXBATCHSIZE
到 25 个,10,000 行在四名工人之间均匀分布(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
参数:
-
吸收= write _容量_单位 * .90
-
NUMPROCESS= num_cores -1(默认)
-
吸收/NUM进程= 2,500(这必须是真实的陈述。)
-
MAXBATCHSIZE= 30(默认值为 20。 亚马逊 Keyspaces 最多可接受 30 个批次。)
-
区块大小=(输入/NUM进程)/MAXBATCHSIZE
现在你已经计算了NUMPROCESSES
、INGESTRATE
, 和CHUNKSIZE
您已准备好加载数据了。