1

我正在连接两个表,其中 SnappyData 中的大量行(当前为 100M - 1B)配置在一台具有 64 个 CPU 内核和 512GB 内存的服务器中,并且希望使用并置连接。然而,文档中的描述似乎暗示并置连接发生在每个节点级别。

我需要的实际上是每个桶级别的并置连接(或分区连接),并且我没有充分利用服务器,因为大部分时间总 CPU 利用率约为 10% 或更少。

对于连接,我使用的是 Rowstore 和 SQL 语句。我使用单节点设置脚本 (snappy-start-all.sh) 设置了 SnappyData,其中包含一个线索、一个服务器和一个定位器,并进行了一些自定义以使用更多的内存和 CPU 内核:

会议/领导

localhost -locators=localhost:9999 -heap-size=200g -spark.executor.cores=30 -dir=/snappydata/lead1

配置/服务器

localhost -locators=localhost:9999  -heap-size=200g -spark.executor.cores=30 -dir=/snappydata/server1

conf/定位器

localhost -peer-discovery-port=9999 -heap-size=2048m -dir=/snappydata/locator1

我无法弄清楚如何解决这个问题,我的问题是:

  1. 并置连接究竟是如何工作的?并置连接发生在每个节点级别或每个存储桶级别还是介于两者之间?除了设置桶号之外,我还有什么可以调整的吗?
  2. 除了并置连接之外,在连接列上创建索引是否有帮助?
  3. 配置是否适合我的工作量?还是应该设置多个服务器以充分利用资源?
  4. 如果我的设置看起来没问题,低 CPU 利用率可能是由于偏斜的哈希分区方案,我在哪里可以调整分区方案以避免偏斜分区?

任何关于上述任何问题的信息或指针(很抱歉在一篇文章中提出了很多问题)将不胜感激:)

更新:

两行表的 schema 是这样的(列都是 Integer 类型):

Table_A(key1, key2, value1, value2, value3) 
  USING ROW OPTIONS (partition_by 'key1, key2')

Table_B(key1, key2, value4, value5) 
  USING ROW OPTIONS (partition_by 'key1, key2', colocate_with 'Table_A').

连接结果将包含: Table_C(key1, key2, value1, value2, value3, value4, value5)

key1 可以是~200 个不同的值,key2 可以是~2M 个不同的值。并且 (key1, key2) 分布是倾斜的并且不是唯一的——少数(<5%)非常频繁,而大多数不是。

4

2 回答 2

2

仅当满足以下两个托管标准时,才支持涉及两个或多个分区行表(有或没有额外的复制表)的查询:

  1. 查询的 WHERE 子句在查询中所有分区表的所有分区列上具有等值连接条件。
  2. 查询中的所有分区表都位于同一位置。

这些条件允许 SnappyData 将连接查询分发到托管数据的所有服务器。该查询在每个本地数据存储上同时执行,而无需将表数据从一个成员移动到另一个成员以执行连接。对每个数据存储的本地数据集进行连接,主查询成员对每个数据存储的结果进行聚合得到结果集。

于 2017-04-18T18:42:50.183 回答
2
  1. 并置连接究竟是如何工作的?并置连接发生在每个节点级别或每个存储桶级别还是介于两者之间?除了设置桶号之外,我还有什么可以调整的吗?

并置连接发生在每个节点级别。

  1. 除了并置连接之外,在连接列上创建索引是否有帮助?

这取决于您的连接查询。

  1. 配置是否适合我的工作量?还是应该设置多个服务器以充分利用资源?

设置多个服务器应该有助于更好地利用资源。

  1. 如果我的设置看起来没问题,低 CPU 利用率可能是由于偏斜的哈希分区方案,我在哪里可以调整分区方案以避免偏斜分区?

您可以从这个指针开始 - http://rowstore.docs.snappydata.io/docs/data_management/partitioning-about.html 您还可以根据数据的性质根据范围或列表或表达式对数据进行分区。通过这些示例了解如何实现这一点 - http://rowstore.docs.snappydata.io/docs/developers_guide/topics/create-partition-tables/PartitioningExamples.html

于 2017-04-18T18:54:40.710 回答