datafusion-ballista
datafusion-ballista copied to clipboard
Job graph fails to display in UI
Describe the bug Clicking on the view graph icon...
...fails to display the job graph:
To Reproduce
- click on view graph icon
Expected behavior DAG of job task sequence
I worked on this some time ago, so I'd be happy to have a look at it. @hokiegeek2 - does it fail at any job or specific jobs?
@onthebridgetonowhere Cool! Basically, no job graphs display in the UI in my experience
I had a look at it but I cannot reproduce the problem. Can you please provide more info about your configuration, version, build commit?
The first thing I'd try is to update to latest commit on main
branch if possible.
Here's what I've done that works for me:
- update to latest commit - 22029020
- cd ballista/scheduler && cargo run RUST_LOG=info ballista-scheduler
- cd ballista/executor && cargo run RUST_LOG=info ballista-executor
- cd ballista/scheduler/ui && yarn start
- cd examples && cargo run --release --bin sql
@onthebridgetonowhere cool, okay, I'll pull and build from that commit and see if I can reproduce your results
@hokiegeek2 sounds good, let us know how it goes.
Hi all, while working on #957 I faced the same issue, here's how to reproduce it:
- In the API handler,
get_job_svg_graph
function replace.map_err(|_| warp::reject())
with.map_err(|err| { info!("Issue: {:?}", err); warp::reject()})
https://github.com/apache/arrow-ballista/blob/9903ab27f121f16717a70de7a30f643c4c45dd34/ballista/scheduler/src/api/handlers.rs#L343-L348 - Launch scheduler and executor
- Submit a query, e.g. the
standalone-sql.rs
but with a call to remote:use ballista::prelude::{BallistaConfig, BallistaContext, Result}; use ballista_examples::test_util; use datafusion::execution::options::ParquetReadOptions; #[tokio::main] async fn main() -> Result<()> { let config = BallistaConfig::builder() .set("ballista.shuffle.partitions", "1") .build()?; let ctx = BallistaContext::remote("localhost", 50050, &config).await?; let testdata = test_util::examples_test_data(); // register parquet file with the execution context ctx.register_parquet( "test", &format!("{testdata}/alltypes_plain.parquet"), ParquetReadOptions::default(), ) .await?; let df = ctx.sql("select count(1) from test").await?; df.show().await?; Ok(()) }
- Wait until query is executed
- Look up the job ID, e.g. GET request to
http://localhost:50050/api/jobs
- Call
http://localhost:50050/api/job/{job_id}/dot_svg
with the retrieved job_id (e.g.http://localhost:50050/api/job/bvppZ4r/dot_svg
) - Go to the terminal of the scheduler and monitor the logs - I got the following error:
2024-01-25T22:28:24.800607Z INFO tokio-runtime-worker ThreadId(19) ballista_scheduler::api::handlers: Issue: Error { kind: NotFound, message: "program not found" }
Hope that helps to narrow it down!
Ok I think I stumbled over the solution for this issue: The graphviz-rust
library requires additionally the graphviz CLI to be installed:
Source: Documentation
On Windows these were the steps:
-
winget install graphviz
- Add
C:\Program Files\Graphviz\bin
to PATH - Validate the CLI is installed with
dot -V
- Restart ballista scheduler