Meson 引擎是 DLC 标准引擎 Spark 内置的高性能向量化查询引擎,支持无感加速 Spark SQL 工作负载和 DataFrame API 调用,降低工作负载的总成本。相比开源Spark 在 TPC-DS 1TB 基准测试上有 2.7 倍性能提升。Meson 完全兼容 Apache Spark API,无需改变现有业务代码。
原理介绍
随着 SSD 的广泛应用及网卡性能的显著提升,Spark 引擎的性能瓶颈更多由传统认知的 IO 转变为以 CPU 为主的计算资源。而围绕 JVM 的 CPU 优化方案(如 Codegen )存在诸多约束,如字节码长度、参数个数等存在限制,开发者也很难在 JVM 上利用现代 CPU 的一些特性。
Meson 引擎在 Spark 物理计划进行转换,使用 C++ 实现的向量化加速库执行计算,并将执行完的数据以列式方式返回,提升内存及带宽利用效率,进而突破性能瓶颈,可以使 Spark 作业效率得到有效的提升。
使用限制
Meson 引擎目前存在使用场景限制,在限制场景时 Meson 引擎将会进行 Fallback,回退到原生 Spark 引擎进行执行,由于 Fallback 需要进行必要的数据转换,回退次数过多,可能会导致总体运行时间比原生 Spark 引擎更慢。
请您提前了解 Meson 引擎主要的使用限制:
支持 Parquet 数据格式,ORC 支持暂不完善,其他数据格式暂不支持。
暂不支持 ANSI 模式。
暂不支持基于 RDD 的Application。
暂不支持 Structured Streaming。
暂不支持基于 PySpark 的自定义 Python 代码。
暂不支持 MEMORY_ONLY 的 CacheTable。
适用场景
以下支持能力基于标准引擎 Standard-S 1.1 及以上版本提供。
注意:
Meson 未完全支持或不支持的存储格式、数据类型、算子和函数会 Fallback 至原生 Spark 引擎执行。
存储格式
Meson 引擎支持的数据存储格式:
支持的数据格式:Parquet、ORC
支持的表格式: Iceberg、Hive
数据类型
Meson 引擎支持的数据类型:
Byte、Short、Int、Long
Boolean
String、Binary
Decimal
Float、Double
Date、Timestamp
算子
类型 | 已支持算子 | 未支持算子 |
Source | FileSourceScanExec、HiveTableScanExec、BatchScanExec、InMemoryTableScanExec | - |
Sink | DataWritingCommandExec、InsertIntoHiveTable、 | - |
Common | FilterExec、ProjectExec、SortExec、UnionExec | - |
Aggregate | HashAggregateExec | SortAggregateExec、ObjectHashAggregateExec |
Join | BroadcastHashJoinExec、ShuffledHashJoinExec、SortMergeJoinExec、BroadcastNestedLoopJoinExec、CartesianProductExec | - |
Window | WindowExec | WindowGroupLimitExec |
Exchange | ShuffleExchangeExec、ReusedExchangeExec、BroadcastExchangeExec、CoalesceExec | CustomShuffleReaderExec |
Limit | GlobalLimitExec、LocalLimitExec、TakeOrderedAndProjectExec、CollectLimitExec | - |
Subquery | SubqueryBroadcastExec | - |
Other | ExpandExec、GenerateExec、CollectTailExec、RangeExec | RangeExec、SampleExec |
函数
类型 | 已支持函数 |
Generator Functions | explode,explode_outer,inline,inline_outer,posexplode,posexplode_outer,stack |
Window Functions | cume_dist,dense_rank,lag,lead,nth_value,ntile,percent_rank,rank,row_number |
Aggregate Functions | any,any_value,approx_count_distinct,approx_percentile,array_agg,avg,bit_and,bit_or,bit_xor,bool_and,bool_or,collect_list,collect_set,corr,count,count_if,covar_pop,covar_samp,every,first,first_value,grouping,grouping_id,kurtosis,last,last_value,max,max_by,mean,median,min,min_by,percentile,percentile_approx,regr_avgx,regr_avgy,regr_count,regr_intercept,regr_r2,regr_slope,regr_sxx,regr_sxy,regr_syy,skewness,some,std,stddev,stddev_pop,stddev_samp,sum,try_avg,try_sum,var_pop,var_samp,variance |
Array Functions | array,array_append,array_compact,array_contains,array_distinct,array_except,array_insert,array_intersect,array_join,array_max,array_min,array_position,array_prepend,array_remove,array_repeat,array_union,arrays_overlap,arrays_zip,flatten,get,shuffle,slice,sort_array |
Bitwise Functions | &,^,bit_count,bit_get,getbit,shiftright,|,~ |
Collection Functions | array_size,cardinality,concat,reverse,size |
Conditional Functions | coalesce,if,ifnull,nanvl,nullif,nvl,nvl2,when |
Conversion Functions | bigint,binary,boolean,cast,date,decimal,double,float,int,smallint,string,timestamp,tinyint |
Date and Timestamp Functions | add_months,date_add,date_diff,date_format,date_from_unix_date,date_sub,date_trunc,dateadd,datediff,day,dayofmonth,dayofweek,dayofyear,extract,from_unixtime,from_utc_timestamp,hour,last_day,make_date,make_timestamp,make_ym_interval,minute,month,next_day,quarter,second,timestamp_micros,timestamp_millis,to_unix_timestamp,to_utc_timestamp,trunc,unix_date,unix_micros,unix_millis,unix_seconds,unix_timestamp,weekday,weekofyear,year |
Hash Functions | crc32,hash,md5,sha,sha1,sha2,xxhash64 |
JSON Functions | from_json,get_json_object,json_array_length,json_object_keys,json_tuple,schema_of_json,to_json |
Lambda Functions | aggregate,array_sort,exists,filter,forall,map_filter,map_zip_with,reduce,transform,transform_keys,transform_values,zip_with |
Map Functions | element_at,map,map_concat,map_contains_key,map_entries,map_keys,map_values,str_to_map,try_element_at |
Mathematical Functions | %,*,+,-,/,abs,acos,acosh,asin,asinh,atan,atan2,atanh,bin,cbrt,ceil,ceiling,conv,cos,cosh,cot,csc,degrees,e,exp,expm1,factorial,floor,greatest,hex,hypot,least,log,log10,log1p,log2,mod,negative,pi,pmod,positive,pow,power,rand,random,rint,round,sec,shiftleft,sign,signum,sinh,sqrt,try_add,unhex,width_bucket |
Misc Functions | assert_true,equal_null,spark_partition_id,uuid,version,|| |
Predicate Functions | !,!=,<,<=,<=>,<>,=,==,>,>=,and,between,case,ilike,in,isnan,isnotnull,isnull,like,not,or,regexp,regexp_like |
String Functions | ascii,base64,bit_length,btrim,char,char_length,character_length,chr,concat_ws,contains,endswith,find_in_set,format_number,format_string,initcap,instr,lcase,left,len,length,levenshtein,locate,lower,lpad,ltrim,luhn_check,mask,overlay,position,regexp_extract,regexp_extract_all,regexp_replace,repeat,replace,right,rpad,rtrim,soundex,split,split_part,startswith,substr,substring,substring_index,translate,trim,ucase,unbase64,upper |
Struct Functions | named_struct,struct |
URL Functions | url_decode,url_encode |
使用 Meson 引擎
标准引擎 Standard-S 1.1(native)默认支持 Meson 引擎。
注意:
创建资源时注意选择准确的引擎版本,Standard-S 1.1 不支持 Meson 引擎。