精华内容
下载资源
问答
  • sql并行度 In this article, we will discuss how the Max Degree of Parallelism works in SQL Server and how does it improve the query performance. SQL Server Degree of Parallelism is the processor ...

    sql并行度

    In this article, we will discuss how the Max Degree of Parallelism works in SQL Server and how does it improve the query performance. SQL Server Degree of Parallelism is the processor conveyance parameter for a SQL Server operation, and it chooses the maximum number of execution distribution with the parallel use of different logical CPUs for the SQL Server request. Microsoft SQL Server allows setting this Degree of Parallelism parameter value at the SQL Server instance level or Query level. If you do not specify the SQL Server Degree of Parallelism value at the SQL Server instance, then each request or operation has to rely on SQL Server default value and random CPU allocations.

    在本文中,我们将讨论最大并行度在SQL Server中的工作方式以及它如何提高查询性能。 SQL Server并行度是SQL Server操作的处理器传输参数,它选择并行执行SQL Server请求的不同逻辑CPU来选择最大执行分配数。 Microsoft SQL Server允许在SQL Server实例级别或查询级别设置此并行度参数值。 如果未在SQL Server实例中指定SQL Server并行度值,则每个请求或操作都必须依赖SQL Server默认值和随机CPU分配。

    SQL Server Degree of Parallelism is especially helpful to the Database Warehouse query engine, Telecommunication database, and partitioned table-based database. The Degree of Parallelism parameter should be configured with small computation and data usage analysis. The default value is 0 at the SQL Server instance level, which relied on the database engine to use several logical CPUs as required by the SQL Server Query.

    SQL Server并行度对数据库仓库查询引擎,电信数据库和基于分区表的数据库特别有用。 并行度参数应通过较小的计算和数据使用分析进行配置。 在SQL Server实例级别,默认值为0,这取决于数据库引擎根据SQL Server查询的要求使用多个逻辑CPU。

    使用SSMS配置SQL Server最大并行度 (Configuring SQL Server Max Degree of Parallelism using SSMS)

    SQL Server Management Studio (SSMS) >> Right-click on the SQL Server Instance > properties >> Advanced >> Max Degree of Parallelism

    SQL Server Management Studio(SSMS)>>右键单击SQL Server实例>属性>>高级>>最大并行度

    Default value of SQL Server Degree Parallelism

    Here, we can see that the default configuration of the SQL Server Degree of Parallelism value is 0.

    在这里,我们可以看到“ SQL Server并行度”值的默认配置为0。

    The user can change the Max Degree of Parallelism by SSMS in the SQL Server Advanced property.

    用户可以在SQL Server Advanced属性中通过SSMS更改“最大并行度”。

    Configure SQL Server Degree Parallelism

    最大并行度在SQL Server中如何工作? (How does Max Degree of Parallelism work in SQL Server?)

    When SQL Server gets any request from the client application end, it compiles and prepares the quickest execution plan with the minimal cost of server assets. If query cost is high, then the reason should be either database engine is not able to make a proper execution plan due to worse query logic or complex query structure. With choosing the quickest execution plan, the SQL Server request will utilize the required logical CPUs to finish the operation or query execution.

    当SQL Server从客户端应用程序端收到任何请求时,它将编译并准备以最少的服务器资产成本进行最快的执行计划。 如果查询成本很高,则原因可能是由于查询逻辑较差或查询结构复杂,数据库引擎无法制定适当的执行计划。 通过选择最快的执行计划,SQL Server请求将利用所需的逻辑CPU来完成操作或查询执行。

    For instance, we have two situations with a single thread and multi-thread distribution with defining the SQL Server Degree of Parallelism parameter. In the first case, the parameter value is set it to 1, and SQL Server request execution utilizes a single logical CPU and completing operation or returning a query result set.

    例如,在定义SQL Server并行度参数的情况下,有两种情况,即单线程和多线程分布。 在第一种情况下,将参数值设置为1,并且SQL Server请求执行利用单个逻辑CPU并完成操作或返回查询结果集。

    In the second case, the Max Degree of Parallelism parameter value is set to higher than 1/0. 0 stands for SQL Server choose the max number of CPU usage for the query execution as required by the execution plan. Greater than one value will allow using maximum CPUs as defined with a parameter to execute the request as needed. For example, the SQL Server Max Degree of Parallelism parameter is five, and query execution required three only then the query will be distributed in 3 execution only.

    在第二种情况下,“最大并行度”参数值设置为大于1/0。 0代表SQL Server根据执行计划的要求选择查询执行的最大CPU使用量。 大于一个值将允许使用通过参数定义的最大CPU来根据需要执行请求。 例如,SQL Server的“最大并行度”参数为5,而查询执行只需要3个,那么查询将仅分配3个执行。

    Thread distribution with SQL Server Degree Parallelism

    For the SQL Server request execution, a processor will circulate the execution with multiple logical CPUs as defined in the parameter and as CPU costs required by the query. Each dispersed execution will have an equivalent period to finish the task. If any threads completed earlier than the expected time, then that threads will hold up till the last one to complete the undertaking.

    对于SQL Server请求执行,处理器将使用参数中定义的多个逻辑CPU以及查询所需的CPU成本来循环执行。 每个分散的执行将有一个相等的时间来完成任务。 如果有任何线程早于预期时间完成,则该线程将一直持续到最后一个线程才能完成任务。

    将逻辑CPU分配到SQL Server实例 (Distribution of Logical CPUs to the SQL Server Instance)

    Logical CPUs can be relegated to the SQL Server instance to access those only by the SQL Server Processor property. Logical CPUs will be listed in the server property as are configured or associated with the machine or virtual machine. A rundown of CPUs will be bifurcated with the numa node (Processor Socket).

    可以将逻辑CPU委托给SQL Server实例,以仅通过SQL Server Processor属性访问它们。 逻辑CPU将在服务器属性中列出,并与计算机或虚拟机配置或关联。 CPU的消耗将与numa节点(处理器插槽)分叉。

    Logical CPUs distribution

    Logical CPUs can be allotted to two different entities, process affinity mask, and I/O affinity mask. Use can choose the distribution of logical processor units based on the querying size, database size, nature of data, and I/O operations.

    逻辑CPU可以分配给两个不同的实体,进程亲和力掩码和I / O亲和力掩码。 用户可以根据查询大小,数据库大小,数据性质和I / O操作来选择逻辑处理器单元的分布。

    By default, these options will be set to automatic with selected checkboxes to both properties. Automatically set processor affinity mask for all processors and Automatically set an I/O affinity mask for all processors. The automatic option will use any free CPUs to play out the operation as required. A best practice is to set individual logical CPUs to both containers because if you assign the same logical resource to both substances, then perhaps one of it doesn’t get an opportunity to get to it.

    默认情况下,这些选项将设置为自动,并且选中两个属性的复选框。 为所有处理器自动设置处理器亲和力掩码,为所有处理器 自动设置I / O亲和力掩码 。 自动选项将使用任何可用的CPU来按要求播放操作。 最佳实践是为这两个容器设置单独的逻辑CPU,因为如果您为这两种物质分配了相同的逻辑资源,那么也许其中之一就没有机会使用它。

    On the off chance that database and application are in the same server or machine, at that point, keep some room in SQL Server CPU allocation for permitting the remainder of CPUs to access by application and operating system. Max Degree of Parallelism parameter uses maximum CPUs that are assigned to SQL Server by this screen to perform parallel execution.

    此时,如果数据库和应用程序位于同一台服务器或计算机中,则应在SQL Server CPU分配中留出一定的空间,以允许其余的CPU被应用程序和操作系统访问。 “最大并行度”参数使用此屏幕分配给SQL Server的最大CPU来执行并行执行。

    SQL Server并行度如何帮助提高查询性能? (How does SQL Server Degree of Parallelism help in better Query Performance?)

    Day by day size of the database is expanding and turn out to be very basic to oversee common data source with the data warehouse. Data warehouse holds typical data information for the end-user response with the enormous measured in gigabytes or terabytes of data. For client responses, complex queries run in the data warehouse, and ideally, it requires more processing time to finish the execution. The Query execution process should be distributed in multiple threads with allocating several logical CPUs to the query execution with the help of the SQL Server Degree of Parallelism to reduce the query executing time.

    数据库的大小每天都在扩大,事实证明,监督数据仓库中的通用数据源非常基础。 数据仓库保存着针对最终用户响应的典型数据信息,其中包含以GB或TB级数据为单位的巨大数据量。 对于客户响应,复杂查询在数据仓库中运行,理想情况下,需要更多处理时间才能完成执行。 查询执行过程应分布在多个线程中,并借助SQL Server并行度为查询执行分配多个逻辑CPU,以减少查询执行时间。

    The default an incentive for the parameter of SQL Server Degree of Parallelism is 0 (Zero), which means SQL Server query can utilize all CPUs for the parallel execution. On the off chance that this Parallelism isn’t zero, at that point that the single query can use the number of CPUs. Both situations are having various requirements and use cases. If we use Parallelism with zero, then long execution queries will utilize the most extreme CPUs, and the rest of the SQL Server request will be in a queue with CXPACKET wait type and suspended status and those requests will wait till get the free CPU resources. In the subsequent case, if a Parallelism parameter value is smaller (1,2 or 3), then any longer query execution will take additional time than expected time to finish it since it needs more resources.

    SQL Server并行度参数的默认激励为0(零),这意味着SQL Server查询可以利用所有CPU进行并行执行。 并行度不为零的可能性很小,这时单个查询可以使用CPU的数量。 两种情况都有不同的要求和用例。 如果我们将Parallelism设为零,那么长执行查询将使用最极限的CPU,而其余SQL Server请求将处于具有CXPACKET等待类型和暂停状态的队列中,并且这些请求将等待直到获得可用的CPU资源。 在随后的情况下,如果Parallelism参数值较小(1、2或3),则更长的查询执行时间将比预期的时间花费更多的时间来完成它,因为它需要更多的资源。

    使用MAXDOP选项SQL语句并行 (Parallelism at SQL Statement using MAXDOP option)

    The MAXDOP option is utilized to powers the maximum level of parallelism value at the individual T-SQL statement. MAXDOP value cannot be the same as the SQL Server Degree of Parallelism parameter value. Actually, it is more helpful when additional CPU resources are required to execute the specific SQL statement.

    MAXDOP选项用于在单个T-SQL语句中为最大并行度值供电。 MAXDOP值不能与“ SQL Server并行度”参数值相同。 实际上,当需要额外的CPU资源来执行特定SQL语句时,它会更有帮助。

    Users can decide the Parallelism parameter value based on a load of SQL Server request, several logical CPUs, Storage Type (I/O Performance), Query Type (Report, Single execution, Remote Procedure, etc…), Partition and many more.

    用户可以根据SQL Server请求的负载,几个逻辑CPU,存储类型(I / O性能),查询类型(报告,单执行,远程过程等),分区等来决定并行参数值。

    If no longer execution type of report queries in the database, then go with the 1,2,3, As the availability of the CPU resource and define the Parallelism with the SQL statement using the MAXDOP option for the report queries. MAXDOP can be set to limit the query to execute on a number of logical CPUs. MAXDOP option can be added at the end of the SQL Query statement. For example,

    如果数据库中不再有报告查询的执行类型,则使用1,2,3,作为CPU资源的可用性,并使用SQLD语句为报告查询使用MAXDOP选项定义并行性。 可以将MAXD​​OP设置为限制查询在多个逻辑CPU上执行。 可以在SQL Query语句的末尾添加MAXDOP选项。 例如,

    SELECT * FROM Production.Product WHERE ProductID = 319 OPTION(MAXDOP 4)
    

    Here, the MAXDOP value is four for the above T-SQL statement and Query can use a maximum of four logical CPUs to complete the execution.

    在这里,上述T-SQL语句的MAXDOP值为4,而Query最多可以使用四个逻辑CPU来完成执行。

    For example, the current configuration of the SQL Server Degree of Parallelism can be checked by the T-SQL query as well with the help of SYS.SYSCONFIGURES table.

    例如,SQL Server并行度的当前配置可以通过T-SQL查询以及借助SYS.SYSCONFIGURES表来检查。

    SELECT * 
    FROM SYS.SYSCONFIGURES 
    WHERE comment LIKE '%degree%'
    

    SQL Server Degree Parallelism value by T-SQL

    Here, we have an example with the execution plan of the T-SQL statement with several JOINS. The first part of the query statement in the execution plan represents the Degree of Parallelism value, as shown in the below image.

    在这里,我们有一个带有多个JOINS的T-SQL语句的执行计划示例。 执行计划中查询语句的第一部分表示“并行度”值,如下图所示。

    SQL Server Degree Parallelism value used by query

    Here, Parallelism value is one that means a single CPU is used to complete the execution of this statement. Now, what happens if it is more than 1? Execution will be distributed in the number of parallel threads as configured the Parallelism and required CPUs by the query. In the below image, we can see the Parallelism task in the execution plan while the query used 40 CPUs. Gather Steams in the execution plan collects task information of each thread or worker.

    在这里,并行度值是一个值,表示一个CPU用于完成该语句的执行。 现在,如果大于1会怎样? 执行将按照查询配置的并行线程数和所需的CPU数量分布在并行线程中。 在下图中,我们可以看到执行计划中的Parallelism任务,而查询使用了40个CPU。 执行计划中的Gather Steam收集每个线程或工作程序的任务信息。

    SQL Server Degree Parallelism used by query

    结论 (Conclusion)

    Database sizes are rapidly expanding, and interest for SQL Server queries are growing with the greater unpredictability in the industry. More CPUs on a server is a more thing can do without a moment’s delay with thread distribution in SQL Server. SQL Server Degree of Parallelism helps to improve performance on most undertakings with parallel threading internally. Acknowledged that each operation can’t be made parallel, but Microsoft SQL Server covers most of it.

    数据库规模正在Swift扩大,并且随着行业中更大的不可预测性,对SQL Server查询的兴趣也在增长。 服务器上更多的CPU可以做更多的事情,而不会因SQL Server中的线程分发而造成片刻的延迟。 SQL Server并行度可通过内部并行线程帮助提高大多数任务的性能。 确认不能使每个操作并行执行,但是Microsoft SQL Server涵盖了大部分操作。

    You can refer to the article, Different Ways to set the Max Degree of Parallelism in SQL Server to get more knowledge about the Parallelism.

    您可以参考文章“ 在SQL Server中设置最大并行度的不同方法”以获取有关并行性的更多知识。

    翻译自: https://www.sqlshack.com/importance-of-sql-server-max-degree-of-parallelism/

    sql并行度

    展开全文
  • spark 并行度

    千次阅读 2018-07-30 21:47:49
    1.1、指定并行的task数量 spark.default.parallelism 参数说明:该参数用于设置每个stage的默认task数量。这个参数极为重要,如果不设置可能会直接影响你的Spark作业性能。 参数调优建议:Spark作业的默认task...

    1.1、指定并行的task数量

    spark.default.parallelism

    • 参数说明:该参数用于设置每个stage的默认task数量。这个参数极为重要,如果不设置可能会直接影响你的Spark作业性能。

    • 参数调优建议:Spark作业的默认task数量为500~1000个较为合适。很多同学常犯的一个错误就是不去设置这个参数,那么此时就会导致Spark自己根据底层HDFS的block数量来设置task的数量,默认是一个HDFS block对应一个task。通常来说,Spark默认设置的数量是偏少的(比如就几十个task),如果task数量偏少的话,就会导致你前面设置好的Executor的参数都前功尽弃。试想一下,无论你的Executor进程有多少个,内存和CPU有多大,但是task只有1个或者10个,那么90%的Executor进程可能根本就没有task执行,也就是白白浪费了资源!因此Spark官网建议的设置原则是,设置该参数为num-executors * executor-cores的2~3倍较为合适,比如Executor的总CPU core数量为300个,那么设置1000个task是可以的,此时可以充分地利用Spark集群的资源。

    展开全文
  • 在 9.2 节中讲解了 Flink Job 中的执行计划,并详细分析了 Flink 中的 operator chain 在一起的各种条件,在 9.3 节中也通过真实生产环境的案例来分享并行度与 Slot 的概念与关系。相信大家也都一定的理解,但是...

    在 9.2 节中讲解了 Flink Job 中的执行计划,并详细分析了 Flink 中的 operator chain 在一起的各种条件,在 9.3 节中也通过真实生产环境的案例来分享并行度与 Slot 的概念与关系。相信大家也都有一定的理解,但是有时候生产环境如果 Job 突然消费不及时了,或者 Job 就根本不在消费数据了,那么该怎么办?首先得看下相关的监控查看 Job 是否在正常运行,是否出现反压的情况,是否这会生产数据量过大然而并行度却是根据之前数据量设置的,种种原因都需要一个个排查一下,然后找到根因才能够对应的去解决。这节来讲解下遇到这种问题后如何合理配置并行度呢?

    Source 端并行度的配置

    假设数据源端是 Kafka,在出现作业消费不及时的时候,首先看下 Kafka 的监控是不是现在生产者生产的数据上涨速度较快,从而导致作业目前的消费速度就是跟不上 Kafka 生产者的生产速度,如果是这样的话,那么就得查看作业的并行度和 Kafka 的分区数是否一致,如果小于 Kafka 的分区数,那么可以增大并行度至 Kafka 的分区数,然后再观察作业消费速度是否可以跟上数据生产速度;如果已经等于 Kafka 的分区数了,那得考虑下是否 Kafka 要扩大分区,但是这样可能会带来 Kafka 其他的问题,这个操作需要谨慎。

    Kafka 中数据出现堆积的话,还可以分析下数据的类型,如果数据不重要,但是又要保证数据的及时性,可以修改作业让作业始终从最新的数据开始消费,丢弃之前堆积的数据,这样就可以保证数据的及时性。举个例子,假如一个实时告警作业它突然消费不及时,Kafka 中堆积了几亿条数据(数据延迟几个小时),那么如果作业调高并行度重启后&

    展开全文
  • flink并行度知识点

    千次阅读 2020-06-09 12:34:00
    Flink的基本构建 流(Stream):流是对当前数据流向的记录(流也可能是永无止境的) 转换(Transform):转换是将一个或多个...Flink 中的程序本质上是并行的。在执行期间,每一个算子(Transformation)都一个或多个算.

    Flink的基本构建

    • 流(Stream):流是对当前数据流向的记录(流也可能是永无止境的) 。
    • 转换(Transform):转换是将一个或多个流作为输入,根据需要求转换成我们要的格式的流的过程。
    • 当程序执行时,Flink程序会将数据流进行映射、转换运算成我们要的格式的流。每个数据流都以一个或多个源(Source)开始,并以一个或多个接收器(Sink)结束,数据流类似于任意有向无环图(DAG)

    在这里插入图片描述

    Flink 中的程序本质上是并行的。在执行期间,每一个算子(Transformation)都有一个或多个算子subTask(Operator SubTask),每个算子的 subTask 之间都是彼此独立,并在不同的线程中执行,并且可能在不同的机器或容器上执行。Operator subTask 的数量指的就是算子的并行度。同一程序的不同算子也可能具有不同的并行度(因为可以通过 setParallelism() 方法来修改并行度)

    subtask、task、operator chains、slot概念

    • Task:Task 是一个阶段多个功能相同 subTask 的集合,类似于 Spark 中的 TaskSet。
    • subTask:subTask 是 Flink 中任务最小执行单元,是一个 Java 类的实例,这个 Java 类中有属性和方法,完成具体的计算逻辑。
    • Operator Chains:没有 shuffle 的多个算子合并在一个 subTask 中,就形成了 Operator Chains,类似于 Spark 中的 Pipeline。
    • Slot:Flink 中计算资源进行隔离的单元,一个 Slot 中可以运行多个 subTask,但是这些 subTask 必须是来自同一个 application 的不同阶段的 subTask。

    同一个application,多个 task的 subTask,可以运行在同一个slot资源槽中;但是同一个 task 中的多个 sub-task不能运行在一个 slot 资源槽中,他们会被分散到不同的slot中。这就限制了我们的任何一个算子的并行度不能设置的超过集群总slot的数量,否则集群不能正常的运行。

    为何slot共享

    任务槽是Flink计算资源的基本单位,每个任务槽可以在同一时间执行一个Task,而TaskManager可以拥有一个或者多个任务槽。

    Flink允许任务槽共享,即来自同一个Job的不同Task的Sub-Task(理解为Task的子集就行)进入同一个槽位。

    任务槽共享有两点好处:

    • Flink 集群所需的 slot 与作业中使用的最高并行度 parallelism 恰好一样多;无需计算一个程序总共包含多少个 job (具有不同的并行度);作业需要的任务槽数量必须等于Job中最大的并行度
    • 更好的资源利用率。如果没有 slot sharing,则非密集型 source / map()子任务将阻塞与资源密集型窗口子任务一样多的资源。而通过 slot sharing,可以充分利用插槽资源,同时确保沉重的 subtask 在 TaskManager 之间公平分配。

    TaskManager数量

    所以,可以得出Flink on YARN时,TaskManager数量 = max(parallelism) / yarnslots(向上取整)

    例如,一个最大并行度为10,每个TaskManager有两个任务槽的作业,就会启动5个TaskManager。

    何时划分Task 

    • 并行度发生变化时
    • keyBy() /window()/apply() 等发生 Rebalance 重新分配
    • 调用 startNewChain() 方法,开启一个新的算子链
    • 调用 diableChaining()方法,告诉当前算子操作不使用算子链操作

    针对内存密集型、CPU密集型,使用 startNewChins()、disableChaining()方法,可以将当前算子单独放到一个 Task 中,使其独享当前Task的所有资源,以此来提升计算效率。

    计算Task数量

    flink会根据sub-task的传输方式来划分这个application中有多少个task以及sub-task。flink会根据sub-task是否会发生Operator Chain来划分task。

    以下图为例

    • source、map合成的task的并行度为6
    • keyby 、window、apply合成的task的并行度为6
    • sink的并行度为1
    • 总共有13个task

    在这里插入图片描述

    Task slot和Parallelism

    非资源密集型的算子:source map sink

    资源密集型的算子:aggregate reduce sum window

    非资源密集型的算子和资源密集型的算子可以分配到同一个slot中 ,这样所有的slot之间任务就会平等,不会存在一直空闲一直高负载。

    flink 也能做到把非资源密集型和资源密集型的算子分到不同的slot中 这里需要设置共享组,非资源 密集型 的算子在一个共享组,资源密集 型的算子在一个共享组,这样这两种算子就不会共享的使用slot。默认情况下算有算子都属于同一个共享组,共享所有slot。

    • 默认情况下,Flink 允许子任务共享 slot,即使它们是不同任务的子任务但是可以分配到同一个slot上。 这样的结果是,一个 slot 可以保存多个作业的整个管道
    • Task Slot 是静态的概念,表示 TaskManager 具有多少并发执行能力
    • Parallelism是动态的概念,表示程序运行时实际使用时的并发能力
    • 设置的 parallelism 不能高于 slot 数量,不然将会出现计算资源不够用的情况,程序报错

    并行度(Parallelism)

    一个特定算子的 子任务(subtask)的个数被称之为其并行度(parallelism)。一般情况下,一个 stream 的并行度,可以认为就是其所有算子中最大的并行度。

    flink并行分两个方面

    • 数据并行:source 并行拉数据 map 并行处理数据
    • 计算并行:source 在拉新数据,map 在处理source 之前拉的数据,两个 job 的并行执行

    合理设置并行度,对operator chain带来的优化:

    • 减少本地通信的开销
    • 减少序列化和反序列化

    Flink程序中设定并行度有4种级别,实际执行时优先级从高到低分别为:算子级别、执行环境(ExecutionEnvironment)级别、客户端(命令行)级别、配置文件(flink-conf.yaml)级别。

    • 算子级别

    dataStream.flatMap(new SomeFlatMapFunction()).setParallelism(4);

    • 执行环境级别

    streamExecutionEnvironment.setParallelism(4);

    • 命令行级别

    bin/flink -run --parallelism 4 example-0.1.jar

    任何一个算子的并行度不能设置的超过集群总slot的数量,否则集群不能正常的运行。

    • flink-conf.yaml级别

    parallelism.default: 4

    Stream、Operator、Subtask的关系

    • 一个Stream可以被分成多个Stream分区
    • 一个Operator可以被分成多个Operator Subtask
    • 每一个Operator Subtask是在不同的线程中独立执行的
    • 一个Operator的并行度等于Operator Subtask的个数
    • 一个Stream的并行度总是等于生成它的Operator的并行度

    Stream分区数 = Stream并行度 = 生成Stream的Operator的并行度 = Operator Subtask的个数

    operator之间传递模式

    • one-to-one 模式:两个operator用此模式传递的时候,会保持数据的分区数和数据的排序
    • Redistributing 模式:这种模式会改变数据的分区数;每个一个operator subtask会根据选择transformation把数据发送到不同的目标subtasks,比如keyBy()会通过hashcode重新分区,broadcast()和rebalance()方法会随机重新分区

    operator chain

    operator chain的条件

    • 算子属于one-to-one
    • 算子具有相同并行度(具有相同的分区数)
    • 两个节点间数据分区方式是 forward

    在分布式计算中,Flink 将算子(operator)的 subtask 链接(chain)成 task。每个 task 由一个线程执行。把算子链接成 tasks,也就是 Operator Chain, 能够减少线程间切换和缓冲的开销,在降低延迟的同时提高了整体吞吐量。

    Flink  Slot 插槽和 Parallelism 并行度

    上图中,source 和 map 这两个 operator 进行了合并,在第二个视图中,每个虚框表示一个子任务,最终使用了 5 个并行的线程来执行。

    如果没有开启 Operator Chain,那么使用的线程数将会增加到 7,线程数增加后,会增加开销。

     

    数据重分区(Redistributing)

    默认情况下,数据是自动分配到多个实例上的。有的时候我们需要手动对数据在多个实例上进行分配,以避免数据倾斜,避免部分实例负载过重,从而导致整个作业的计算时间过长或者内存不足等问题。

    • shuffle:shuffle基于正态分布,将数据随机分配到下游各算子实例上。
    • rebalance:rebalance使用Round-ribon思想将数据均匀分配到各实例上。Round-ribon是负载均衡领域经常使用的均匀分配的方法,上游的数据会轮询式地分配到下游的所有的实例上
    • rescale:rescale与rebalance很像,也是将数据均匀分布到各下游各实例上,但它的传输开销更小,因为rescale并不是将每个数据轮询地发送给下游每个实例,而是就近发送给下游实例。
    • broadcast:在Flink里,数据会被复制并广播发送给下游的所有实例上。
    • global:global会所有数据发送给下游算子的第一个实例上,使用这个算子时要小心,以免造成严重的性能问题。
    • partitionCustom:我们也可以使用partitionCustom来自定义数据重分布逻辑。
    展开全文
  • Flink并行度

    千次阅读 2018-06-26 00:27:07
    并行执行本节介绍如何在Flink中配置程序的并行执行。FLink程序由多个任务(转换/操作符、数据源和sinks)组成。任务被分成多个并行实例来执行,每个并行实例处理任务...
  • Flink TaskSlot与并行度

    2021-05-18 23:06:15
    什么设置了并行度后程序启动失败?taskSlot与并行度究竟有什么不可告人的秘密关系?
  • MapReduce并行度机制

    2019-09-23 08:00:18
    MapTask的并行度指的是map阶段多少个并行的task共同处理任务。map阶段的任务处理并行度,势必影响到整个job的处理速度。那么,MapTask并行实例是否越多越好呢?其并行度又是如何决定呢? 一个MapReducejob的map...
  • Oracle数据库版本11.2.0.4,最近发现一条SQL很慢,执行一次要20多s,GG_FUNCTION_LOCATION这张表很大,发现这张表有并行度,修改并行度之后,执行计划变了走索引了,执行时间为2s。说明一个问题,当表有并行度的...
  • 1.阻塞 阻塞:是指当一个数据库会话中的事务,正在锁定其他会话事务想要读取或修改的资源,造成这些会话...一般系统中,偶尔短时间的阻塞是正常且合理的;但若设计不良的程序,就可能导致长时间的阻塞,这样就不...
  • Sqoop并行度控制

    千次阅读 2019-09-18 21:23:48
    7.2.4 并行度控制 Sqoop并行地从大多数数据库源导入数据。您可以使用-m或--num-mappers参数指定用于执行导入的map任务(并行进程)的数量。每个参数都取一个整数值,该整数值对应于要使用的并行度。默认情况下,使用四...
  • MapTask、ReduceTask并行度决定机制

    千次阅读 2018-03-28 16:03:47
    MapTask的并行度决定map阶段的任务处理并发度,进而影响到整个job的处理速度。那么,MapTask并行实例是否越多越好呢?其并行度又是如何决定呢? 1、mapTask并行度的决定机制 一个job的map阶段并行度由客户端在...
  • 提升小规模HDP集群的作业并行度

    千次阅读 2019-01-30 18:18:54
    对于团队使用的一些小型的Hadoop集群来说,由于资源有限,团队成员又多,并行开发和测试又密集,很容易出现资源紧张,作业被pending无法执行的情况,最大化的配置集群作业的并行度是开发环境的集群所必须的。...
  • Spark性能调优:合理设置并行度

    万次阅读 2017-11-30 11:21:01
    Spark并行度原理以 Spark 中的 WordCount 作业为例,每个Spark作业其实都是一个 Application,每个 Application 对应多个 Jobs,一个 action 操作(比如 collect)触发一个 job,在WordCount程序中一个 job,每个 ...
  • Spark性能调优之合理设置并行度

    千次阅读 2017-12-18 16:09:21
    1.Spark的并行度指的是什么?  spark作业中,各个stage的task的数量,也就代表了spark作业在各个阶段stage的并行度!  当分配完所能分配的最大资源了,然后对应资源去调节程序的并行度,如果并行度没有与资源相...
  • MapTask并行度和切片机制

    万次阅读 2017-12-11 16:40:58
    maptask的并行度决定map阶段的任务处理并发度,进而影响到整个job的处理速度 那么,mapTask并行实例是否越多越好呢?其并行度又是如何决定呢? 1.1 mapTask并行度的决定机制 一个job的map阶段并行度由客户端在提交...
  • Flink并行度与slot之间的关系

    千次阅读 2019-08-05 12:17:40
    Flink运行时主要角色两个:JobManager和TaskManager,无论是standalone集群,flink on yarn都是要启动这两个角色。JobManager主要是负责接受客户端的job,调度job,协调checkpoint等。TaskManager执行具体的Task...
  • Spark任务并行度分析

    2020-03-30 16:32:22
    影响 spark 并行度的因素主要如下几个: RDD 的分区数(Partition ) Spark 应用默认会为每一个 RDD 分区创建一个 Task, 所以输入 RDD 的分区数直接影响待 分配的 Task 总数,Task 任务数如果少于分配的计算资源...
  • spark并行度设置及submit参数

    千次阅读 2020-04-10 21:12:06
    submit --conf spark.default.parallelism=12 --num-executors 3 --executor-cores 2 --executor-memory 2G --master yarn --class com.heroking.spark.WordCount spark-word-count.jar 1.Spark的并行度指的是什么?...
  • maptask的并行度决定map阶段的任务处理并发度,进而影响到整个job的处理速度。那么,mapTask并行实例是否越多越好呢?其并行度又是如何决定呢? mapTask并行度的决定机制 map阶段的并行度由客户端在提交job时决定...
  • 1. 并行度理解 2. 设置Application并行度
  • flink中的slot和并行度

    千次阅读 2020-03-19 14:48:55
    什么并行度? 能够相互独立,互不干扰的执行同一种算子任务的所有线程集合,称为并行度。就好比三个人一起去搬砖,事先咱们先把这些砖分为三份,一人一份,这样我们做的事都是搬砖,但是三个人互不影响,你搬你...
  • maptask的并行度决定map阶段的任务处理并发度,进而影响到整个job的处理速度 那么,mapTask并行实例是否越多越好呢?其并行度又是如何决定呢?   1.3.1 mapTask并行度的决定机制 一个job的map阶段并行度由...
  • 上周六现场数据库运维厂家反馈,一个实例hang住了,说是两条SQL引起的,操作系统上报too many ...分析SQL,使用了Oracle默认的并行度,哪并行度到底是多少呢? 单实例 = PARALLEL_THREADS_PER_CPU x CPU_COUNT ...
  • Flink 从入门到精通系列文章生产中是否遇到过:调大 Flink 任务并行度,但任务的整体吞吐量几乎没有提升Flink 任务整体 CPU 利用率特别低,如何提高资源利用率呢?这篇文...
  • maptask的并行度

    2018-03-13 22:51:09
    maptask的并行度决定map阶段的任务处理并发数量。进而影响到整个job的处理速度。maptask的并行度是不是越多越好?并行度又是如何决定的?先说maptask的并行度是如何决定的.一个job的map阶段的并行度由客户端提交job...
  • 1、从消费端看, 如果source的并行度大于kafka的分区,会导致多余的并行度消费不了数据,进而影响checkpoint,flink做checkpoint失败,所以一定不能大于分区数。 2 、从消费端看, 如果source的并行度小于kafka的...
  • Flink设置并行度的几种方式 1.代码中设置setParallelism()  全局设置: env.setParallelism(3);   算子设置(部分设置): sum(1).setParallelism(3) 2.客户端CLI设置(或webui直接输入数量): ./bin/flink run...
  • Flink之slot、并行度、graph优化

    千次阅读 2020-02-18 19:38:47
    Flink运行时主要角色两个:JobManager和TaskManager。 JobManager主要是负责接受客户端的job,调度job,协调checkpoint等。 TaskManager执行具体的Task。TaskManager为了对资源进行隔离和增加允许的task数,引入了...
  • MapTask 并行度机制MapTask 的并行度指的是 map 阶段多少个并行的 task 共同处理任务。map阶段的任务处理并行度,势必影响到整个 job 的处理速度。那么,MapTask 并行实例是否越多越好呢?其并行度又是如何决定呢...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 113,397
精华内容 45,358
关键字:

并行度有什么影响