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

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

第 4 步:配置cqlsh COPY FROM设置

本部分概述如何确定cqlsh COPY FROM。这些区域有:cqlsh COPY FROM命令读取您之前准备的 CSV 文件,并使用 CQL 将数据插入 Amazon Keyspaces 中。该命令将行划分并分发INSERT在一组工作人员之间的操作。每个工作人员都建立与 Amazon Keyspaces 的连接,并发送INSERT请求。

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

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

  • 内衬cqlsh COPY FROM尝试每秒处理。如果取消设置,则默认值为 100,000。

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

  • 最大批量大小— 批处理大小将确定单个批次中插入到目标表中的最大行数。如果未设置,cqlsh 将使用 20 个插入行的批处理。

  • 块大小— 传递给子工作人员的工作单元的大小。默认情况下,将它设置为 5,000。

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

SetINGESTRATE基于您预配置到目标目标表的 WCU 数量。这些区域有:INGESTRATEcqlsh COPY FROM命令不是一个限制-它是一个目标平均值。这意味着它可以(而且经常确实)突破到您设置的数字之上。要允许突发并确保具有足够的容量来处理数据加载请求,请将INGESTRATE设置为表写入容量的 90%。

INGESTRATE = WCUs * .90

接下来,将NUMPROCESSES参数设置为等于系统上的内核数量少一个。要了解系统的核心数量,您可以运行以下代码。

python -c "import multiprocessing; print(multiprocessing.cpu_count())"

在本教程中,我们使用以下值。

NUMPROCESSES = 4

每个进程都会创建一个工作程序,并且每个工作程序都建立到 Amazon Keyspaces 的连接。Amazon Keyspaces 在每个连接上每秒最多可支持 3,000 个 CQL 请求。这意味着您必须确保每个工作程序每秒处理的请求少于 3,000 个。

如同INGESTRATE,工作人员通常会突破您设置的数字,并且不受时钟秒的限制。因此,要解决突发事件,请将 cqlsh 参数设置为目标每个工作程序每秒处理 2,500 个请求。要计算分配给工作人员的工作量,请使用以下准则。

  • DivideINGESTRATE通过NUMPROCESSES

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

INGESTRATE / NUMPROCESSES <= 2,500

在配置设置以优化示例数据的上传之前,让我们先查看cqlsh默认设置,了解使用它们如何影响数据上传过程。由于cqlsh COPY FROM使用CHUNKSIZE来创建工作块(INSERT语句)分配给工作人员,则工作不会自动均匀分布。某些工作人员可能处于空闲状态,具体取决于INGESTRATE设置。

若要在工作人员之间均匀分配工作并保持每个工作人员的最佳速率为每秒 2,500 个请求,您必须设置CHUNKSIZEMAXBATCHSIZE, 和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参数:

  • 内衬= 写入容量单位 * .90

  • 数字进程= 数字 _ 核心-1(默认)

  • 电子/数量过程= 2,500(这必须是一个真实的陈述。)

  • 最大批量大小= 30(默认值为 20。 亚马逊 Keyspaces 接受批次最多 30 个。)

  • 块大小=(接收/数量进程)/最大批量

现在,您已经计算NUMPROCESSESINGESTRATE, 和CHUNKSIZE,您就可以加载数据了。