Python UDF性能调优
DataArtsFabric SQL支持配置Python UDF运行时的资源规格和并发度,并支持统计运行时的关键性能指标。
UDF性能监控
使用explain performance可以打印UDF Actor运行的性能指标。如图1所示,统计了函数calculate_0311在每个DN所对应的UDF Actor的性能情况。下文以图中三行性能数据为例进行说明。
- executor0000_es_group (UdfName:calculate_0311 time=10907.3 rows=152 loops=1 cpu=1.0U memory=4.0GB timeout=1000s)中:
- executor0_es_group指的是DN ID。
- UdfName表示执行UDF的名称。
- time描述该UDF总运行时间。
- rows表示在该DN上处理的数据量。
- loops表示调用UDF的次数。
- cpu表示该UDF执行时actor所申请的cpu大小,单位为U。
- memory表示该UDF执行时actor所申请的memory大小,单位为GB。
- timeout表示该UDF执行时actor单次batch的最大执行时长,单位为秒。超时则会报错。
- executor0000_es_group [actor 0](Summary: rows=152 bytes=42.11MB rtt=10804.3 execute=2041.0 setup=4003.0 send=4686.0 wait=1725.9 get=15.8 invoke=4748.0 close=1.8 terminate=1.9 serialize=63.1 deserialize=60.4) 描述的是第0个UDF Actor的信息,具体如下:
- rows表示该actor上处理的数据量。
- bytes表示该actor处理的数据量大小。
- rtt表示内核发送数据到actor,以及actor接收处理数据的端到端时间。
- execute表示该actor实际计算的有效时间。
- setup表示该actor在初始化后,准备环境和装载udf代码的时间。
- send表示从内核发送数据到该actor的时间。
- wait表示内核等待actor返回数据的等待时间。
- get表示内核获取actor数据成功获取数据的时间。
- Invoke表示拉起actor的时间。
- close表示该actor关闭计算的时间。
- terminate表示数据系统下线actor的耗时。
- serialize表示对数据序列化的时间。
- deserialize表示对数据反序列化的时间。
- executor0000_es_group [actor 0](Details: ip=10.42.0.103 rows=[152, 152] bytes=[42.11MB, 42.11MB] rtt=[10804.3, 10804.3] send=[4686.0, 4686.0] recv=[49.0, 49.0])统计信息中:
- ip表示actor所在的ip地址。
- rows表示actor执行的所有batch中最小行数和最大行数。
- bytes表示actor执行的所有batch中数据大小最小值和最大值。
- rtt表示actor执行的所有batch中端到端执行时间的最小值和最大值。
- send表示actor执行的所有batch中从内核发送数据到该actor的最小值和最大值。
- recv表示actor执行的所有batch中从python发送数据到内核接收的最小值和最大值。
如下图所示,Query Summary中统计了该查询中所有UDF Actor的汇总信息。
Actor total count表示当前query调用的所有actor数量。
