步骤 4:配置cqlsh COPY FROM设置 - Amazon Keyspaces (for Apache Cassandra)
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

步骤 4:配置cqlsh COPY FROM设置

本节概述了如何确定参数值cqlsh COPY FROM。该cqlsh COPY FROM命令读取您之前准备的 CSV 文件,然后使用 CQL 将数据插入到亚马逊Keyspaces。该命令将行划分并将INSERT操作分配给一组 worker。每位工作人员都与 Amazon Keyspaces 建立连接,并通过此通道发送INSERT请求。

cqlsh COPY命令没有内部逻辑,无法在其工作人员之间平均分配工作。但是,您可以手动对其进行配置,以确保工作均匀分配。首先查看以下关键 cqlsh 参数:

  • DE@@ LIMITER — 如果您使用逗号以外的分隔符,则可以设置此参数,默认为逗号。

  • INGESTR ATE — 每秒cqlsh COPY FROM尝试处理的目标行数。如果未设置,则默认为 100,000。

  • NUMPRO CESS — cqlsh 为任务创建的子工作进程的数量。COPY FROM此设置的最大值为 16,默认值为num_cores - 1,其中num_cores是运行 cqlsh 的主机上的处理内核数。

  • MAXBATCH SIZE — 批量大小决定了在单个批次中插入到目标表中的最大行数。如果未设置,cqlsh 会批量使用 20 个插入的行。

  • CHUNKSI ZE — 传递给子工作者的工作单位的大小。默认情况下,将它设置为 5,000。

  • MAX TEMPS — 重试失败的工作程序区块的最大次数。达到最大尝试次数后,失败的记录将写入新的 CSV 文件,调查失败后您可以稍后再次运行该文件。

INGESTRATE根据您为目标目标表配置的 WCU 数量进行设置。cqlsh COPY FROM命令不是极限,而是目标平均值。INGESTRATE这意味着它可能(而且经常如此)突破你设定的数字。要允许突发并确保有足够的容量来处理数据加载请求,请设置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 个请求。要计算分配给工作人员的工作量,请使用以下准则。

  • INGESTRATENUMPROCESSES

  • 如果INGESTRATE/NUMPROCESSES> 2,500,则降低INGESTRATE以使此公式成真。

INGESTRATE / NUMPROCESSES <= 2,500

在配置设置以优化示例数据的上传之前,让我们查看一下cqlsh默认设置,看看使用它们会如何影响数据上传过程。由于cqlsh COPY FROM使用来创建CHUNKSIZE要分配给工作人员的工作块(INSERT语句),因此工作不会自动平均分配。有些工作人员可能会闲着,具体取决于INGESTRATE设置。

要在工作人员之间平均分配工作并使每个工作人员保持每秒 2,500 个请求的最佳速率CHUNKSIZE,必须INGESTRATE通过更改输入参数来设置MAXBATCHSIZE、和。要在数据加载期间优化网络流量利用率,请为MAXBATCHSIZE该值选择一个接近最大值 30 的值。通过更改CHUNKSIZE为 100 和 25,10,000 行将平均分配MAXBATCHSIZE给四个工作人员(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参数时使用以下公式:

  • INGESTRATE = 写入容量_单位 * .90

  • NUMPROCESS = num_cores -1(默认)

  • INGESTRATE/NUMPROC ESS = 2,500(这必须是真实的陈述。)

  • MAXBATCHSIZ E = 30(默认为 20。 亚马逊Keyspaces 最多可接受 30 个批次。)

  • CHU@@ NKSIZ E =(INGESTRATE /NUMPROCESS)/MAXBATCH

现在,您已经计算NUMPROCESSES了和 INGESTRATECHUNKSIZE,可以加载数据了。