最佳实践

一切为了更好的使用。

集群规划误区及释疑

存算分离架构下集群的规模调整和多集群的数量调整,可能是很多人经常遇到的问题。针对大家在学习和使用过程中的几大误区逐一进行解析并提供合理的集群规划建议。

  1. 误区:单个集群创建之后无法调整大小

    单个集群在任何时候都可以调整大小,即便可能有正在运行的查询和排队等待的其他查询,也可以进行调整。HashData的存算分离架构,数据共享存储,避免重新物理分布,可以实现秒级扩缩容。

    如上图所示,一个4节点规模的集群通过扩容为6节点规模。单个集群的大小可以在1和1024之间进行调整。

    如上图所示,当集群中某个计算节点异常下线,只是从6节点规模调整为5节点规模,计算节点与数据块的对应关系动态调整不影响整个集群的正常运行。本例展示了在计算节点异常情况下的自愈高可用,集群的缩容机制与节点异常下线机制完全一致。

  2. 误区:只有调整单个集群的规模大小才可以提升并发

    调整单个集群规模大小和调整多集群中的集群数量有重要区别,对性能或并发性都会有不同的影响。

    (a)单个集群的规模变大可以提高性能,在大多数情况下,查询与集群大小成线性关系,尤其是对于更大、更复杂的查询,提升查询效率,在一定程度上可能会增加并发。

    (b)多集群通过调整每个集群的负载,可以有效提高并发性,用于应对大量并发请求的场景,解决排队等待的性能问题。

    如上图所示,左侧可能比右侧更快地处理任何单个查询。但是,如果同时发出查询1和查询2,则左侧单个集群的查询2很可能会排队等待。多集群中的每个集群都可以并行执行查询1和查询2,有效提高并发性。

  3. 误区:多集群中每个集群的规模必须保持一致

    当部署多集群仓库时,单个集群无须使用完全相同数量的节点。多集群环境下,具有不同节点数的计算集群中可以正常并行启动。

    如上图所示,在多集群环境下,每个集群的规模大小可以根据承载的业务需求自行设置,不同节点数的集群可以正常并行运行。

  4. 误区:增加集群规模大小将提高当前运行缓慢的查询的性能

    单个集群的规模大小可以随时调整(动态扩缩容),但不会中断或影响当前运行的查询。通过扩容额外新增的资源不会影响任何已经处于运行状态的查询,新增资源被完全配置完成后,才可以提供给排队等待或新提交的查询请求使用。

    如上图所示,当查询1仍在执行时,可以动态调整集群的大小,从4节点到6节点。规模调整不会中断或影响查询1的执行,查询1继续由最初的四个节点提供服务。如果查询需要完全利用6个节点,则必须在新增资源完成配置后,新发起的执行任务才会利用上新增资源。

  5. 误区:如果当前集群有任务运行,新发起查询会一直处于排队状态

    同时处理的查询数量取决于每个查询的大小和复杂性。提交查询时,集群会通过执行计划计算并保留处理每个查询所需的计算资源。只有当集群没有足够的剩余资源来处理查询时,查询才会排队,等待其他正在运行的查询完成后释放出可用的资源。

    查询过程中有许多因素可能会对性能产生影响,在复杂的多用户环境中,大部分查询可能会因为并发问题而不是复杂性而处于等待状态,可以通过创建多个集群来提升并发,避免查询排队。

    如上图所示,如果查询1和查询2都有足够的资源,那么集群就可以并行执行这两个查询,只有分配不到足够的资源的情况下,才会处于排队状态等待资源释放。可以通过使用多集群来提升并发,避免查询排队

  6. 误区:对于简单查询可以只单独使用集群中的少量计算节点

    在单个集群中所有计算节点都统一启动和配置。对于资源消耗不高的简单查询,可能只需要一个计算节点的资源就足够了,但是在生成执行计划时,还是会下发给所有的计算单元,无法单独只使用一个或几个这样少量的计算节点。

    在正常运行的集群中,所有的节点都会参与到任务执行。如上图右侧所示,无法只单独使用4个正常节点集群中的两个节点。

  7. 误区:通过增加集群的大小,一定可以提升加载性能

    单纯增加集群的规模大小,并不能保证在任何场景下都能够有效提升数据加载性能。数据加载性能受加载文件的数量和每个文件的大小的影响远远大于集群规模大小对加载性能的影响。使用更大规模的集群将消耗更多的资源,有可能不会带来任何加载性能提升。

    如果同时接收多个文件,采用多集群的方式,数据加载速度可能会更快。当加载大文件时,因为数据量很大,一次读取一个大文件,建议优先采用规模较大的集群做并行加载,能够有效提升大文件预读取的速度。

  8. 误区:一个查询任务可以同时由多个集群处理

    一个查询只能由一个集群执行。在多集群环境下,查询可能会指派给其中的一个集群执行。单个集群是由N个计算节点组成的集合,这些节点需要统一配置并执行查询,单集群在执行任务时,无法调用其他集群的计算节点资源。

    前一个查询1只能由多集群中的某一个集群执行,即使它可能需要更多资源来实现最佳处理,也无法为同一个查询跨集群分配其他节点。

  9. 误区:多集群环境下集群数量越多,复杂查询的效率越高

    多集群有助于并行处理多个查询。但是一个查询总是在一个仓库中处理,对查询性能产生影响的是单个集群的规模大小,而不是集群的数量。单个集群的规模越大,对于复杂查询场景越具有优势。在这种情况下,多集群环境下集群数量的多少并不重要。

    对于查询1的执行,有两个大小相同集群的多集群环境并不重要。查询仍将分配给其中一个单独的集群。