Xonai Radar¶
Xonai Compatibility Radar reads your Apache Spark event logs and reports how much of your workload the Xonai Accelerator supports. Use the results to identify your highest-compatibility workloads and prioritise where acceleration can begin.
How it works¶
Radar parses the physical execution plan from your event work logs by analysing the operators Spark that actually ran, not just the queries you wrote. It checks each operator and expression against what Xonai Accelerator supports and calculates how much of your SQL task time is covered for acceleration.
Radar ships as a self-contained JAR with a script to run it and only reads event logs you point to. It does not access your data, connect to your cluster, or make any external calls.
Report is typically ready in seconds.
→ Download the latest release from Github
For a technical review from our engineer, send it to radar@xonai.io.
Requirements¶
Java 8 or later
Spark event logs from Spark 3.x and Spark 4.x applications
Supported sources: Apache Spark OSS and Amazon EMR
Note
To ensure the event logs contain the information required by the tool, Spark applications must
be run with the configuration --conf spark.sql.ui.explainMode=formatted.
Getting Started¶
Install and extract the tool:
wget https://github.com/xonai-computing/xonai-compatibility-radar/releases/download/v1.0.0/xonai-radar-1.0.0.tar.gz
tar -xzvf xonai-radar-1.0.0.tar.gz
Verify the installation:
./xonai-radar --help
Usage¶
Point Radar at your event logs and it will analyse them and print the report to the terminal.
./xonai-radar -i <event-log-path> -o <report-path> [options]
-i, --input <path> points to event log path(s) - file, directory, or comma-separated list.
-o, --output <path> points to a directory where results are written.
Note
For results that give you confidence to act on, use logs from workloads that are representative of what runs in production. Development logs with simplified queries may understate coverage.
Options¶
Option |
Description |
|---|---|
|
Output format: |
|
Print physical plan parsing errors |
|
Overwrite existing result files within the specified path |
|
Print help information |
Input and output paths support local filesystem, HDFS, Amazon S3, and Google Cloud Storage.
Cloud Storage Authentication¶
Only needed if your event logs or output are on AWS or GCS:
Amazon S3
With IAM access: credentials are picked up automatically from the EC2 instance attached to the profile.
Without IAM access: set
AWS_ACCESS_KEY_IDandAWS_SECRET_ACCESS_KEY;
Google Cloud Storage
On GCE: application default credentials are picked up automatically.
Without a service account: set
GCS_SERVICE_ACCOUNT_JSON_KEYFILEto the path of a service account JSON key file;
Running in Docker (optional)¶
Radar can run inside a Docker container with network access fully disabled, making it suitable for environments where your security policy requires isolated execution.
Use --network none to disable all network access inside the container. Combined with a read-only
mount for the input directory, nothing can leave your infrastructure.
Output¶
Radar produces two files, and a third only when parsing errors occur.
File |
Description |
|---|---|
|
How much of each application’s task time Xonai Accelerator supports |
|
Support status for each operator and expression, and how much task time each carries |
|
Physical plan parsing errors - only created when errors are present |
Applications Summary File¶
One row per Spark application.
Column |
Description |
|---|---|
Application Id |
Spark application identifier |
Application Name |
Spark application name |
Spark Version |
Spark version the application ran on |
Complete |
Application completion status; Results may be inaccurate if the logs were collected before the application finished running. |
Total Task Time |
Total CPU time across all tasks |
SQL Task Time |
CPU time spent inside SQL/DataFrame operations. |
Supported Task Time |
CPU time that the Xonai Accelerator supports. Set to |
Coverage |
Percentage of total task time the Xonai Accelerator supports. Set to |
Example:
+----------------+------------------+---------------+----------+-----------------+---------------+---------------------+----------+
| Application Id | Application Name | Spark Version | Complete | Total Task Time | SQL Task Time | Supported Task Time | Coverage |
+----------------+------------------+---------------+----------+-----------------+---------------+---------------------+----------+
| 1752001041750 | DailyStats | 3.5.8 | Yes | 33 min 30 s | 30 min 29 s | 28 min 19 s | 84% |
+----------------+------------------+---------------+----------+-----------------+---------------+---------------------+----------+
SQL Support File¶
One row per SQL node type per application. It shows which operators and expressions are supported and how much task time each carries.
A node type may appear multiple times if support varies across query structures.
Column |
Description |
|---|---|
Application Id |
Spark application identifier |
SQL Node Name |
Physical plan node type - operator or expression |
Support |
Support status with the Xonai Accelerator - see values below |
Impact Task Time |
Total task time in stages where this node type appears at least once |
Node Count |
Number of times this operator or expression appeared across all queries in the application |
Support values:
Value |
Meaning |
|---|---|
Supported |
Compatible with the Xonai Accelerator |
NotImplemented |
No support exists for this node |
UnsupportedDataType |
Some support exists, but not for the data types used in your workload |
UndefinedDataType |
The physical plan parser could not determine the actual data types |
Unknown |
This node is not known to Xonai - likely a recently added Spark expression or operator |
Example:
+----------------+-----------------------+---------------------+------------------+------------+
| Application Id | SQL Node Name | Support | Impact Task Time | Node Count |
+----------------+-----------------------+---------------------+------------------+------------+
| 1752001041750 | AttributeReference | Supported | 33 min 29 s | 100 |
| 1752001041750 | ShuffleExchangeExec | Supported | 33 min 29 s | 8 |
| 1752001041750 | WholeStageCodegenExec | Supported | 33 min 29 s | 18 |
| 1752001041750 | InputAdapterExec | Supported | 33 min 29 s | 23 |
| 1752001041750 | ProjectExec | Supported | 19 min 23 s | 8 |
| 1752001041750 | SortExec | Supported | 18 min 10 s | 7 |
| 1752001041750 | SortOrder | Supported | 18 min 10 s | 9 |
| 1752001041750 | SortMergeJoinExec | Supported | 18 min 10 s | 3 |
| 1752001041750 | FilterExec | Supported | 15 min 19 s | 7 |
| 1752001041750 | ColumnarToRowExec | Supported | 15 min 19 s | 7 |
| 1752001041750 | FileSourceScanExec | Supported | 15 min 19 s | 7 |
| 1752001041750 | And | Supported | 15 min 19 s | 13 |
| 1752001041750 | IsNotNull | Supported | 15 min 19 s | 15 |
| 1752001041750 | Literal | Supported | 6 min 23 s | 14 |
| 1752001041750 | AggregateExpression | Supported | 5 min 10 s | 4 |
| 1752001041750 | HashAggregateExec | UnsupportedDataType | 5 min 10 s | 2 |
| 1752001041750 | Multiply | Supported | 5 min 10 s | 2 |
| 1752001041750 | ShuffleExchangeExec | Supported | 5 min 10 s | 1 |
| 1752001041750 | Sum | Supported | 5 min 10 s | 2 |
| 1752001041750 | Subtract | Supported | 5 min 10 s | 6 |
| 1752001041750 | BroadcastHashJoinExec | Supported | 5 min 10 s | 2 |
| 1752001041750 | LessThan | Supported | 1 min 13 s | 1 |
| 1752001041750 | GreaterThanOrEqual | Supported | 1 min 13 s | 1 |
+----------------+-----------------------+---------------------+------------------+------------+
Coverage¶
Coverage is a conservative estimate - true coverage can be higher.
If any operator in a pipeline stage is unsupported, the entire stage is excluded from
Supported Task Time - even if every other operator in that stage is supported. This is because
event logs record the total runtime of each stage, but not how that time is distributed across
individual operators within it.