Mesin Fusion adalah mesin eksekusi SQL vektor berperforma tinggi yang terintegrasi dalam E-MapReduce (EMR) Serverless Spark. Mesin ini tiga kali lebih cepat dibandingkan Apache Spark dalam pengujian benchmark TPC-DS dan sepenuhnya kompatibel dengan Apache Spark, sehingga tidak diperlukan modifikasi pada kode yang ada. Untuk mengaktifkan Mesin Fusion, cukup nyalakan sakelar Use Fusion Acceleration saat membuat sesi.
Tindakan pencegahan
Mesin Fusion menggunakan memori di luar heap dari Spark. Saat membuat sesi, Anda harus mengonfigurasi spark.memory.offHeap.enabled=true untuk parameter Spark Configuration agar memori di luar heap Spark dapat diaktifkan. Anda juga dapat mengonfigurasi parameter spark.memory.offHeap.size untuk menentukan ukuran memori di luar heap sesuai kebutuhan bisnis Anda.
Skenario yang didukung
Mesin Fusion cocok untuk pekerjaan Spark SQL dan DataFrame serta dapat meningkatkan performa sebagian besar operator, ekspresi, dan tipe data. Namun, Mesin Fusion tidak mendukung akselerasi untuk pekerjaan Resilient Distributed Dataset (RDD) atau pekerjaan yang menggunakan fungsi yang ditentukan pengguna (UDF).
Format penyimpanan
Mesin Fusion mendukung format penyimpanan data berikut:
Parquet
Paimon
ORC (sebagian)
Operator
Mesin Fusion memberikan akselerasi untuk sebagian besar operator umum. Tabel berikut menjelaskan operator tersebut.
Jenis | Operator |
Sumber |
|
Sink | DataWritingCommandExec |
Operasi umum |
|
Agregasi | HashAggregateExec |
Gabung |
|
Jendela |
|
Pertukaran |
|
Batas |
|
Subquery | SubqueryBroadcastExec |
Lainnya |
|
Ekspresi
Tabel berikut menjelaskan ekspresi yang didukung oleh Mesin Fusion.
Jenis | Ekspresi |
Perbandingan/Logika | !, !=, <, <=, >, >=, <=>, <>, =, ==, ||, and, between, is not null, is null, negative, null if, dan or |
Algoritma | %, +, -, *, /, 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, dan tanh |
Bitwise | ^, |, &, ~, bit_and, bit_count, bit_or, bit_xor, dan bit_length |
Ekspresi | case, if, dan when |
Set | in dan find_in_set |
Kalkulasi string | ascii, char, chr, char_length, character_length, concat, instr, lcase, lower, length, locate, lower, lpad, dan ltrim overlay, replace, reverse, rtrim, split, split_part, substr, substring, trim, ucase, upper, like, regexp, regexp_extract, regexp_extract_all, regexp_like, regexp_replace, dan rlike |
Agregasi | 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, dan regr_2 regr_intercept, regr_slope, regr_sxy, regr_sxx, regr_syy, skewness, std, stddev, stddev_pop, stddev_samp, sum, var_pop, var_samp, dan variance |
Jendela | cume_dist, dense_rank, lag, lead, nth_value, ntile, percent_rank, rank, dan row_number |
Waktu | 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, dan year |
JSON | get_json_object dan 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, dan sort_array |
Map | map, get_map_value, map_from_arrays, map_keys, map_values, map_zip_with, named_struct, struct, dan str_to_map |
Enkode | crc32, hash, md5, sha1, dan sha2 |
Lainnya | current_catalog, current_database, greatest, least, monotonically_increasing_id, nanvl, spark_partition_id, stack, uuid, dan rand |
Tipe data
Mesin Fusion mendukung tipe data berikut:
Byte, Short, Int, dan Long
Boolean
String dan Binary
Decimal
Float dan Double
Date dan Timestamp
Skema yang tidak didukung
Operator
Jenis | Operator |
Agregasi |
|
Pertukaran | CustomShuffleReaderExec |
Pandas |
|
Lainnya |
|
Tipe data
Struct
Array
Map