From d9f477c917fd68e28e0020780ba7cc24b0bed568 Mon Sep 17 00:00:00 2001 From: Thomas Graves Date: Tue, 6 Jul 2021 20:36:39 -0500 Subject: [PATCH] Qualification/Profiling tool add tests for Spark2 event logs (#2843) * add qualification test for spark2 * Update readme --- tools/README.md | 2 +- .../spark2_expectation.csv | 2 ++ .../spark-events-profiling/spark2-eventlog.zstd | Bin 0 -> 58877 bytes .../tool/profiling/ApplicationInfoSuite.scala | 12 ++++++++++++ .../tool/qualification/QualificationSuite.scala | 6 ++++++ 5 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 tools/src/test/resources/QualificationExpectations/spark2_expectation.csv create mode 100755 tools/src/test/resources/spark-events-profiling/spark2-eventlog.zstd diff --git a/tools/README.md b/tools/README.md index 1e6689a0b89..c80e97ebb27 100644 --- a/tools/README.md +++ b/tools/README.md @@ -13,7 +13,7 @@ GPU generated event logs. - Spark 3.0.1 or newer, the Qualification tool just needs the Spark jars and the Profiling tool runs a Spark application so needs the Spark runtime. - Java 8 or above -- Complete Spark event log(s) from Spark 3.0 or above version. +- Spark event log(s) from Spark 2.0 or above version. Support both rolled and compressed event logs with `.lz4`, `.lzf`, `.snappy` and `.zstd` suffixes. Also support Databricks specific rolled and compressed(.gz) eventlogs. The tool does not support nested directories, event log files or event log directories should be diff --git a/tools/src/test/resources/QualificationExpectations/spark2_expectation.csv b/tools/src/test/resources/QualificationExpectations/spark2_expectation.csv new file mode 100644 index 00000000000..5be74de10d3 --- /dev/null +++ b/tools/src/test/resources/QualificationExpectations/spark2_expectation.csv @@ -0,0 +1,2 @@ +App Name,App ID,Score,Potential Problems,SQL Dataframe Duration,App Duration,Executor CPU Time Percent,App Duration Estimated,SQL Duration with Potential Problems,SQL Ids with Failures +Spark shell,local-1624892957956,21.07,"",3751,17801,58.47,false,0,"" diff --git a/tools/src/test/resources/spark-events-profiling/spark2-eventlog.zstd b/tools/src/test/resources/spark-events-profiling/spark2-eventlog.zstd new file mode 100755 index 0000000000000000000000000000000000000000..4cb3d9389ae76d9a8968706c4b9cdb1c6a180dc0 GIT binary patch literal 58877 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 diff --git a/tools/src/test/scala/com/nvidia/spark/rapids/tool/qualification/QualificationSuite.scala b/tools/src/test/scala/com/nvidia/spark/rapids/tool/qualification/QualificationSuite.scala index dcd4247261c..7f730ec497e 100644 --- a/tools/src/test/scala/com/nvidia/spark/rapids/tool/qualification/QualificationSuite.scala +++ b/tools/src/test/scala/com/nvidia/spark/rapids/tool/qualification/QualificationSuite.scala @@ -94,6 +94,12 @@ class QualificationSuite extends FunSuite with BeforeAndAfterEach with Logging { runQualificationTest(logFiles, "nds_q86_test_expectation.csv") } + test("spark2 eventlog") { + val profileLogDir = ToolTestUtils.getTestResourcePath("spark-events-profiling") + val log = s"$profileLogDir/spark2-eventlog.zstd" + runQualificationTest(Array(log), "spark2_expectation.csv") + } + test("test udf event logs") { val logFiles = Array( s"$logDir/dataset_eventlog",