Fusion引擎
Fusion引擎是EMR Serverless Spark內(nèi)置的高性能向量化SQL執(zhí)行引擎,相比開源Spark在TPC-DS基準(zhǔn)測(cè)試上有2倍性能提升。Fusion引擎與開源Spark完全兼容,您無需對(duì)現(xiàn)有代碼做任何修改。在EMR Serverless Spark中,只需在創(chuàng)建會(huì)話或新建開發(fā)時(shí)選擇集成了Fusion引擎(Spark Native Engine)的版本,即可啟用該引擎。
注意事項(xiàng)
Fusion引擎使用堆外內(nèi)存,您需要在創(chuàng)建會(huì)話或新建開發(fā)時(shí),在Spark配置中添加配置項(xiàng)spark.memory.offHeap.enabled=true
以開啟Spark的堆外內(nèi)存。同時(shí),合理配置堆外內(nèi)存spark.memory.offHeap.size
。
Fusion加速適用場(chǎng)景
Fusion引擎加速適用于Spark SQL和DataFrame任務(wù),支持大部分的算子、表達(dá)式和數(shù)據(jù)類型實(shí)現(xiàn)性能提升,而對(duì)于RDD任務(wù)或者包含用戶自定義函數(shù)(UDF)的執(zhí)行階段暫不支持加速效果。
存儲(chǔ)格式
Fusion引擎支持的數(shù)據(jù)存儲(chǔ)格式,如下所示。
Parquet
Paimon
ORC(partial)
算子
Fusion引擎為大部分常見算子提供加速,具體分類如下所示。
類型 | 算子列表 |
Source |
|
Sink | DataWritingCommandExec |
常見操作 |
|
聚合 | HashAggregateExec |
Join |
|
窗口 |
|
Exchange |
|
Limit |
|
Subquery | SubqueryBroadcastExec |
其他 |
|
表達(dá)式
Fusion引擎目前支持的表達(dá)式,如下所示。
類型 | 表達(dá)式列表 |
比較/邏輯 | !、!=、<、<=、>、>=、<=>、<>、=、==、||、and、between、is not null、is null、negative、null if、or |
算術(shù) | %、+、-、*、/、isnan、mod、negative、not、positive、abs、acos、acosh、asin、asinh、atan、atan2、atanh、cbrt、ceil、ceiling、cos、cosh、degrees、e、exp、floor、ln、log、log10、log2、pi、pmod、pow、power、radians、rand、random、rint、round、shiftleft、shiftright、sign、signum、sin、sqrt、tan、tanh |
位運(yùn)算 | ^、|、&、~、bit_and、bit_count、bit_or、bit_xor、bit_length |
條件表達(dá)式 | case、if、when |
集合 | in、find_in_set |
String計(jì)算 | ascii、char、chr、char_length、character_length、concat、instr、lcase、lower、length、locate、lower、lpad、ltrim、 overlay、replace、reverse、rtrim、split、split_part、substr、substring、trim、ucase、upper、like、regexp、regexp_extract、regexp_extract_all、regexp_like、regexp_replace、rlike |
聚合 | aggregate、approx_count_distinct、avg、collect_list、collect_set、corr、count、covar_pop、covar_samp、first、first_value、kurtosis、last、last_value、max、max_by、mean、min、regr_avgx、regr_avgy、regr_count、regr_r2、 regr_intercept、regr_slope、regr_sxy、regr_sxx、regr_syy、skewness、std、stddev、stddev_pop、stddev_samp、sum、var_pop、var_samp、variance |
窗口 | cume_dist、dense_rank、lag、lead、nth_value、ntile、percent_rank、rank、row_number |
時(shí)間 | add_months、current_date、current_timestamp、current_timezone、date、date_add、date_format、date_from_unix_date、date_sub、datediff、day、dayofmonth、dayofweek、dayofyear、from_unixtime、from_utc_timestamp、hour、last_day、make_date、minute、month、next_day、now、quarter、second、timestamp_micros、timestamp_millis、to_date、to_unix_timestamp、unix_seconds、unix_millis、unix_micros、weekday、weekofyear、year |
json | get_json_object、json_array_length |
array | array、array_contains、array_distinct、array_except、array_intersect、array_join、array_max、array_min、array_position、array_remove、array_repeat、array_sort、arrays_overlap、arrays_zip、element_at、exists、filter、forall、flatten、shuffle、size、sort_array |
map | map、get_map_value、map_from_arrays、map_keys、map_values、map_zip_with、named_struct、struct、str_to_map |
編碼 | crc32、hash、md5、sha1、sha2 |
其他 | current_catalog、current_database、greatest、least、monotonically_increasing_id、nanvl、spark_partition_id、stack、uuid、rand |
數(shù)據(jù)類型
Fusion引擎支持的數(shù)據(jù)類型,如下所示。
Byte、Short、Int、Long
Boolean
String、Binary
Decimal
Float、Double
Date、Timestamp
Fusion加速暫不支持的場(chǎng)景
算子
類型 | 算子 |
聚合 |
|
Exchange | CustomShuffleReaderExec |
Pandas |
|
其他 |
|
數(shù)據(jù)類型
Struct
Array
Map