diff --git a/core/README.md b/core/README.md index 0a3bae83b..3e17fa78f 100644 --- a/core/README.md +++ b/core/README.md @@ -32,6 +32,17 @@ mvn -Dbuildver=351 clean package Run `mvn help:all-profiles` to list supported Spark versions. +### Running tests + +The unit tests are run by default when building unless they are explicitly skipped by specifying `-DskipTests`. + +To run an individual test the `-Dsuites` option can be specified: + +```bash +mvn test -Dsuites=com.nvidia.spark.rapids.tool.qualification.QualificationSuite +``` + + ### Setting up an Integrated Development Environment Before proceeding with importing spark-rapids-tools into IDEA or switching to a different Spark release diff --git a/core/src/main/scala/com/nvidia/spark/rapids/tool/Platform.scala b/core/src/main/scala/com/nvidia/spark/rapids/tool/Platform.scala index 2504fc326..6bf62a537 100644 --- a/core/src/main/scala/com/nvidia/spark/rapids/tool/Platform.scala +++ b/core/src/main/scala/com/nvidia/spark/rapids/tool/Platform.scala @@ -51,6 +51,8 @@ object PlatformNames { ) } +case class DynamicAllocationInfo(enabled: Boolean, max: String, min: String, initial: String) + // resource information and name of the CSP instance types, or for onprem its // the executor information since we can't recommend node types case class InstanceInfo(cores: Int, memoryMB: Long, name: String, numGpus: Int) @@ -211,7 +213,6 @@ abstract class Platform(var gpuDevice: Option[GpuDevice], */ def getRetainedSystemProps: Set[String] = Set.empty - def getExecutorHeapMemoryMB(sparkProperties: Map[String, String]): Long = { // Potentially enhance this to handle if no config then check the executor // added or resource profile added events for the heap size @@ -288,28 +289,20 @@ abstract class Platform(var gpuDevice: Option[GpuDevice], math.max(1, gpus) } - // Get the number of nodes that were used in the source cluster. - def getSourceNumNodes(): Int = { - if (clusterProperties.isDefined) { - Math.max(1, clusterProperties.get.system.numWorkers) - } else if (clusterInfoFromEventLog.isDefined) { - clusterInfoFromEventLog.get.numWorkerNodes - } else { - 1 - } - } - // we want to keep the number of executors used between runs the same def getNumExecutorInstances(sparkProperties: Map[String, String]): Int = { + val dynamicAllocationEnabled = Platform.isDynamicAllocationEnabled(sparkProperties) val execInstFromProps = sparkProperties.get("spark.executor.instances") + // If the cluster properties were specified make sure to use those and not + // the eventlog inference. This is broken in my mind but is backwards compatible, + // or maybe use number gpus per node as an improvement. if (clusterProperties.isDefined) { val numWorkers = Math.max(1, clusterProperties.get.system.numWorkers) this.numGpus * numWorkers - } else if (execInstFromProps.isDefined) { + } else if (execInstFromProps.isDefined && !dynamicAllocationEnabled) { execInstFromProps.get.toInt } else if (clusterInfoFromEventLog.isDefined) { - val clusterInfo = clusterInfoFromEventLog.get - clusterInfo.numWorkerNodes * clusterInfo.numExecsPerNode + clusterInfoFromEventLog.get.numExecutors } else { // not sure so don't set it 0 @@ -338,24 +331,28 @@ abstract class Platform(var gpuDevice: Option[GpuDevice], def createClusterInfo(coresPerExecutor: Int, numExecsPerNode: Int, + numExecs: Int, numWorkerNodes: Int, sparkProperties: Map[String, String], systemProperties: Map[String, String]): ExistingClusterInfo = { val driverHost = sparkProperties.get("spark.driver.host") val executorHeapMem = getExecutorHeapMemoryMB(sparkProperties) - ExistingClusterInfo(platformName, coresPerExecutor, numExecsPerNode, numWorkerNodes, - executorHeapMem, driverHost = driverHost) + val dynamicAllocSettings = Platform.getDynamicAllocationSettings(sparkProperties) + ExistingClusterInfo(platformName, coresPerExecutor, numExecsPerNode, numExecs, numWorkerNodes, + executorHeapMem, dynamicAllocSettings.enabled, dynamicAllocSettings.max, + dynamicAllocSettings.min, dynamicAllocSettings.initial, driverHost = driverHost) } // set the cluster information for this platform based on what we found in the // eventlog def configureClusterInfoFromEventLog(coresPerExecutor: Int, execsPerNode: Int, + numExecs: Int, numExecutorNodes: Int, sparkProperties: Map[String, String], systemProperties: Map[String, String]): Unit = { clusterInfoFromEventLog = Some(createClusterInfo(coresPerExecutor, execsPerNode, - numExecutorNodes, sparkProperties, systemProperties)) + numExecs, numExecutorNodes, sparkProperties, systemProperties)) } override def toString: String = { @@ -383,17 +380,30 @@ abstract class Platform(var gpuDevice: Option[GpuDevice], */ def getGPUInstanceTypeRecommendation( sparkProperties: Map[String, String]): Option[RecommendedClusterInfo] = { - val initialNumExecInstances = getNumExecutorInstances(sparkProperties) + val vendor = clusterInfoFromEventLog.map(_.vendor).getOrElse("") + val numExecs = getNumExecutorInstances(sparkProperties) // If the cluster properties were specified make sure to use those and not // the eventlog inference. This is broken in my mind but is backwards compatible, // or maybe use number gpus per node as an improvement. + val origClusterNumExecsPerNode = clusterInfoFromEventLog.map(_.numExecsPerNode).getOrElse(1) val numExecsPerNode = if (clusterProperties.isEmpty) { - clusterInfoFromEventLog.map(_.numExecsPerNode).getOrElse(1) + // numExecsPerNode can be -1 if dynamic allocation so just make it 1 for + // this set of calculations. However if we are on a CSP then we want to recommend + // the best size machine so use the number of GPUs as proxy to be the number of executors + // we could put on a node. + if (origClusterNumExecsPerNode == -1) { + maxGpusSupported + } else { + origClusterNumExecsPerNode + } } else { 1 } + // onprem yarn multi-tenant vs yarn static cluster (dataproc) for just that application + // should be handled automatically unless heterogeneous nodes val gpusToUse = Math.max(this.numGpus, Math.min(numExecsPerNode, maxGpusSupported)) + // update the global numGpus based on the instance type we are using this.numGpus = gpusToUse val nodeCores = if (clusterProperties.isDefined) { @@ -424,11 +434,6 @@ abstract class Platform(var gpuDevice: Option[GpuDevice], logWarning("cluster information from event log is missing, executor cores set to 0!") 0 } - val numExecsPerNode = if (clusterInfoFromEventLog.isDefined) { - clusterInfoFromEventLog.get.numExecsPerNode - } else { - 1 - } val nodeCoresToUse = execCores * gpusToUse val nodeMemMB = getMemoryMBPerNode(sparkProperties) // It's possible if a cpu run was used, it could run with multiple executors, but @@ -454,29 +459,37 @@ abstract class Platform(var gpuDevice: Option[GpuDevice], } else { instanceInfoOpt } - val numExistingNodes = getSourceNumNodes - // check if instance type supports that number of gpus, if not we add extra executors - val (numExecs, numNodes) = if (finalInstanceInfo.get.numGpus >= numExecsPerNode) { - // TODO - really if instance has more GPUs we should calculate the other way to - // recommend less nodes but leave that open for now - (initialNumExecInstances, numExistingNodes) - } else { - // just flatten to use 1 but we should really see if multiples - val numGpusLeft = numExecsPerNode / finalInstanceInfo.get.numGpus - (initialNumExecInstances, numExistingNodes * numGpusLeft) - } + // note this is going over as for instance if you have 4 gpus per node but only need + // 10 executors, this would tell you to allocate enough to fit 12. + val numNodes = math.ceil(numExecs.toDouble / finalInstanceInfo.get.numGpus).toInt val coresPerExec = if (finalInstanceInfo.isDefined) { - finalInstanceInfo.get.cores / finalInstanceInfo.get.numGpus + // We may not be able to match instance type up exactly, this means the number of + // cores per executor could come out to be more then the original application. + // For now we want the cores per executor to stay the same as original app so if + // that is set, use it first. + if (clusterInfoFromEventLog.isDefined) { + clusterInfoFromEventLog.get.coresPerExecutor + } else { + finalInstanceInfo.get.cores / finalInstanceInfo.get.numGpus + } } else { 1 } + val finalNumNodes = if (vendor == PlatformNames.ONPREM) { + // if its onprem we really have no idea of the size of the cluster + -1 + } else { + numNodes + } if (numExecs > 0) { - val vendor = clusterInfoFromEventLog.map(_.vendor).getOrElse("") val instanceName = finalInstanceInfo.map(_.name).getOrElse("") val numGpus = finalInstanceInfo.map(_.numGpus).getOrElse(1) + val dynamicAllocSettings = Platform.getDynamicAllocationSettings(sparkProperties) // Num of executors per node is the number of GPUs recommendedClusterInfo = Some(RecommendedClusterInfo(vendor, coresPerExec, - numNodes, numGpus, numExecs, gpuDevice = getGpuOrDefault.toString, + finalNumNodes, numGpus, numExecs, gpuDevice = getGpuOrDefault.toString, + dynamicAllocSettings.enabled, dynamicAllocSettings.max, + dynamicAllocSettings.min, dynamicAllocSettings.initial, workerNodeType = Some(instanceName))) recommendedNodeInstanceInfo = finalInstanceInfo recommendedClusterInfo @@ -505,6 +518,7 @@ abstract class DatabricksPlatform(gpuDevice: Option[GpuDevice], override def createClusterInfo(coresPerExecutor: Int, numExecsPerNode: Int, + numExecs: Int, numWorkerNodes: Int, sparkProperties: Map[String, String], systemProperties: Map[String, String]): ExistingClusterInfo = { @@ -514,8 +528,11 @@ abstract class DatabricksPlatform(gpuDevice: Option[GpuDevice], val driverHost = sparkProperties.get("spark.driver.host") val clusterName = sparkProperties.get(DatabricksParseHelper.PROP_TAG_CLUSTER_NAME_KEY) val executorHeapMem = getExecutorHeapMemoryMB(sparkProperties) - ExistingClusterInfo(platformName, coresPerExecutor, numExecsPerNode, numWorkerNodes, - executorHeapMem, driverNodeType, workerNodeType, driverHost, clusterId, clusterName) + val dynamicAllocSettings = Platform.getDynamicAllocationSettings(sparkProperties) + ExistingClusterInfo(platformName, coresPerExecutor, numExecsPerNode, numExecs, numWorkerNodes, + executorHeapMem, dynamicAllocSettings.enabled, dynamicAllocSettings.max, + dynamicAllocSettings.min, dynamicAllocSettings.initial, driverNodeType, + workerNodeType, driverHost, clusterId, clusterName) } } @@ -629,14 +646,18 @@ class EmrPlatform(gpuDevice: Option[GpuDevice], override def createClusterInfo(coresPerExecutor: Int, numExecsPerNode: Int, + numExecs: Int, numWorkerNodes: Int, sparkProperties: Map[String, String], systemProperties: Map[String, String]): ExistingClusterInfo = { val clusterId = systemProperties.get("EMR_CLUSTER_ID") val driverHost = sparkProperties.get("spark.driver.host") val executorHeapMem = getExecutorHeapMemoryMB(sparkProperties) - ExistingClusterInfo(platformName, coresPerExecutor, numExecsPerNode, numWorkerNodes, - executorHeapMem, clusterId = clusterId, driverHost = driverHost) + val dynamicAllocSettings = Platform.getDynamicAllocationSettings(sparkProperties) + ExistingClusterInfo(platformName, coresPerExecutor, numExecsPerNode, numExecs, + numWorkerNodes, executorHeapMem, dynamicAllocSettings.enabled, dynamicAllocSettings.max, + dynamicAllocSettings.min, dynamicAllocSettings.initial, clusterId = clusterId, + driverHost = driverHost) } override def getInstanceByResources( @@ -672,6 +693,29 @@ class OnPremPlatform(gpuDevice: Option[GpuDevice], override def maxGpusSupported: Int = 1 } +object Platform { + def isDynamicAllocationEnabled(sparkProperties: Map[String, String]): Boolean = { + sparkProperties.getOrElse("spark.dynamicAllocation.enabled", "false").toBoolean + } + + def getDynamicAllocationSettings(sparkProperties: Map[String, String]): DynamicAllocationInfo = { + val dynamicAllocationEnabled = isDynamicAllocationEnabled(sparkProperties) + if (dynamicAllocationEnabled) { + val dynamicAllocationMax = sparkProperties. + getOrElse("spark.dynamicAllocation.maxExecutors", Int.MaxValue.toString) + val dynamicAllocationMin = sparkProperties. + getOrElse("spark.dynamicAllocation.minExecutors", "0") + val dynamicAllocationInit = sparkProperties. + getOrElse("spark.dynamicAllocation.initialExecutors", sparkProperties. + getOrElse("spark.executor.instances", dynamicAllocationMin)) + DynamicAllocationInfo(dynamicAllocationEnabled, dynamicAllocationMax, + dynamicAllocationMin, dynamicAllocationInit) + } else { + DynamicAllocationInfo(dynamicAllocationEnabled, "N/A", "N/A", "N/A") + } + } +} + /** * Factory for creating instances of different platforms. * This factory supports various platforms and provides methods for creating diff --git a/core/src/main/scala/com/nvidia/spark/rapids/tool/profiling/AutoTuner.scala b/core/src/main/scala/com/nvidia/spark/rapids/tool/profiling/AutoTuner.scala index 3cbef68b2..6d1a2c165 100644 --- a/core/src/main/scala/com/nvidia/spark/rapids/tool/profiling/AutoTuner.scala +++ b/core/src/main/scala/com/nvidia/spark/rapids/tool/profiling/AutoTuner.scala @@ -1393,14 +1393,12 @@ object AutoTuner extends Logging { } def buildAutoTuner( - workerInfoFilePath: String, singleAppProvider: AppSummaryInfoBaseProvider, - platform: Platform = PlatformFactory.createInstance(clusterProperties = None), + platform: Platform, driverInfoProvider: DriverLogInfoProvider = BaseDriverLogInfoProvider.noneDriverLog ): AutoTuner = { try { - val clusterPropsOpt = loadClusterProps(workerInfoFilePath) - val autoT = new AutoTuner(clusterPropsOpt.getOrElse(new ClusterProperties()), + val autoT = new AutoTuner(platform.clusterProperties.getOrElse(new ClusterProperties()), singleAppProvider, platform, driverInfoProvider) autoT } catch { diff --git a/core/src/main/scala/com/nvidia/spark/rapids/tool/profiling/Profiler.scala b/core/src/main/scala/com/nvidia/spark/rapids/tool/profiling/Profiler.scala index a3e6139b0..bad5524e3 100644 --- a/core/src/main/scala/com/nvidia/spark/rapids/tool/profiling/Profiler.scala +++ b/core/src/main/scala/com/nvidia/spark/rapids/tool/profiling/Profiler.scala @@ -409,10 +409,9 @@ class Profiler(hadoopConf: Configuration, appArgs: ProfileArgs, enablePB: Boolea if (appInfo.isDefined && appInfo.get.appInfo.head.pluginEnabled) { val appInfoProvider = AppSummaryInfoBaseProvider.fromAppInfo(appInfo) val workerInfoPath = appArgs.workerInfo.getOrElse(AutoTuner.DEFAULT_WORKER_INFO_PATH) - val platform = appArgs.platform() val clusterPropsOpt = loadClusterProps(workerInfoPath) - val autoTuner: AutoTuner = AutoTuner.buildAutoTuner(workerInfoPath, appInfoProvider, - PlatformFactory.createInstance(platform, clusterPropsOpt), driverInfoProvider) + val autoTuner: AutoTuner = AutoTuner.buildAutoTuner(appInfoProvider, + PlatformFactory.createInstance(appArgs.platform(), clusterPropsOpt), driverInfoProvider) // The autotuner allows skipping some properties, // e.g., getRecommendedProperties(Some(Seq("spark.executor.instances"))) skips the diff --git a/core/src/main/scala/com/nvidia/spark/rapids/tool/qualification/PluginTypeChecker.scala b/core/src/main/scala/com/nvidia/spark/rapids/tool/qualification/PluginTypeChecker.scala index d1958f572..f04ddcac7 100644 --- a/core/src/main/scala/com/nvidia/spark/rapids/tool/qualification/PluginTypeChecker.scala +++ b/core/src/main/scala/com/nvidia/spark/rapids/tool/qualification/PluginTypeChecker.scala @@ -83,7 +83,7 @@ object OpSuppLevel extends Enumeration { * by the plugin which lists the formats and types supported. * The class also supports a custom speedup factor file as input. */ -class PluginTypeChecker(val platform: Platform = PlatformFactory.createInstance(), +class PluginTypeChecker(platform: Platform = PlatformFactory.createInstance(), speedupFactorFile: Option[String] = None) extends Logging { private val NONE = "None" diff --git a/core/src/main/scala/com/nvidia/spark/rapids/tool/qualification/QualOutputWriter.scala b/core/src/main/scala/com/nvidia/spark/rapids/tool/qualification/QualOutputWriter.scala index 4d1bf70fb..14035e1cc 100644 --- a/core/src/main/scala/com/nvidia/spark/rapids/tool/qualification/QualOutputWriter.scala +++ b/core/src/main/scala/com/nvidia/spark/rapids/tool/qualification/QualOutputWriter.scala @@ -451,12 +451,23 @@ object QualOutputWriter { val STATUS_REPORT_APP_ID = "AppID" val STATUS_REPORT_DESC_STR = "Description" val VENDOR = "Vendor" + val RECOMMENDED_VENDOR = "Recommended Vendor" val DRIVER_HOST = "Driver Host" val CLUSTER_ID_STR = "Cluster Id" // Different from ClusterId used for Databricks Tags val CLUSTER_NAME = "Cluster Name" val RECOMMENDED_NUM_GPUS = "Recommended Num GPUs Per Node" val RECOMMENDED_GPU_DEVICE = "Recommended GPU Device" val NUM_EXECS_PER_NODE = "Num Executors Per Node" + val NUM_EXECS = "Num Executors" + val EXECUTOR_HEAP_MEMORY = "Executor Heap Memory" + val DYN_ALLOC_ENABLED = "Dynamic Allocation Enabled" + val DYN_ALLOC_MAX = "Dynamic Allocation Max Executors" + val DYN_ALLOC_MIN = "Dynamic Allocation Min Executors" + val DYN_ALLOC_INIT = "Dynamic Allocation Initial Executors" + val RECOMMENDED_DYN_ALLOC_ENABLED = "Recommended Dynamic Allocation Enabled" + val RECOMMENDED_DYN_ALLOC_MAX = "Recommended Dynamic Allocation Max Executors" + val RECOMMENDED_DYN_ALLOC_MIN = "Recommended Dynamic Allocation Min Executors" + val RECOMMENDED_DYN_ALLOC_INIT = "Recommended Dynamic Allocation Initial Executors" val RECOMMENDED_NUM_EXECS = "Recommended Num Executors" val NUM_WORKER_NODES = "Num Worker Nodes" val RECOMMENDED_NUM_WORKER_NODES = "Recommended Num Worker Nodes" @@ -800,10 +811,13 @@ object QualOutputWriter { private def getClusterInfoHeaderStrings: mutable.LinkedHashMap[String, Int] = { val headersAndFields = Seq( - APP_ID_STR, APP_NAME_STR, VENDOR, DRIVER_HOST, CLUSTER_ID_STR, CLUSTER_NAME, - WORKER_NODE_TYPE, DRIVER_NODE_TYPE, NUM_WORKER_NODES, NUM_EXECS_PER_NODE, CORES_PER_EXEC, - RECOMMENDED_WORKER_NODE_TYPE, RECOMMENDED_NUM_EXECS, RECOMMENDED_NUM_WORKER_NODES, - RECOMMENDED_CORES_PER_EXEC, RECOMMENDED_GPU_DEVICE, RECOMMENDED_NUM_GPUS).map { + APP_ID_STR, APP_NAME_STR, STATUS_REPORT_PATH_STR, VENDOR, DRIVER_HOST, CLUSTER_ID_STR, + CLUSTER_NAME, WORKER_NODE_TYPE, DRIVER_NODE_TYPE, NUM_WORKER_NODES, NUM_EXECS_PER_NODE, + NUM_EXECS, EXECUTOR_HEAP_MEMORY, DYN_ALLOC_ENABLED, DYN_ALLOC_MAX, DYN_ALLOC_MIN, + DYN_ALLOC_INIT, CORES_PER_EXEC, RECOMMENDED_WORKER_NODE_TYPE, RECOMMENDED_NUM_EXECS, + RECOMMENDED_NUM_WORKER_NODES, RECOMMENDED_CORES_PER_EXEC, RECOMMENDED_GPU_DEVICE, + RECOMMENDED_NUM_GPUS, RECOMMENDED_VENDOR, RECOMMENDED_DYN_ALLOC_ENABLED, + RECOMMENDED_DYN_ALLOC_MAX, RECOMMENDED_DYN_ALLOC_MIN, RECOMMENDED_DYN_ALLOC_INIT).map { key => (key, key.length) } mutable.LinkedHashMap(headersAndFields: _*) @@ -827,6 +841,7 @@ object QualOutputWriter { val data = ListBuffer( refactorCSVFuncWithOption(Some(sumInfo.clusterSummary.appId), APP_ID_STR), refactorCSVFuncWithOption(Some(sumInfo.clusterSummary.appName), APP_NAME_STR), + refactorCSVFuncWithOption(sumInfo.clusterSummary.eventLogPath, STATUS_REPORT_PATH_STR), refactorCSVFuncWithOption(clusterInfo.map(_.vendor), VENDOR), refactorCSVFuncWithOption(clusterInfo.flatMap(_.driverHost), DRIVER_HOST), refactorCSVFuncWithOption(clusterInfo.flatMap(_.clusterId), CLUSTER_ID_STR), @@ -835,6 +850,15 @@ object QualOutputWriter { refactorCSVFuncWithOption(clusterInfo.flatMap(_.driverNodeType), DRIVER_NODE_TYPE), refactorCSVFuncWithOption(clusterInfo.map(_.numWorkerNodes.toString), NUM_WORKER_NODES), refactorCSVFuncWithOption(clusterInfo.map(_.numExecsPerNode.toString), NUM_EXECS_PER_NODE), + refactorCSVFuncWithOption(clusterInfo.map(_.numExecutors.toString), NUM_EXECS), + refactorCSVFuncWithOption(clusterInfo.map(_.executorHeapMemory.toString), + EXECUTOR_HEAP_MEMORY), + refactorCSVFuncWithOption(clusterInfo.map(_.dynamicAllocationEnabled.toString), + DYN_ALLOC_ENABLED), + refactorCSVFuncWithOption(clusterInfo.map(_.dynamicAllocationMaxExecutors), DYN_ALLOC_MAX), + refactorCSVFuncWithOption(clusterInfo.map(_.dynamicAllocationMinExecutors), DYN_ALLOC_MIN), + refactorCSVFuncWithOption(clusterInfo.map(_.dynamicAllocationInitialExecutors), + DYN_ALLOC_INIT), refactorCSVFuncWithOption(clusterInfo.map(_.coresPerExecutor.toString), CORES_PER_EXEC), refactorCSVFuncWithOption(recClusterInfo.flatMap(_.workerNodeType), RECOMMENDED_WORKER_NODE_TYPE), @@ -845,8 +869,16 @@ object QualOutputWriter { refactorCSVFuncWithOption(recClusterInfo.map(_.coresPerExecutor.toString), RECOMMENDED_CORES_PER_EXEC), refactorCSVFuncWithOption(recClusterInfo.map(_.gpuDevice), RECOMMENDED_GPU_DEVICE), - refactorCSVFuncWithOption(recClusterInfo.map(_.numGpus.toString), RECOMMENDED_NUM_GPUS) - + refactorCSVFuncWithOption(recClusterInfo.map(_.numGpus.toString), RECOMMENDED_NUM_GPUS), + refactorCSVFuncWithOption(recClusterInfo.map(_.vendor), RECOMMENDED_VENDOR), + refactorCSVFuncWithOption(recClusterInfo.map(_.dynamicAllocationEnabled.toString), + RECOMMENDED_DYN_ALLOC_ENABLED), + refactorCSVFuncWithOption(recClusterInfo.map(_.dynamicAllocationMaxExecutors), + RECOMMENDED_DYN_ALLOC_MAX), + refactorCSVFuncWithOption(recClusterInfo.map(_.dynamicAllocationMinExecutors), + RECOMMENDED_DYN_ALLOC_MIN), + refactorCSVFuncWithOption(recClusterInfo.map(_.dynamicAllocationInitialExecutors), + RECOMMENDED_DYN_ALLOC_INIT) ) constructOutputRow(data, delimiter, prettyPrint) :: Nil } diff --git a/core/src/main/scala/com/nvidia/spark/rapids/tool/qualification/Qualification.scala b/core/src/main/scala/com/nvidia/spark/rapids/tool/qualification/Qualification.scala index 6889116ea..5e35b32c0 100644 --- a/core/src/main/scala/com/nvidia/spark/rapids/tool/qualification/Qualification.scala +++ b/core/src/main/scala/com/nvidia/spark/rapids/tool/qualification/Qualification.scala @@ -20,7 +20,8 @@ import java.util.concurrent.{ConcurrentHashMap, TimeUnit} import scala.collection.JavaConverters._ -import com.nvidia.spark.rapids.tool.{EventLogInfo, FailedEventLog, ToolBase} +import com.nvidia.spark.rapids.tool.{EventLogInfo, FailedEventLog, PlatformFactory, ToolBase} +import com.nvidia.spark.rapids.tool.profiling.AutoTuner import com.nvidia.spark.rapids.tool.qualification.QualOutputWriter.DEFAULT_JOB_FREQUENCY import com.nvidia.spark.rapids.tool.tuning.TunerContext import com.nvidia.spark.rapids.tool.views.QualRawReportGenerator @@ -37,7 +38,7 @@ class Qualification(outputPath: String, numRows: Int, hadoopConf: Configuration, printStdout: Boolean, enablePB: Boolean, reportSqlLevel: Boolean, maxSQLDescLength: Int, mlOpsEnabled:Boolean, penalizeTransitions: Boolean, tunerContext: Option[TunerContext], - clusterReport: Boolean) extends ToolBase(timeout) { + clusterReport: Boolean, platformArg: String, workerInfoPath: String) extends ToolBase(timeout) { override val simpleName: String = "qualTool" override val outputDir = s"$outputPath/rapids_4_spark_qualification_output" @@ -144,8 +145,14 @@ class Qualification(outputPath: String, numRows: Int, hadoopConf: Configuration, case _ => // No action needed for other cases } val startTime = System.currentTimeMillis() + // we need a platform per application because it's storing cluster information which could + // vary between applications, especially when using dynamic allocation + val platform = { + val clusterPropsOpt = AutoTuner.loadClusterProps(workerInfoPath) + PlatformFactory.createInstance(platformArg, clusterPropsOpt) + } val appResult = QualificationAppInfo.createApp(path, hadoopConf, pluginTypeChecker, - reportSqlLevel, mlOpsEnabled, penalizeTransitions) + reportSqlLevel, mlOpsEnabled, penalizeTransitions, platform) val qualAppResult = appResult match { case Left(FailureApp("skipped", errorMessage)) => // Case to be skipped, e.g. encountered Databricks Photon event log @@ -174,14 +181,14 @@ class Qualification(outputPath: String, numRows: Int, hadoopConf: Configuration, // Note that we call the autotuner anyway without checking the aggregate results // because the Autotuner can still make some recommendations based on the information // enclosed by the QualificationInfo object - tuner.tuneApplication(app, qualSumInfo, appIndex, dsInfo) + tuner.tuneApplication(app, qualSumInfo, appIndex, dsInfo, platform) } } if (qualSumInfo.isDefined) { // add the recommend cluster info into the summary val tempSummary = qualSumInfo.get val newClusterSummary = tempSummary.clusterSummary.copy( - recommendedClusterInfo = pluginTypeChecker.platform.recommendedClusterInfo) + recommendedClusterInfo = platform.recommendedClusterInfo) AppSubscriber.withSafeValidAttempt(app.appId, app.attemptId) { () => val newQualSummary = tempSummary.copy(clusterSummary = newClusterSummary) // check if the app is already in the map diff --git a/core/src/main/scala/com/nvidia/spark/rapids/tool/qualification/QualificationMain.scala b/core/src/main/scala/com/nvidia/spark/rapids/tool/qualification/QualificationMain.scala index 6ed646787..743f95de8 100644 --- a/core/src/main/scala/com/nvidia/spark/rapids/tool/qualification/QualificationMain.scala +++ b/core/src/main/scala/com/nvidia/spark/rapids/tool/qualification/QualificationMain.scala @@ -68,7 +68,13 @@ object QualificationMain extends Logging { val recursiveSearchEnabled = !appArgs.noRecursion() val hadoopConf = RapidsToolsConfUtil.newHadoopConf - val platform = try { + // Note we need the platform to get the correct files we use in the PluginTypeChecker. + // Here we create one dummy global one just to get those files as the platform should + // be the same for all applications but then later we create a per application one for + // properly tracking the cluster info and recommended cluster info per application. + // This platform instance should not be used for anything other then referencing the + // files for this particular Platform. + val referencePlatform = try { val clusterPropsOpt = loadClusterProps(appArgs.workerInfo()) PlatformFactory.createInstance(appArgs.platform(), clusterPropsOpt) } catch { @@ -79,7 +85,7 @@ object QualificationMain extends Logging { val pluginTypeChecker = try { new PluginTypeChecker( - platform, + referencePlatform, appArgs.speedupFactorFile.toOption) } catch { case ie: IllegalStateException => @@ -109,14 +115,14 @@ object QualificationMain extends Logging { } // create the AutoTuner context object val tunerContext = if (appArgs.autoTuner()) { - TunerContext(platform, appArgs.workerInfo(), outputDirectory, Option(hadoopConf)) + TunerContext(outputDirectory, Option(hadoopConf)) } else { None } val qual = new Qualification(outputDirectory, numOutputRows, hadoopConf, timeout, nThreads, order, pluginTypeChecker, reportReadSchema, printStdout, enablePB, reportSqlLevel, maxSQLDescLength, mlOpsEnabled, penalizeTransitions, - tunerContext, appArgs.clusterReport()) + tunerContext, appArgs.clusterReport(), appArgs.platform(), appArgs.workerInfo()) val res = qual.qualifyApps(filteredLogs) (0, res) } diff --git a/core/src/main/scala/com/nvidia/spark/rapids/tool/qualification/RunningQualificationApp.scala b/core/src/main/scala/com/nvidia/spark/rapids/tool/qualification/RunningQualificationApp.scala index 1c1e4e030..d18d584e3 100644 --- a/core/src/main/scala/com/nvidia/spark/rapids/tool/qualification/RunningQualificationApp.scala +++ b/core/src/main/scala/com/nvidia/spark/rapids/tool/qualification/RunningQualificationApp.scala @@ -16,6 +16,7 @@ package com.nvidia.spark.rapids.tool.qualification +import com.nvidia.spark.rapids.tool.{Platform, PlatformFactory} import com.nvidia.spark.rapids.tool.analysis.AppSQLPlanAnalyzer import com.nvidia.spark.rapids.tool.planparser.SQLPlanParser import com.nvidia.spark.rapids.tool.qualification.QualOutputWriter.SQL_DESC_STR @@ -71,8 +72,10 @@ import org.apache.spark.sql.rapids.tool.qualification._ */ class RunningQualificationApp( perSqlOnly: Boolean = false, - pluginTypeChecker: PluginTypeChecker = new PluginTypeChecker()) - extends QualificationAppInfo(None, None, pluginTypeChecker, reportSqlLevel=false, perSqlOnly) { + pluginTypeChecker: PluginTypeChecker = new PluginTypeChecker(), + platform: Platform = PlatformFactory.createInstance()) + extends QualificationAppInfo(None, None, pluginTypeChecker, reportSqlLevel=false, + perSqlOnly, platform = platform) { // note we don't use the per sql reporting providing by QualificationAppInfo so we always // send down false for it diff --git a/core/src/main/scala/com/nvidia/spark/rapids/tool/tuning/QualificationAutoTuner.scala b/core/src/main/scala/com/nvidia/spark/rapids/tool/tuning/QualificationAutoTuner.scala index 0bd6568fe..4344f0a5d 100644 --- a/core/src/main/scala/com/nvidia/spark/rapids/tool/tuning/QualificationAutoTuner.scala +++ b/core/src/main/scala/com/nvidia/spark/rapids/tool/tuning/QualificationAutoTuner.scala @@ -18,7 +18,7 @@ package com.nvidia.spark.rapids.tool.tuning import scala.util.{Failure, Success, Try} -import com.nvidia.spark.rapids.tool.{AppSummaryInfoBaseProvider, ToolTextFileWriter} +import com.nvidia.spark.rapids.tool.{AppSummaryInfoBaseProvider, Platform, ToolTextFileWriter} import com.nvidia.spark.rapids.tool.analysis.AggRawMetricsResult import com.nvidia.spark.rapids.tool.profiling.{AutoTuner, DataSourceProfileResult, Profiler} import org.apache.hadoop.conf.Configuration @@ -64,9 +64,8 @@ class QualificationAutoTuner(val appInfoProvider: QualAppSummaryInfoProvider, } } - def runAutoTuner(): TuningResult = { - val autoTuner: AutoTuner = AutoTuner.buildAutoTuner( - tunerContext.workerInfoPath, appInfoProvider, tunerContext.platform) + def runAutoTuner(platform: Platform): TuningResult = { + val autoTuner: AutoTuner = AutoTuner.buildAutoTuner(appInfoProvider, platform) val (recommendations, comments) = autoTuner.getRecommendedProperties(showOnlyUpdatedProps = filterByUpdatedPropsEnabled) // Combine the GPU recommendations with all others. diff --git a/core/src/main/scala/com/nvidia/spark/rapids/tool/tuning/TunerContext.scala b/core/src/main/scala/com/nvidia/spark/rapids/tool/tuning/TunerContext.scala index 55e72d5c7..c795d0434 100644 --- a/core/src/main/scala/com/nvidia/spark/rapids/tool/tuning/TunerContext.scala +++ b/core/src/main/scala/com/nvidia/spark/rapids/tool/tuning/TunerContext.scala @@ -36,14 +36,10 @@ case class TuningResult( /** * Container which holds metadata and arguments specific to the execution of the AutoTuner. * TODO: we need to use the same class in constructing the AutoTuner in the Profiling tools. - * @param platform object representing the host platform on which the application was executed. - * @param workerInfoPath the path of the GPU workers * @param outputRootDir the output directory to dump the recommendation/comments. * @param hadoopConf optional configuration to access the remote storage. */ case class TunerContext ( - platform: Platform, - workerInfoPath: String, outputRootDir: String, hadoopConf: Configuration) extends Logging { @@ -55,12 +51,13 @@ case class TunerContext ( appInfo: QualificationAppInfo, appAggStats: Option[QualificationSummaryInfo], appIndex: Int = 1, - dsInfo: Seq[DataSourceProfileResult]): Option[TuningResult] = { + dsInfo: Seq[DataSourceProfileResult], + platform: Platform): Option[TuningResult] = { val rawAggMetrics = QualSparkMetricsAnalyzer.getAggRawMetrics(appInfo, appIndex) QualificationAutoTuner(appInfo, appAggStats, this, rawAggMetrics, dsInfo).collect { case qualTuner => Try { - qualTuner.runAutoTuner() + qualTuner.runAutoTuner(platform) } match { case Success(r) => r case Failure(e) => @@ -72,13 +69,12 @@ case class TunerContext ( } object TunerContext extends Logging { - def apply(platform: Platform, - workerInfoPath: String, + def apply( outputRootDir: String, hadoopConf: Option[Configuration] = None): Option[TunerContext] = { Try { val hConf = hadoopConf.getOrElse(RapidsToolsConfUtil.newHadoopConf()) - TunerContext(platform, workerInfoPath, outputRootDir, hConf) + TunerContext(outputRootDir, hConf) } match { case Success(c) => Some(c) case Failure(e) => diff --git a/core/src/main/scala/org/apache/spark/sql/rapids/tool/AppBase.scala b/core/src/main/scala/org/apache/spark/sql/rapids/tool/AppBase.scala index 787d6c4ec..e3313b832 100644 --- a/core/src/main/scala/org/apache/spark/sql/rapids/tool/AppBase.scala +++ b/core/src/main/scala/org/apache/spark/sql/rapids/tool/AppBase.scala @@ -56,6 +56,13 @@ abstract class AppBase( lazy val attemptId: Int = appMetaData.map(_.attemptId).getOrElse(1) + // This is to keep track of the high water mark for maximum number of executors + // active at any point in time. + // Dynamic allocation and failures could change the number of + // executors over time so we are tracking what was the maximum used. + var maxNumExecutorsRunning = 0 + // high water mark for maximum number of nodes in use at any point in time + var maxNumNodesRunning = 0 // Store map of executorId to executor info val executorIdToInfo = new HashMap[String, ExecutorInfoClass]() // resourceProfile id to resource profile info @@ -198,6 +205,25 @@ abstract class AppBase( }) } + // this is to keep track of the high water mark for number of executors + // active at anyone instant in time + def updateMaxExecutors(): Unit = { + val numActiveExecutors = executorIdToInfo.values.filter(_.isActive).size + if (numActiveExecutors > maxNumExecutorsRunning) { + maxNumExecutorsRunning = numActiveExecutors + } + } + + // this is to keep track of the high water mark for number of nodes + // active at anyone instant in time + def updateMaxNodes(): Unit = { + // make this a set to make it dedup nodes + val numActiveNodes = executorIdToInfo.values.filter(_.isActive).map(_.host).toSet.size + if (numActiveNodes > maxNumNodesRunning) { + maxNumNodesRunning = numActiveNodes + } + } + def getOrCreateStage(info: StageInfo): StageModel = { val stage = stageManager.addStageInfo(info) stage diff --git a/core/src/main/scala/org/apache/spark/sql/rapids/tool/ClassWarehouse.scala b/core/src/main/scala/org/apache/spark/sql/rapids/tool/ClassWarehouse.scala index e6451862f..b4dc0bc43 100644 --- a/core/src/main/scala/org/apache/spark/sql/rapids/tool/ClassWarehouse.scala +++ b/core/src/main/scala/org/apache/spark/sql/rapids/tool/ClassWarehouse.scala @@ -55,8 +55,13 @@ case class ExistingClusterInfo( vendor: String, coresPerExecutor: Int, numExecsPerNode: Int, + numExecutors: Int, // note that with dynamic allocation this is high water mark numWorkerNodes: Int, executorHeapMemory: Long, + dynamicAllocationEnabled: Boolean, + dynamicAllocationMaxExecutors: String, + dynamicAllocationMinExecutors: String, + dynamicAllocationInitialExecutors: String, driverNodeType: Option[String] = None, workerNodeType: Option[String] = None, driverHost: Option[String] = None, @@ -70,6 +75,10 @@ case class RecommendedClusterInfo( numGpus: Int, numExecutors: Int, gpuDevice: String, + dynamicAllocationEnabled: Boolean, + dynamicAllocationMaxExecutors: String, + dynamicAllocationMinExecutors: String, + dynamicAllocationInitialExecutors: String, driverNodeType: Option[String] = None, workerNodeType: Option[String] = None) extends ClusterInfo { // The number of executors per node is the same as the number of GPUs diff --git a/core/src/main/scala/org/apache/spark/sql/rapids/tool/EventProcessorBase.scala b/core/src/main/scala/org/apache/spark/sql/rapids/tool/EventProcessorBase.scala index 4620a640d..b4dc8ce3f 100644 --- a/core/src/main/scala/org/apache/spark/sql/rapids/tool/EventProcessorBase.scala +++ b/core/src/main/scala/org/apache/spark/sql/rapids/tool/EventProcessorBase.scala @@ -331,6 +331,9 @@ abstract class EventProcessorBase[T <: AppBase](app: T) extends SparkListener wi val rpId = event.executorInfo.resourceProfileId exec.resources = event.executorInfo.resourcesInfo exec.resourceProfileId = rpId + // make sure updateMaxExecutorsIfNeeded is called after added executor information + app.updateMaxExecutors() + app.updateMaxNodes() } override def onExecutorAdded(executorAdded: SparkListenerExecutorAdded): Unit = { diff --git a/core/src/main/scala/org/apache/spark/sql/rapids/tool/qualification/QualificationAppInfo.scala b/core/src/main/scala/org/apache/spark/sql/rapids/tool/qualification/QualificationAppInfo.scala index d0bce04f2..2b01f4fef 100644 --- a/core/src/main/scala/org/apache/spark/sql/rapids/tool/qualification/QualificationAppInfo.scala +++ b/core/src/main/scala/org/apache/spark/sql/rapids/tool/qualification/QualificationAppInfo.scala @@ -19,7 +19,7 @@ package org.apache.spark.sql.rapids.tool.qualification import scala.collection.mutable.{ArrayBuffer, HashMap} import scala.collection.mutable -import com.nvidia.spark.rapids.tool.EventLogInfo +import com.nvidia.spark.rapids.tool.{EventLogInfo, Platform} import com.nvidia.spark.rapids.tool.planparser.{ExecInfo, PlanInfo, SQLPlanParser} import com.nvidia.spark.rapids.tool.qualification._ import com.nvidia.spark.rapids.tool.qualification.QualOutputWriter.DEFAULT_JOB_FREQUENCY @@ -39,7 +39,8 @@ class QualificationAppInfo( reportSqlLevel: Boolean, val perSqlOnly: Boolean = false, mlOpsEnabled: Boolean = false, - penalizeTransitions: Boolean = true) + penalizeTransitions: Boolean = true, + platform: Platform) extends AppBase(eventLogInfo, hadoopConf) with Logging { var lastJobEndTime: Option[Long] = None @@ -66,7 +67,7 @@ class QualificationAppInfo( * any additional properties based on platform. */ override def getRetainedSystemProps: Set[String] = - super.getRetainedSystemProps ++ pluginTypeChecker.platform.getRetainedSystemProps + super.getRetainedSystemProps ++ platform.getRetainedSystemProps /** * Get the event listener the qualification tool uses to process Spark events. @@ -631,7 +632,7 @@ class QualificationAppInfo( mlFuncReportInfo.mlWallClockDur, unSupportedExecs, unSupportedExprs, allClusterTagsMap) val clusterSummary = ClusterSummary(info.appName, appId, - eventLogInfo.map(_.eventLog.toString), pluginTypeChecker.platform.clusterInfoFromEventLog, + eventLogInfo.map(_.eventLog.toString), platform.clusterInfoFromEventLog, None) QualificationSummaryInfo(info.appName, appId, problems, @@ -848,33 +849,33 @@ class QualificationAppInfo( * and extracts executor and driver instance types (databricks only) */ override def buildClusterInfo: Unit = { - // TODO: Handle dynamic allocation when determining the number of nodes. - sparkProperties.get("spark.dynamicAllocation.enabled").foreach { value => - if (value.toBoolean) { - logWarning(s"Application $appId: Dynamic allocation is not supported. " + - s"Cluster information may be inaccurate.") - } - } // try to figure out number of executors per node based on the executor info // Group by host name, find max executors per host val execsPerNodeList = executorIdToInfo.values.groupBy(_.host).mapValues(_.size).values - val numExecsPerNode = execsPerNodeList.reduceOption(_ max _).getOrElse(0) - val activeExecInfo = executorIdToInfo.values.collect { - case execInfo if execInfo.isActive => (execInfo.host, execInfo.totalCores) + // if we have different number of execs per node, then we blank it out to indicate + // not applicable (like when dynamic allocation is on in multi-tenant cluster) + // Since with dynamic allocation you could end up with more executors on a node then it + // has slots, just always set numExecsPerNode to -1 when its enabled. + val dynamicAllocEnabled = Platform.isDynamicAllocationEnabled(sparkProperties) + val numExecsPerNode = if (!dynamicAllocEnabled && execsPerNodeList.size > 0 && + execsPerNodeList.forall(_ == execsPerNodeList.head)) { + execsPerNodeList.head + } else { + -1 } - if (activeExecInfo.nonEmpty) { - val (activeHosts, coresPerExecutor) = activeExecInfo.unzip - if (coresPerExecutor.toSet.size != 1) { + val execCoreCounts = executorIdToInfo.values.map(_.totalCores) + if (execCoreCounts.size > 0) { + if (execCoreCounts.toSet.size != 1) { logWarning(s"Application $appId: Cluster with variable executor cores detected. " + s"Using maximum value.") } // Create cluster information based on platform type - pluginTypeChecker.platform.configureClusterInfoFromEventLog(coresPerExecutor.max, - numExecsPerNode, activeHosts.toSet.size, sparkProperties, systemProperties) + platform.configureClusterInfoFromEventLog(execCoreCounts.max, + numExecsPerNode, maxNumExecutorsRunning, maxNumNodesRunning, + sparkProperties, systemProperties) } else { - // if no executors do we want to qualify at all? maybe not, else we could look at - // properties like spark.executor.cores - logWarning("Active executor info is empty so can't build existing cluster information!") + logWarning("Could not determine if any executors were allocated or the number of cores " + + "used per executor. Can't build existing cluster information!") } } @@ -1096,10 +1097,11 @@ object QualificationAppInfo extends Logging { pluginTypeChecker: PluginTypeChecker, reportSqlLevel: Boolean, mlOpsEnabled: Boolean, - penalizeTransitions: Boolean): Either[FailureApp, QualificationAppInfo] = { + penalizeTransitions: Boolean, + platform: Platform): Either[FailureApp, QualificationAppInfo] = { try { val app = new QualificationAppInfo(Some(path), Some(hadoopConf), pluginTypeChecker, - reportSqlLevel, false, mlOpsEnabled, penalizeTransitions) + reportSqlLevel, false, mlOpsEnabled, penalizeTransitions, platform) if (!app.isAppMetaDefined) { throw IncorrectAppStatusException() } diff --git a/core/src/test/resources/spark-events-qualification/cluster_information/eventlog_4nodes_8cores_dynamic_alloc b/core/src/test/resources/spark-events-qualification/cluster_information/eventlog_4nodes_8cores_dynamic_alloc deleted file mode 100644 index 08f85c3b4..000000000 --- a/core/src/test/resources/spark-events-qualification/cluster_information/eventlog_4nodes_8cores_dynamic_alloc +++ /dev/null @@ -1,42 +0,0 @@ -{"Event":"SparkListenerLogStart","Spark Version":"3.1.3"} -{"Event":"SparkListenerResourceProfileAdded","Resource Profile Id":0,"Executor Resource Requests":{"cores":{"Resource Name":"cores","Amount":8,"Discovery Script":"","Vendor":""},"memory":{"Resource Name":"memory","Amount":26742,"Discovery Script":"","Vendor":""},"offHeap":{"Resource Name":"offHeap","Amount":0,"Discovery Script":"","Vendor":""}},"Task Resource Requests":{"cpus":{"Resource Name":"cpus","Amount":1.0}}} -{"Event":"SparkListenerBlockManagerAdded","Block Manager ID":{"Executor ID":"driver","Host":"test-cpu-cluster-m","Port":43705},"Maximum Memory":8401295769,"Timestamp":1718390704685,"Maximum Onheap Memory":8401295769,"Maximum Offheap Memory":0} -{"Event":"SparkListenerEnvironmentUpdate","JVM Information":{"Java Home":"/usr/lib/jvm/java-8-openjdk-amd64/jre","Java Version":"1.8.0_312 (Private Build)","Scala Version":"version 2.12.10"},"Spark Properties":{"spark.driver.host":"test-cpu-cluster-m","spark.eventLog.enabled":"true","spark.driver.port":"41345","spark.repl.class.uri":"spark://test-cpu-cluster-m:41345/classes","spark.jars":"","spark.repl.class.outputDir":"/tmp/spark-7f3a4b49-f48c-4e53-8ea3-a16861c74338/repl-01d6fffe-ba55-49e7-afdb-bbf08996d7f1","spark.app.name":"Spark shell","spark.scheduler.mode":"FIFO","spark.submit.pyFiles":"","spark.ui.showConsoleProgress":"true","spark.app.startTime":"1651187224195","spark.executor.id":"driver","spark.submit.deployMode":"client","spark.master":"local[*]","spark.home":"/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2","spark.eventLog.dir":"/home/user1/new_eventlogs","spark.sql.catalogImplementation":"hive","spark.app.id":"local-1651187225439"},"Hadoop Properties":{"hadoop.service.shutdown.timeout":"30s","yarn.resourcemanager.amlauncher.thread-count":"50","yarn.sharedcache.enabled":"false","fs.s3a.connection.maximum":"15","yarn.nodemanager.numa-awareness.numactl.cmd":"/usr/bin/numactl","fs.s3a.impl":"org.apache.hadoop.fs.s3a.S3AFileSystem","yarn.app.mapreduce.am.scheduler.heartbeat.interval-ms":"1000","yarn.timeline-service.timeline-client.number-of-async-entities-to-merge":"10","hadoop.security.kms.client.timeout":"60","hadoop.http.authentication.kerberos.principal":"HTTP/_HOST@LOCALHOST","mapreduce.jobhistory.loadedjob.tasks.max":"-1","mapreduce.framework.name":"local","yarn.sharedcache.uploader.server.thread-count":"50","yarn.nodemanager.linux-container-executor.nonsecure-mode.user-pattern":"^[_.A-Za-z0-9][-@_.A-Za-z0-9]{0,255}?[$]?$","tfile.fs.output.buffer.size":"262144","yarn.app.mapreduce.am.job.task.listener.thread-count":"30","hadoop.security.groups.cache.background.reload.threads":"3","yarn.resourcemanager.webapp.cross-origin.enabled":"false","fs.AbstractFileSystem.ftp.impl":"org.apache.hadoop.fs.ftp.FtpFs","hadoop.registry.secure":"false","hadoop.shell.safely.delete.limit.num.files":"100","dfs.bytes-per-checksum":"512","mapreduce.job.acl-view-job":" ","fs.s3a.s3guard.ddb.background.sleep":"25ms","fs.s3a.retry.limit":"${fs.s3a.attempts.maximum}","mapreduce.jobhistory.loadedjobs.cache.size":"5","fs.s3a.s3guard.ddb.table.create":"false","yarn.nodemanager.amrmproxy.enabled":"false","yarn.timeline-service.entity-group-fs-store.with-user-dir":"false","mapreduce.input.fileinputformat.split.minsize":"0","yarn.resourcemanager.container.liveness-monitor.interval-ms":"600000","yarn.resourcemanager.client.thread-count":"50","io.seqfile.compress.blocksize":"1000000","yarn.sharedcache.checksum.algo.impl":"org.apache.hadoop.yarn.sharedcache.ChecksumSHA256Impl","yarn.nodemanager.amrmproxy.interceptor-class.pipeline":"org.apache.hadoop.yarn.server.nodemanager.amrmproxy.DefaultRequestInterceptor","yarn.timeline-service.entity-group-fs-store.leveldb-cache-read-cache-size":"10485760","mapreduce.reduce.shuffle.fetch.retry.interval-ms":"1000","mapreduce.task.profile.maps":"0-2","yarn.scheduler.include-port-in-node-name":"false","yarn.nodemanager.admin-env":"MALLOC_ARENA_MAX=$MALLOC_ARENA_MAX","yarn.resourcemanager.node-removal-untracked.timeout-ms":"60000","mapreduce.am.max-attempts":"2","hadoop.security.kms.client.failover.sleep.base.millis":"100","mapreduce.jobhistory.webapp.https.address":"0.0.0.0:19890","yarn.node-labels.fs-store.impl.class":"org.apache.hadoop.yarn.nodelabels.FileSystemNodeLabelsStore","yarn.nodemanager.collector-service.address":"${yarn.nodemanager.hostname}:8048","fs.trash.checkpoint.interval":"0","mapreduce.job.map.output.collector.class":"org.apache.hadoop.mapred.MapTask$MapOutputBuffer","yarn.resourcemanager.node-ip-cache.expiry-interval-secs":"-1","hadoop.http.authentication.signature.secret.file":"*********(redacted)","hadoop.jetty.logs.serve.aliases":"true","yarn.resourcemanager.placement-constraints.handler":"disabled","yarn.timeline-service.handler-thread-count":"10","yarn.resourcemanager.max-completed-applications":"1000","yarn.resourcemanager.system-metrics-publisher.enabled":"false","yarn.resourcemanager.placement-constraints.algorithm.class":"org.apache.hadoop.yarn.server.resourcemanager.scheduler.constraint.algorithm.DefaultPlacementAlgorithm","yarn.sharedcache.webapp.address":"0.0.0.0:8788","yarn.resourcemanager.delegation.token.renew-interval":"*********(redacted)","yarn.sharedcache.nm.uploader.replication.factor":"10","hadoop.security.groups.negative-cache.secs":"30","yarn.app.mapreduce.task.container.log.backups":"0","mapreduce.reduce.skip.proc-count.auto-incr":"true","hadoop.security.group.mapping.ldap.posix.attr.gid.name":"gidNumber","ipc.client.fallback-to-simple-auth-allowed":"false","yarn.nodemanager.resource.memory.enforced":"true","yarn.client.failover-proxy-provider":"org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider","yarn.timeline-service.http-authentication.simple.anonymous.allowed":"true","ha.health-monitor.check-interval.ms":"1000","yarn.acl.reservation-enable":"false","yarn.resourcemanager.store.class":"org.apache.hadoop.yarn.server.resourcemanager.recovery.FileSystemRMStateStore","yarn.app.mapreduce.am.hard-kill-timeout-ms":"10000","fs.s3a.etag.checksum.enabled":"false","yarn.nodemanager.container-metrics.enable":"true","yarn.timeline-service.client.fd-clean-interval-secs":"60","yarn.resourcemanager.nodemanagers.heartbeat-interval-ms":"1000","hadoop.common.configuration.version":"3.0.0","fs.s3a.s3guard.ddb.table.capacity.read":"500","yarn.nodemanager.remote-app-log-dir-suffix":"logs","yarn.nodemanager.windows-container.cpu-limit.enabled":"false","yarn.nodemanager.runtime.linux.docker.privileged-containers.allowed":"false","file.blocksize":"67108864","hadoop.registry.zk.retry.ceiling.ms":"60000","yarn.scheduler.configuration.leveldb-store.path":"${hadoop.tmp.dir}/yarn/system/confstore","yarn.sharedcache.store.in-memory.initial-delay-mins":"10","mapreduce.jobhistory.principal":"jhs/_HOST@REALM.TLD","mapreduce.map.skip.proc-count.auto-incr":"true","fs.s3a.committer.name":"file","mapreduce.task.profile.reduces":"0-2","hadoop.zk.num-retries":"1000","yarn.webapp.xfs-filter.enabled":"true","seq.io.sort.mb":"100","yarn.scheduler.configuration.max.version":"100","yarn.timeline-service.webapp.https.address":"${yarn.timeline-service.hostname}:8190","yarn.resourcemanager.scheduler.address":"${yarn.resourcemanager.hostname}:8030","yarn.node-labels.enabled":"false","yarn.resourcemanager.webapp.ui-actions.enabled":"true","mapreduce.task.timeout":"600000","yarn.sharedcache.client-server.thread-count":"50","hadoop.security.groups.shell.command.timeout":"0s","hadoop.security.crypto.cipher.suite":"AES/CTR/NoPadding","yarn.nodemanager.elastic-memory-control.oom-handler":"org.apache.hadoop.yarn.server.nodemanager.containermanager.linux.resources.DefaultOOMHandler","yarn.resourcemanager.connect.max-wait.ms":"900000","fs.defaultFS":"file:///","yarn.minicluster.use-rpc":"false","fs.har.impl.disable.cache":"true","yarn.webapp.ui2.enable":"false","io.compression.codec.bzip2.library":"system-native","yarn.nodemanager.distributed-scheduling.enabled":"false","mapreduce.shuffle.connection-keep-alive.timeout":"5","yarn.resourcemanager.webapp.https.address":"${yarn.resourcemanager.hostname}:8090","mapreduce.jobhistory.address":"0.0.0.0:10020","yarn.resourcemanager.nm-tokens.master-key-rolling-interval-secs":"*********(redacted)","yarn.is.minicluster":"false","yarn.nodemanager.address":"${yarn.nodemanager.hostname}:0","fs.abfss.impl":"org.apache.hadoop.fs.azurebfs.SecureAzureBlobFileSystem","fs.AbstractFileSystem.s3a.impl":"org.apache.hadoop.fs.s3a.S3A","mapreduce.task.combine.progress.records":"10000","yarn.resourcemanager.epoch.range":"0","yarn.resourcemanager.am.max-attempts":"2","yarn.nodemanager.linux-container-executor.cgroups.hierarchy":"/hadoop-yarn","fs.AbstractFileSystem.wasbs.impl":"org.apache.hadoop.fs.azure.Wasbs","yarn.timeline-service.entity-group-fs-store.cache-store-class":"org.apache.hadoop.yarn.server.timeline.MemoryTimelineStore","fs.ftp.transfer.mode":"BLOCK_TRANSFER_MODE","ipc.server.log.slow.rpc":"false","yarn.resourcemanager.node-labels.provider.fetch-interval-ms":"1800000","yarn.router.webapp.https.address":"0.0.0.0:8091","yarn.nodemanager.webapp.cross-origin.enabled":"false","fs.wasb.impl":"org.apache.hadoop.fs.azure.NativeAzureFileSystem","yarn.resourcemanager.auto-update.containers":"false","yarn.app.mapreduce.am.job.committer.cancel-timeout":"60000","yarn.scheduler.configuration.zk-store.parent-path":"/confstore","yarn.nodemanager.default-container-executor.log-dirs.permissions":"710","yarn.app.attempt.diagnostics.limit.kc":"64","ftp.bytes-per-checksum":"512","yarn.nodemanager.resource.memory-mb":"-1","fs.AbstractFileSystem.abfs.impl":"org.apache.hadoop.fs.azurebfs.Abfs","yarn.timeline-service.writer.flush-interval-seconds":"60","fs.s3a.fast.upload.active.blocks":"4","hadoop.security.credential.clear-text-fallback":"true","yarn.nodemanager.collector-service.thread-count":"5","fs.azure.secure.mode":"false","mapreduce.jobhistory.joblist.cache.size":"20000","fs.ftp.host":"0.0.0.0","yarn.resourcemanager.fs.state-store.num-retries":"0","yarn.resourcemanager.nodemanager-connect-retries":"10","yarn.nodemanager.log-aggregation.num-log-files-per-app":"30","hadoop.security.kms.client.encrypted.key.cache.low-watermark":"0.3f","fs.s3a.committer.magic.enabled":"false","yarn.timeline-service.client.max-retries":"30","dfs.ha.fencing.ssh.connect-timeout":"30000","yarn.log-aggregation-enable":"false","yarn.system-metrics-publisher.enabled":"false","mapreduce.reduce.markreset.buffer.percent":"0.0","fs.AbstractFileSystem.viewfs.impl":"org.apache.hadoop.fs.viewfs.ViewFs","mapreduce.task.io.sort.factor":"10","yarn.nodemanager.amrmproxy.client.thread-count":"25","ha.failover-controller.new-active.rpc-timeout.ms":"60000","yarn.nodemanager.container-localizer.java.opts":"-Xmx256m","mapreduce.jobhistory.datestring.cache.size":"200000","mapreduce.job.acl-modify-job":" ","yarn.nodemanager.windows-container.memory-limit.enabled":"false","yarn.timeline-service.webapp.address":"${yarn.timeline-service.hostname}:8188","yarn.app.mapreduce.am.job.committer.commit-window":"10000","yarn.nodemanager.container-manager.thread-count":"20","yarn.minicluster.fixed.ports":"false","hadoop.tags.system":"YARN,HDFS,NAMENODE,DATANODE,REQUIRED,SECURITY,KERBEROS,PERFORMANCE,CLIENT\n ,SERVER,DEBUG,DEPRECATED,COMMON,OPTIONAL","yarn.cluster.max-application-priority":"0","yarn.timeline-service.ttl-enable":"true","mapreduce.jobhistory.recovery.store.fs.uri":"${hadoop.tmp.dir}/mapred/history/recoverystore","hadoop.caller.context.signature.max.size":"40","yarn.client.load.resource-types.from-server":"false","ha.zookeeper.session-timeout.ms":"10000","tfile.io.chunk.size":"1048576","fs.s3a.s3guard.ddb.table.capacity.write":"100","mapreduce.job.speculative.slowtaskthreshold":"1.0","io.serializations":"org.apache.hadoop.io.serializer.WritableSerialization, org.apache.hadoop.io.serializer.avro.AvroSpecificSerialization, org.apache.hadoop.io.serializer.avro.AvroReflectSerialization","hadoop.security.kms.client.failover.sleep.max.millis":"2000","hadoop.security.group.mapping.ldap.directory.search.timeout":"10000","yarn.scheduler.configuration.store.max-logs":"1000","yarn.nodemanager.node-attributes.provider.fetch-interval-ms":"600000","fs.swift.impl":"org.apache.hadoop.fs.swift.snative.SwiftNativeFileSystem","yarn.nodemanager.local-cache.max-files-per-directory":"8192","hadoop.http.cross-origin.enabled":"false","hadoop.zk.acl":"world:anyone:rwcda","mapreduce.map.sort.spill.percent":"0.80","yarn.timeline-service.entity-group-fs-store.scan-interval-seconds":"60","yarn.node-attribute.fs-store.impl.class":"org.apache.hadoop.yarn.server.resourcemanager.nodelabels.FileSystemNodeAttributeStore","fs.s3a.retry.interval":"500ms","yarn.timeline-service.client.best-effort":"false","yarn.resourcemanager.webapp.delegation-token-auth-filter.enabled":"*********(redacted)","hadoop.security.group.mapping.ldap.posix.attr.uid.name":"uidNumber","fs.AbstractFileSystem.swebhdfs.impl":"org.apache.hadoop.fs.SWebHdfs","yarn.nodemanager.elastic-memory-control.timeout-sec":"5","mapreduce.ifile.readahead":"true","yarn.timeline-service.leveldb-timeline-store.ttl-interval-ms":"300000","yarn.timeline-service.reader.webapp.address":"${yarn.timeline-service.webapp.address}","yarn.resourcemanager.placement-constraints.algorithm.pool-size":"1","yarn.timeline-service.hbase.coprocessor.jar.hdfs.location":"/hbase/coprocessor/hadoop-yarn-server-timelineservice.jar","hadoop.security.kms.client.encrypted.key.cache.num.refill.threads":"2","yarn.resourcemanager.scheduler.class":"org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler","yarn.app.mapreduce.am.command-opts":"-Xmx1024m","mapreduce.cluster.local.dir":"${hadoop.tmp.dir}/mapred/local","io.mapfile.bloom.error.rate":"0.005","fs.client.resolve.topology.enabled":"false","yarn.nodemanager.runtime.linux.allowed-runtimes":"default","yarn.sharedcache.store.class":"org.apache.hadoop.yarn.server.sharedcachemanager.store.InMemorySCMStore","ha.failover-controller.graceful-fence.rpc-timeout.ms":"5000","ftp.replication":"3","hadoop.security.uid.cache.secs":"14400","mapreduce.job.maxtaskfailures.per.tracker":"3","fs.s3a.metadatastore.impl":"org.apache.hadoop.fs.s3a.s3guard.NullMetadataStore","io.skip.checksum.errors":"false","yarn.app.mapreduce.client-am.ipc.max-retries-on-timeouts":"3","yarn.timeline-service.webapp.xfs-filter.xframe-options":"SAMEORIGIN","fs.s3a.connection.timeout":"200000","mapreduce.job.max.split.locations":"15","yarn.resourcemanager.nm-container-queuing.max-queue-length":"15","hadoop.registry.zk.session.timeout.ms":"60000","yarn.federation.cache-ttl.secs":"300","mapreduce.jvm.system-properties-to-log":"os.name,os.version,java.home,java.runtime.version,java.vendor,java.version,java.vm.name,java.class.path,java.io.tmpdir,user.dir,user.name","yarn.resourcemanager.opportunistic-container-allocation.nodes-used":"10","yarn.timeline-service.entity-group-fs-store.active-dir":"/tmp/entity-file-history/active","mapreduce.shuffle.transfer.buffer.size":"131072","yarn.timeline-service.client.retry-interval-ms":"1000","yarn.http.policy":"HTTP_ONLY","fs.s3a.socket.send.buffer":"8192","fs.AbstractFileSystem.abfss.impl":"org.apache.hadoop.fs.azurebfs.Abfss","yarn.sharedcache.uploader.server.address":"0.0.0.0:8046","yarn.resourcemanager.delegation-token.max-conf-size-bytes":"*********(redacted)","hadoop.http.authentication.token.validity":"*********(redacted)","mapreduce.shuffle.max.connections":"0","yarn.minicluster.yarn.nodemanager.resource.memory-mb":"4096","mapreduce.job.emit-timeline-data":"false","yarn.nodemanager.resource.system-reserved-memory-mb":"-1","hadoop.kerberos.min.seconds.before.relogin":"60","mapreduce.jobhistory.move.thread-count":"3","yarn.resourcemanager.admin.client.thread-count":"1","yarn.dispatcher.drain-events.timeout":"300000","fs.s3a.buffer.dir":"${hadoop.tmp.dir}/s3a","hadoop.ssl.enabled.protocols":"TLSv1,SSLv2Hello,TLSv1.1,TLSv1.2","mapreduce.jobhistory.admin.address":"0.0.0.0:10033","yarn.log-aggregation-status.time-out.ms":"600000","fs.s3a.assumed.role.sts.endpoint.region":"us-west-1","mapreduce.shuffle.port":"13562","yarn.resourcemanager.max-log-aggregation-diagnostics-in-memory":"10","yarn.nodemanager.health-checker.interval-ms":"600000","yarn.router.clientrm.interceptor-class.pipeline":"org.apache.hadoop.yarn.server.router.clientrm.DefaultClientRequestInterceptor","yarn.resourcemanager.zk-appid-node.split-index":"0","ftp.blocksize":"67108864","yarn.nodemanager.runtime.linux.sandbox-mode.local-dirs.permissions":"read","yarn.router.rmadmin.interceptor-class.pipeline":"org.apache.hadoop.yarn.server.router.rmadmin.DefaultRMAdminRequestInterceptor","yarn.nodemanager.log-container-debug-info.enabled":"true","yarn.client.max-cached-nodemanagers-proxies":"0","yarn.nodemanager.linux-container-executor.cgroups.delete-delay-ms":"20","yarn.nodemanager.delete.debug-delay-sec":"0","yarn.nodemanager.pmem-check-enabled":"true","yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage":"90.0","mapreduce.app-submission.cross-platform":"false","yarn.resourcemanager.work-preserving-recovery.scheduling-wait-ms":"10000","yarn.nodemanager.container-retry-minimum-interval-ms":"1000","hadoop.security.groups.cache.secs":"300","yarn.federation.enabled":"false","fs.azure.local.sas.key.mode":"false","ipc.maximum.data.length":"67108864","mapreduce.shuffle.max.threads":"0","yarn.router.pipeline.cache-max-size":"25","yarn.resourcemanager.nm-container-queuing.load-comparator":"QUEUE_LENGTH","hadoop.security.authorization":"false","mapreduce.job.complete.cancel.delegation.tokens":"*********(redacted)","fs.s3a.paging.maximum":"5000","nfs.exports.allowed.hosts":"* rw","yarn.nodemanager.amrmproxy.ha.enable":"false","mapreduce.jobhistory.http.policy":"HTTP_ONLY","yarn.sharedcache.store.in-memory.check-period-mins":"720","hadoop.security.group.mapping.ldap.ssl":"false","yarn.client.application-client-protocol.poll-interval-ms":"200","yarn.scheduler.configuration.leveldb-store.compaction-interval-secs":"86400","yarn.timeline-service.writer.class":"org.apache.hadoop.yarn.server.timelineservice.storage.HBaseTimelineWriterImpl","ha.zookeeper.parent-znode":"/hadoop-ha","yarn.nodemanager.log-aggregation.policy.class":"org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.AllContainerLogAggregationPolicy","mapreduce.reduce.shuffle.merge.percent":"0.66","hadoop.security.group.mapping.ldap.search.filter.group":"(objectClass=group)","yarn.resourcemanager.placement-constraints.scheduler.pool-size":"1","yarn.nodemanager.resourcemanager.minimum.version":"NONE","mapreduce.job.speculative.speculative-cap-running-tasks":"0.1","yarn.admin.acl":"*","yarn.nodemanager.recovery.supervised":"false","yarn.sharedcache.admin.thread-count":"1","yarn.resourcemanager.ha.automatic-failover.enabled":"true","mapreduce.reduce.skip.maxgroups":"0","mapreduce.reduce.shuffle.connect.timeout":"180000","yarn.resourcemanager.address":"${yarn.resourcemanager.hostname}:8032","ipc.client.ping":"true","mapreduce.task.local-fs.write-limit.bytes":"-1","fs.adl.oauth2.access.token.provider.type":"*********(redacted)","mapreduce.shuffle.ssl.file.buffer.size":"65536","yarn.resourcemanager.ha.automatic-failover.embedded":"true","yarn.nodemanager.resource-plugins.gpu.docker-plugin":"nvidia-docker-v1","hadoop.ssl.enabled":"false","fs.s3a.multipart.purge":"false","yarn.scheduler.configuration.store.class":"file","yarn.resourcemanager.nm-container-queuing.queue-limit-stdev":"1.0f","mapreduce.job.end-notification.max.attempts":"5","mapreduce.output.fileoutputformat.compress.codec":"org.apache.hadoop.io.compress.DefaultCodec","yarn.nodemanager.container-monitor.procfs-tree.smaps-based-rss.enabled":"false","ipc.client.bind.wildcard.addr":"false","yarn.resourcemanager.webapp.rest-csrf.enabled":"false","ha.health-monitor.connect-retry-interval.ms":"1000","yarn.nodemanager.keytab":"/etc/krb5.keytab","mapreduce.jobhistory.keytab":"/etc/security/keytab/jhs.service.keytab","fs.s3a.threads.max":"10","mapreduce.reduce.shuffle.input.buffer.percent":"0.70","yarn.nodemanager.runtime.linux.docker.allowed-container-networks":"host,none,bridge","yarn.nodemanager.node-labels.resync-interval-ms":"120000","hadoop.tmp.dir":"/tmp/hadoop-${user.name}","mapreduce.job.maps":"2","mapreduce.jobhistory.webapp.rest-csrf.custom-header":"X-XSRF-Header","mapreduce.job.end-notification.max.retry.interval":"5000","yarn.log-aggregation.retain-check-interval-seconds":"-1","yarn.resourcemanager.resource-tracker.client.thread-count":"50","yarn.rm.system-metrics-publisher.emit-container-events":"false","yarn.timeline-service.leveldb-timeline-store.start-time-read-cache-size":"10000","yarn.resourcemanager.ha.automatic-failover.zk-base-path":"/yarn-leader-election","io.seqfile.local.dir":"${hadoop.tmp.dir}/io/local","fs.s3a.s3guard.ddb.throttle.retry.interval":"100ms","fs.AbstractFileSystem.wasb.impl":"org.apache.hadoop.fs.azure.Wasb","mapreduce.client.submit.file.replication":"10","mapreduce.jobhistory.minicluster.fixed.ports":"false","fs.s3a.multipart.threshold":"2147483647","yarn.resourcemanager.webapp.xfs-filter.xframe-options":"SAMEORIGIN","mapreduce.jobhistory.done-dir":"${yarn.app.mapreduce.am.staging-dir}/history/done","ipc.client.idlethreshold":"4000","yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage":"false","mapreduce.reduce.input.buffer.percent":"0.0","yarn.nodemanager.runtime.linux.docker.userremapping-gid-threshold":"1","yarn.nodemanager.webapp.rest-csrf.enabled":"false","fs.ftp.host.port":"21","ipc.ping.interval":"60000","yarn.resourcemanager.history-writer.multi-threaded-dispatcher.pool-size":"10","yarn.resourcemanager.admin.address":"${yarn.resourcemanager.hostname}:8033","file.client-write-packet-size":"65536","ipc.client.kill.max":"10","mapreduce.reduce.speculative":"true","hadoop.security.key.default.bitlength":"128","mapreduce.job.reducer.unconditional-preempt.delay.sec":"300","yarn.nodemanager.disk-health-checker.interval-ms":"120000","yarn.nodemanager.log.deletion-threads-count":"4","yarn.webapp.filter-entity-list-by-user":"false","ipc.client.connection.maxidletime":"10000","mapreduce.task.io.sort.mb":"100","yarn.nodemanager.localizer.client.thread-count":"5","io.erasurecode.codec.rs.rawcoders":"rs_native,rs_java","io.erasurecode.codec.rs-legacy.rawcoders":"rs-legacy_java","yarn.sharedcache.admin.address":"0.0.0.0:8047","yarn.resourcemanager.placement-constraints.algorithm.iterator":"SERIAL","yarn.nodemanager.localizer.cache.cleanup.interval-ms":"600000","hadoop.security.crypto.codec.classes.aes.ctr.nopadding":"org.apache.hadoop.crypto.OpensslAesCtrCryptoCodec, org.apache.hadoop.crypto.JceAesCtrCryptoCodec","mapreduce.job.cache.limit.max-resources-mb":"0","fs.s3a.connection.ssl.enabled":"true","yarn.nodemanager.process-kill-wait.ms":"5000","mapreduce.job.hdfs-servers":"${fs.defaultFS}","hadoop.workaround.non.threadsafe.getpwuid":"true","fs.df.interval":"60000","fs.s3a.multiobjectdelete.enable":"true","yarn.sharedcache.cleaner.resource-sleep-ms":"0","yarn.nodemanager.disk-health-checker.min-healthy-disks":"0.25","hadoop.shell.missing.defaultFs.warning":"false","io.file.buffer.size":"65536","hadoop.security.group.mapping.ldap.search.attr.member":"member","hadoop.security.random.device.file.path":"/dev/urandom","hadoop.security.sensitive-config-keys":"*********(redacted)","fs.s3a.s3guard.ddb.max.retries":"9","hadoop.rpc.socket.factory.class.default":"org.apache.hadoop.net.StandardSocketFactory","yarn.intermediate-data-encryption.enable":"false","yarn.resourcemanager.connect.retry-interval.ms":"30000","yarn.nodemanager.container.stderr.pattern":"{*stderr*,*STDERR*}","yarn.scheduler.minimum-allocation-mb":"1024","yarn.app.mapreduce.am.staging-dir":"/tmp/hadoop-yarn/staging","mapreduce.reduce.shuffle.read.timeout":"180000","hadoop.http.cross-origin.max-age":"1800","io.erasurecode.codec.xor.rawcoders":"xor_native,xor_java","fs.s3a.connection.establish.timeout":"5000","mapreduce.job.running.map.limit":"0","yarn.minicluster.control-resource-monitoring":"false","hadoop.ssl.require.client.cert":"false","hadoop.kerberos.kinit.command":"kinit","yarn.federation.state-store.class":"org.apache.hadoop.yarn.server.federation.store.impl.MemoryFederationStateStore","mapreduce.reduce.log.level":"INFO","hadoop.security.dns.log-slow-lookups.threshold.ms":"1000","mapreduce.job.ubertask.enable":"false","adl.http.timeout":"-1","yarn.resourcemanager.placement-constraints.retry-attempts":"3","hadoop.caller.context.enabled":"false","yarn.nodemanager.vmem-pmem-ratio":"2.1","hadoop.rpc.protection":"authentication","ha.health-monitor.rpc-timeout.ms":"45000","yarn.nodemanager.remote-app-log-dir":"/tmp/logs","hadoop.zk.timeout-ms":"10000","fs.s3a.s3guard.cli.prune.age":"86400000","yarn.nodemanager.resource.pcores-vcores-multiplier":"1.0","yarn.nodemanager.runtime.linux.sandbox-mode":"disabled","yarn.app.mapreduce.am.containerlauncher.threadpool-initial-size":"10","fs.s3a.committer.threads":"8","hadoop.zk.retry-interval-ms":"1000","hadoop.security.crypto.buffer.size":"8192","yarn.nodemanager.node-labels.provider.fetch-interval-ms":"600000","mapreduce.jobhistory.recovery.store.leveldb.path":"${hadoop.tmp.dir}/mapred/history/recoverystore","yarn.client.failover-retries-on-socket-timeouts":"0","yarn.nodemanager.resource.memory.enabled":"false","fs.azure.authorization.caching.enable":"true","hadoop.security.instrumentation.requires.admin":"false","yarn.nodemanager.delete.thread-count":"4","mapreduce.job.finish-when-all-reducers-done":"true","hadoop.registry.jaas.context":"Client","yarn.timeline-service.leveldb-timeline-store.path":"${hadoop.tmp.dir}/yarn/timeline","io.map.index.interval":"128","yarn.resourcemanager.nm-container-queuing.max-queue-wait-time-ms":"100","fs.abfs.impl":"org.apache.hadoop.fs.azurebfs.AzureBlobFileSystem","mapreduce.job.counters.max":"120","mapreduce.jobhistory.webapp.rest-csrf.enabled":"false","yarn.timeline-service.store-class":"org.apache.hadoop.yarn.server.timeline.LeveldbTimelineStore","mapreduce.jobhistory.move.interval-ms":"180000","yarn.nodemanager.localizer.fetch.thread-count":"4","yarn.resourcemanager.scheduler.client.thread-count":"50","hadoop.ssl.hostname.verifier":"DEFAULT","yarn.timeline-service.leveldb-state-store.path":"${hadoop.tmp.dir}/yarn/timeline","mapreduce.job.classloader":"false","mapreduce.task.profile.map.params":"${mapreduce.task.profile.params}","ipc.client.connect.timeout":"20000","hadoop.security.auth_to_local.mechanism":"hadoop","yarn.timeline-service.app-collector.linger-period.ms":"60000","yarn.nm.liveness-monitor.expiry-interval-ms":"600000","yarn.resourcemanager.reservation-system.planfollower.time-step":"1000","yarn.nodemanager.runtime.linux.docker.enable-userremapping.allowed":"true","yarn.webapp.api-service.enable":"false","yarn.nodemanager.recovery.enabled":"false","mapreduce.job.end-notification.retry.interval":"1000","fs.du.interval":"600000","fs.ftp.impl":"org.apache.hadoop.fs.ftp.FTPFileSystem","yarn.nodemanager.container.stderr.tail.bytes":"4096","hadoop.security.group.mapping.ldap.read.timeout.ms":"60000","hadoop.security.groups.cache.warn.after.ms":"5000","file.bytes-per-checksum":"512","mapreduce.outputcommitter.factory.scheme.s3a":"org.apache.hadoop.fs.s3a.commit.S3ACommitterFactory","hadoop.security.groups.cache.background.reload":"false","yarn.nodemanager.container-monitor.enabled":"true","yarn.nodemanager.elastic-memory-control.enabled":"false","net.topology.script.number.args":"100","mapreduce.task.merge.progress.records":"10000","yarn.nodemanager.localizer.address":"${yarn.nodemanager.hostname}:8040","yarn.timeline-service.keytab":"/etc/krb5.keytab","mapreduce.reduce.shuffle.fetch.retry.timeout-ms":"30000","yarn.resourcemanager.rm.container-allocation.expiry-interval-ms":"600000","mapreduce.fileoutputcommitter.algorithm.version":"1","yarn.resourcemanager.work-preserving-recovery.enabled":"true","mapreduce.map.skip.maxrecords":"0","yarn.sharedcache.root-dir":"/sharedcache","fs.s3a.retry.throttle.limit":"${fs.s3a.attempts.maximum}","hadoop.http.authentication.type":"simple","mapreduce.job.cache.limit.max-resources":"0","mapreduce.task.userlog.limit.kb":"0","yarn.resourcemanager.scheduler.monitor.enable":"false","ipc.client.connect.max.retries":"10","hadoop.registry.zk.retry.times":"5","yarn.nodemanager.resource-monitor.interval-ms":"3000","yarn.nodemanager.resource-plugins.gpu.allowed-gpu-devices":"auto","mapreduce.job.sharedcache.mode":"disabled","yarn.nodemanager.webapp.rest-csrf.custom-header":"X-XSRF-Header","mapreduce.shuffle.listen.queue.size":"128","yarn.scheduler.configuration.mutation.acl-policy.class":"org.apache.hadoop.yarn.server.resourcemanager.scheduler.DefaultConfigurationMutationACLPolicy","mapreduce.map.cpu.vcores":"1","yarn.log-aggregation.file-formats":"TFile","yarn.timeline-service.client.fd-retain-secs":"300","hadoop.user.group.static.mapping.overrides":"dr.who=;","fs.azure.sas.expiry.period":"90d","mapreduce.jobhistory.recovery.store.class":"org.apache.hadoop.mapreduce.v2.hs.HistoryServerFileSystemStateStoreService","yarn.resourcemanager.fail-fast":"${yarn.fail-fast}","yarn.resourcemanager.proxy-user-privileges.enabled":"false","yarn.router.webapp.interceptor-class.pipeline":"org.apache.hadoop.yarn.server.router.webapp.DefaultRequestInterceptorREST","yarn.nodemanager.resource.memory.cgroups.soft-limit-percentage":"90.0","mapreduce.job.reducer.preempt.delay.sec":"0","hadoop.util.hash.type":"murmur","yarn.nodemanager.disk-validator":"basic","yarn.app.mapreduce.client.job.max-retries":"3","mapreduce.reduce.shuffle.retry-delay.max.ms":"60000","hadoop.security.group.mapping.ldap.connection.timeout.ms":"60000","mapreduce.task.profile.params":"-agentlib:hprof=cpu=samples,heap=sites,force=n,thread=y,verbose=n,file=%s","yarn.app.mapreduce.shuffle.log.backups":"0","yarn.nodemanager.container-diagnostics-maximum-size":"10000","hadoop.registry.zk.retry.interval.ms":"1000","yarn.nodemanager.linux-container-executor.cgroups.delete-timeout-ms":"1000","fs.AbstractFileSystem.file.impl":"org.apache.hadoop.fs.local.LocalFs","yarn.nodemanager.log-aggregation.roll-monitoring-interval-seconds":"-1","mapreduce.jobhistory.cleaner.interval-ms":"86400000","hadoop.registry.zk.quorum":"localhost:2181","mapreduce.output.fileoutputformat.compress":"false","yarn.resourcemanager.am-rm-tokens.master-key-rolling-interval-secs":"*********(redacted)","fs.s3a.assumed.role.session.duration":"30m","hadoop.security.group.mapping.ldap.conversion.rule":"none","hadoop.ssl.server.conf":"ssl-server.xml","fs.s3a.retry.throttle.interval":"1000ms","seq.io.sort.factor":"100","yarn.sharedcache.cleaner.initial-delay-mins":"10","mapreduce.client.completion.pollinterval":"5000","hadoop.ssl.keystores.factory.class":"org.apache.hadoop.security.ssl.FileBasedKeyStoresFactory","yarn.app.mapreduce.am.resource.cpu-vcores":"1","yarn.timeline-service.enabled":"false","yarn.nodemanager.runtime.linux.docker.capabilities":"CHOWN,DAC_OVERRIDE,FSETID,FOWNER,MKNOD,NET_RAW,SETGID,SETUID,SETFCAP,SETPCAP,NET_BIND_SERVICE,SYS_CHROOT,KILL,AUDIT_WRITE","yarn.acl.enable":"false","yarn.timeline-service.entity-group-fs-store.done-dir":"/tmp/entity-file-history/done/","mapreduce.task.profile":"false","yarn.resourcemanager.fs.state-store.uri":"${hadoop.tmp.dir}/yarn/system/rmstore","mapreduce.jobhistory.always-scan-user-dir":"false","yarn.nodemanager.opportunistic-containers-use-pause-for-preemption":"false","yarn.nodemanager.linux-container-executor.nonsecure-mode.local-user":"nobody","yarn.timeline-service.reader.class":"org.apache.hadoop.yarn.server.timelineservice.storage.HBaseTimelineReaderImpl","yarn.resourcemanager.configuration.provider-class":"org.apache.hadoop.yarn.LocalConfigurationProvider","yarn.nodemanager.runtime.linux.docker.userremapping-uid-threshold":"1","yarn.resourcemanager.configuration.file-system-based-store":"/yarn/conf","mapreduce.job.cache.limit.max-single-resource-mb":"0","yarn.nodemanager.runtime.linux.docker.stop.grace-period":"10","yarn.resourcemanager.resource-profiles.source-file":"resource-profiles.json","yarn.nodemanager.resource.percentage-physical-cpu-limit":"100","mapreduce.jobhistory.client.thread-count":"10","tfile.fs.input.buffer.size":"262144","mapreduce.client.progressmonitor.pollinterval":"1000","yarn.nodemanager.log-dirs":"${yarn.log.dir}/userlogs","fs.automatic.close":"true","yarn.nodemanager.hostname":"0.0.0.0","yarn.nodemanager.resource.memory.cgroups.swappiness":"0","ftp.stream-buffer-size":"4096","yarn.fail-fast":"false","yarn.timeline-service.app-aggregation-interval-secs":"15","hadoop.security.group.mapping.ldap.search.filter.user":"(&(objectClass=user)(sAMAccountName={0}))","yarn.nodemanager.container-localizer.log.level":"INFO","yarn.timeline-service.address":"${yarn.timeline-service.hostname}:10200","mapreduce.job.ubertask.maxmaps":"9","fs.s3a.threads.keepalivetime":"60","mapreduce.jobhistory.webapp.rest-csrf.methods-to-ignore":"GET,OPTIONS,HEAD","mapreduce.task.files.preserve.failedtasks":"false","yarn.app.mapreduce.client.job.retry-interval":"2000","ha.failover-controller.graceful-fence.connection.retries":"1","yarn.resourcemanager.delegation.token.max-lifetime":"*********(redacted)","yarn.timeline-service.client.drain-entities.timeout.ms":"2000","yarn.nodemanager.resource-plugins.fpga.vendor-plugin.class":"org.apache.hadoop.yarn.server.nodemanager.containermanager.resourceplugin.fpga.IntelFpgaOpenclPlugin","yarn.timeline-service.entity-group-fs-store.summary-store":"org.apache.hadoop.yarn.server.timeline.LeveldbTimelineStore","mapreduce.reduce.cpu.vcores":"1","mapreduce.job.encrypted-intermediate-data.buffer.kb":"128","fs.client.resolve.remote.symlinks":"true","yarn.nodemanager.webapp.https.address":"0.0.0.0:8044","hadoop.http.cross-origin.allowed-origins":"*","mapreduce.job.encrypted-intermediate-data":"false","yarn.timeline-service.entity-group-fs-store.retain-seconds":"604800","yarn.resourcemanager.metrics.runtime.buckets":"60,300,1440","yarn.timeline-service.generic-application-history.max-applications":"10000","yarn.nodemanager.local-dirs":"${hadoop.tmp.dir}/nm-local-dir","mapreduce.shuffle.connection-keep-alive.enable":"false","yarn.node-labels.configuration-type":"centralized","fs.s3a.path.style.access":"false","yarn.nodemanager.aux-services.mapreduce_shuffle.class":"org.apache.hadoop.mapred.ShuffleHandler","yarn.sharedcache.store.in-memory.staleness-period-mins":"10080","fs.adl.impl":"org.apache.hadoop.fs.adl.AdlFileSystem","yarn.resourcemanager.nodemanager.minimum.version":"NONE","mapreduce.jobhistory.webapp.xfs-filter.xframe-options":"SAMEORIGIN","yarn.app.mapreduce.am.staging-dir.erasurecoding.enabled":"false","net.topology.impl":"org.apache.hadoop.net.NetworkTopology","io.map.index.skip":"0","yarn.timeline-service.reader.webapp.https.address":"${yarn.timeline-service.webapp.https.address}","fs.ftp.data.connection.mode":"ACTIVE_LOCAL_DATA_CONNECTION_MODE","mapreduce.job.local-fs.single-disk-limit.check.kill-limit-exceed":"true","yarn.scheduler.maximum-allocation-vcores":"4","hadoop.http.cross-origin.allowed-headers":"X-Requested-With,Content-Type,Accept,Origin","yarn.nodemanager.log-aggregation.compression-type":"none","yarn.timeline-service.version":"1.0f","yarn.ipc.rpc.class":"org.apache.hadoop.yarn.ipc.HadoopYarnProtoRPC","mapreduce.reduce.maxattempts":"4","hadoop.security.dns.log-slow-lookups.enabled":"false","mapreduce.job.committer.setup.cleanup.needed":"true","mapreduce.job.running.reduce.limit":"0","ipc.maximum.response.length":"134217728","yarn.resourcemanager.webapp.rest-csrf.methods-to-ignore":"GET,OPTIONS,HEAD","mapreduce.job.token.tracking.ids.enabled":"*********(redacted)","hadoop.caller.context.max.size":"128","yarn.nodemanager.runtime.linux.docker.host-pid-namespace.allowed":"false","yarn.nodemanager.runtime.linux.docker.delayed-removal.allowed":"false","hadoop.registry.system.acls":"sasl:yarn@, sasl:mapred@, sasl:hdfs@","yarn.nodemanager.recovery.dir":"${hadoop.tmp.dir}/yarn-nm-recovery","fs.s3a.fast.upload.buffer":"disk","mapreduce.jobhistory.intermediate-done-dir":"${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate","yarn.app.mapreduce.shuffle.log.separate":"true","fs.s3a.max.total.tasks":"5","fs.s3a.readahead.range":"64K","hadoop.http.authentication.simple.anonymous.allowed":"true","fs.s3a.attempts.maximum":"20","hadoop.registry.zk.connection.timeout.ms":"15000","yarn.resourcemanager.delegation-token-renewer.thread-count":"*********(redacted)","yarn.nodemanager.health-checker.script.timeout-ms":"1200000","yarn.timeline-service.leveldb-timeline-store.start-time-write-cache-size":"10000","yarn.resourcemanager.resource-profiles.enabled":"false","yarn.timeline-service.hbase-schema.prefix":"prod.","fs.azure.authorization":"false","mapreduce.map.log.level":"INFO","yarn.resourcemanager.decommissioning-nodes-watcher.poll-interval-secs":"20","mapreduce.output.fileoutputformat.compress.type":"RECORD","yarn.resourcemanager.leveldb-state-store.path":"${hadoop.tmp.dir}/yarn/system/rmstore","yarn.timeline-service.webapp.rest-csrf.custom-header":"X-XSRF-Header","mapreduce.ifile.readahead.bytes":"4194304","yarn.sharedcache.app-checker.class":"org.apache.hadoop.yarn.server.sharedcachemanager.RemoteAppChecker","yarn.nodemanager.linux-container-executor.nonsecure-mode.limit-users":"true","yarn.nodemanager.resource.detect-hardware-capabilities":"false","mapreduce.cluster.acls.enabled":"false","mapreduce.job.speculative.retry-after-no-speculate":"1000","hadoop.security.group.mapping.ldap.search.group.hierarchy.levels":"0","yarn.resourcemanager.fs.state-store.retry-interval-ms":"1000","file.stream-buffer-size":"4096","yarn.resourcemanager.application-timeouts.monitor.interval-ms":"3000","mapreduce.map.output.compress.codec":"org.apache.hadoop.io.compress.DefaultCodec","mapreduce.map.speculative":"true","mapreduce.job.speculative.retry-after-speculate":"15000","yarn.nodemanager.linux-container-executor.cgroups.mount":"false","yarn.app.mapreduce.am.container.log.backups":"0","yarn.app.mapreduce.am.log.level":"INFO","mapreduce.job.reduce.slowstart.completedmaps":"0.05","yarn.timeline-service.http-authentication.type":"simple","hadoop.security.group.mapping.ldap.search.attr.group.name":"cn","yarn.nodemanager.resource-plugins.fpga.allowed-fpga-devices":"0,1","yarn.timeline-service.client.internal-timers-ttl-secs":"420","hadoop.http.logs.enabled":"true","fs.s3a.block.size":"32M","yarn.sharedcache.client-server.address":"0.0.0.0:8045","yarn.nodemanager.logaggregation.threadpool-size-max":"100","yarn.resourcemanager.hostname":"0.0.0.0","yarn.resourcemanager.delegation.key.update-interval":"86400000","mapreduce.reduce.shuffle.fetch.retry.enabled":"${yarn.nodemanager.recovery.enabled}","mapreduce.map.memory.mb":"-1","mapreduce.task.skip.start.attempts":"2","fs.AbstractFileSystem.hdfs.impl":"org.apache.hadoop.fs.Hdfs","yarn.nodemanager.disk-health-checker.enable":"true","ipc.client.tcpnodelay":"true","ipc.client.rpc-timeout.ms":"0","yarn.nodemanager.webapp.rest-csrf.methods-to-ignore":"GET,OPTIONS,HEAD","ipc.client.low-latency":"false","mapreduce.input.lineinputformat.linespermap":"1","yarn.router.interceptor.user.threadpool-size":"5","ipc.client.connect.max.retries.on.timeouts":"45","yarn.timeline-service.leveldb-timeline-store.read-cache-size":"104857600","fs.AbstractFileSystem.har.impl":"org.apache.hadoop.fs.HarFs","mapreduce.job.split.metainfo.maxsize":"10000000","yarn.am.liveness-monitor.expiry-interval-ms":"600000","yarn.resourcemanager.container-tokens.master-key-rolling-interval-secs":"*********(redacted)","yarn.timeline-service.entity-group-fs-store.app-cache-size":"10","fs.s3a.socket.recv.buffer":"8192","yarn.resourcemanager.resource-tracker.address":"${yarn.resourcemanager.hostname}:8031","yarn.nodemanager.node-labels.provider.fetch-timeout-ms":"1200000","mapreduce.job.heap.memory-mb.ratio":"0.8","yarn.resourcemanager.leveldb-state-store.compaction-interval-secs":"3600","yarn.resourcemanager.webapp.rest-csrf.custom-header":"X-XSRF-Header","yarn.scheduler.configuration.fs.path":"file://${hadoop.tmp.dir}/yarn/system/schedconf","mapreduce.client.output.filter":"FAILED","hadoop.http.filter.initializers":"org.apache.hadoop.http.lib.StaticUserWebFilter","mapreduce.reduce.memory.mb":"-1","yarn.timeline-service.hostname":"0.0.0.0","file.replication":"1","yarn.nodemanager.container-metrics.unregister-delay-ms":"10000","yarn.nodemanager.container-metrics.period-ms":"-1","mapreduce.fileoutputcommitter.task.cleanup.enabled":"false","yarn.nodemanager.log.retain-seconds":"10800","yarn.timeline-service.entity-group-fs-store.cleaner-interval-seconds":"3600","yarn.resourcemanager.keytab":"/etc/krb5.keytab","hadoop.security.group.mapping.providers.combined":"true","mapreduce.reduce.merge.inmem.threshold":"1000","yarn.timeline-service.recovery.enabled":"false","fs.azure.saskey.usecontainersaskeyforallaccess":"true","yarn.sharedcache.nm.uploader.thread-count":"20","yarn.resourcemanager.nodemanager-graceful-decommission-timeout-secs":"3600","mapreduce.shuffle.ssl.enabled":"false","yarn.timeline-service.hbase.coprocessor.app-final-value-retention-milliseconds":"259200000","fs.s3a.committer.staging.abort.pending.uploads":"true","yarn.nodemanager.opportunistic-containers-max-queue-length":"0","yarn.resourcemanager.state-store.max-completed-applications":"${yarn.resourcemanager.max-completed-applications}","mapreduce.job.speculative.minimum-allowed-tasks":"10","yarn.log-aggregation.retain-seconds":"-1","yarn.nodemanager.disk-health-checker.min-free-space-per-disk-mb":"0","mapreduce.jobhistory.max-age-ms":"604800000","hadoop.http.cross-origin.allowed-methods":"GET,POST,HEAD","yarn.resourcemanager.opportunistic-container-allocation.enabled":"false","mapreduce.jobhistory.webapp.address":"0.0.0.0:19888","hadoop.system.tags":"YARN,HDFS,NAMENODE,DATANODE,REQUIRED,SECURITY,KERBEROS,PERFORMANCE,CLIENT\n ,SERVER,DEBUG,DEPRECATED,COMMON,OPTIONAL","yarn.log-aggregation.file-controller.TFile.class":"org.apache.hadoop.yarn.logaggregation.filecontroller.tfile.LogAggregationTFileController","yarn.client.nodemanager-connect.max-wait-ms":"180000","yarn.resourcemanager.webapp.address":"${yarn.resourcemanager.hostname}:8088","mapreduce.jobhistory.recovery.enable":"false","mapreduce.reduce.shuffle.parallelcopies":"5","fs.AbstractFileSystem.webhdfs.impl":"org.apache.hadoop.fs.WebHdfs","fs.trash.interval":"0","yarn.app.mapreduce.client.max-retries":"3","hadoop.security.authentication":"simple","mapreduce.task.profile.reduce.params":"${mapreduce.task.profile.params}","yarn.app.mapreduce.am.resource.mb":"1536","mapreduce.input.fileinputformat.list-status.num-threads":"1","yarn.nodemanager.container-executor.class":"org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor","io.mapfile.bloom.size":"1048576","yarn.timeline-service.ttl-ms":"604800000","yarn.resourcemanager.nm-container-queuing.min-queue-length":"5","yarn.nodemanager.resource.cpu-vcores":"-1","mapreduce.job.reduces":"1","fs.s3a.multipart.size":"100M","yarn.scheduler.minimum-allocation-vcores":"1","mapreduce.job.speculative.speculative-cap-total-tasks":"0.01","hadoop.ssl.client.conf":"ssl-client.xml","mapreduce.job.queuename":"default","mapreduce.job.encrypted-intermediate-data-key-size-bits":"128","fs.s3a.metadatastore.authoritative":"false","yarn.nodemanager.webapp.xfs-filter.xframe-options":"SAMEORIGIN","ha.health-monitor.sleep-after-disconnect.ms":"1000","yarn.app.mapreduce.shuffle.log.limit.kb":"0","hadoop.security.group.mapping":"org.apache.hadoop.security.JniBasedUnixGroupsMappingWithFallback","yarn.client.application-client-protocol.poll-timeout-ms":"-1","mapreduce.jobhistory.jhist.format":"binary","yarn.resourcemanager.ha.enabled":"false","hadoop.http.staticuser.user":"dr.who","mapreduce.task.exit.timeout.check-interval-ms":"20000","mapreduce.jobhistory.intermediate-user-done-dir.permissions":"770","mapreduce.task.exit.timeout":"60000","yarn.nodemanager.linux-container-executor.resources-handler.class":"org.apache.hadoop.yarn.server.nodemanager.util.DefaultLCEResourcesHandler","mapreduce.reduce.shuffle.memory.limit.percent":"0.25","yarn.resourcemanager.reservation-system.enable":"false","mapreduce.map.output.compress":"false","ha.zookeeper.acl":"world:anyone:rwcda","ipc.server.max.connections":"0","yarn.nodemanager.runtime.linux.docker.default-container-network":"host","yarn.router.webapp.address":"0.0.0.0:8089","yarn.scheduler.maximum-allocation-mb":"8192","yarn.resourcemanager.scheduler.monitor.policies":"org.apache.hadoop.yarn.server.resourcemanager.monitor.capacity.ProportionalCapacityPreemptionPolicy","yarn.sharedcache.cleaner.period-mins":"1440","yarn.nodemanager.resource-plugins.gpu.docker-plugin.nvidia-docker-v1.endpoint":"http://localhost:3476/v1.0/docker/cli","yarn.app.mapreduce.am.container.log.limit.kb":"0","ipc.client.connect.retry.interval":"1000","yarn.timeline-service.http-cross-origin.enabled":"false","fs.wasbs.impl":"org.apache.hadoop.fs.azure.NativeAzureFileSystem$Secure","yarn.federation.subcluster-resolver.class":"org.apache.hadoop.yarn.server.federation.resolver.DefaultSubClusterResolverImpl","yarn.resourcemanager.zk-state-store.parent-path":"/rmstore","mapreduce.jobhistory.cleaner.enable":"true","yarn.timeline-service.client.fd-flush-interval-secs":"10","hadoop.security.kms.client.encrypted.key.cache.expiry":"43200000","yarn.client.nodemanager-client-async.thread-pool-max-size":"500","mapreduce.map.maxattempts":"4","yarn.resourcemanager.nm-container-queuing.sorting-nodes-interval-ms":"1000","fs.s3a.committer.staging.tmp.path":"tmp/staging","yarn.nodemanager.sleep-delay-before-sigkill.ms":"250","yarn.resourcemanager.nm-container-queuing.min-queue-wait-time-ms":"10","mapreduce.job.end-notification.retry.attempts":"0","yarn.nodemanager.resource.count-logical-processors-as-cores":"false","hadoop.registry.zk.root":"/registry","adl.feature.ownerandgroup.enableupn":"false","yarn.resourcemanager.zk-max-znode-size.bytes":"1048576","mapreduce.job.reduce.shuffle.consumer.plugin.class":"org.apache.hadoop.mapreduce.task.reduce.Shuffle","yarn.resourcemanager.delayed.delegation-token.removal-interval-ms":"*********(redacted)","yarn.nodemanager.localizer.cache.target-size-mb":"10240","fs.s3a.committer.staging.conflict-mode":"fail","mapreduce.client.libjars.wildcard":"true","fs.s3a.committer.staging.unique-filenames":"true","yarn.nodemanager.node-attributes.provider.fetch-timeout-ms":"1200000","fs.s3a.list.version":"2","ftp.client-write-packet-size":"65536","fs.AbstractFileSystem.adl.impl":"org.apache.hadoop.fs.adl.Adl","hadoop.security.key.default.cipher":"AES/CTR/NoPadding","yarn.client.failover-retries":"0","fs.s3a.multipart.purge.age":"86400","mapreduce.job.local-fs.single-disk-limit.check.interval-ms":"5000","net.topology.node.switch.mapping.impl":"org.apache.hadoop.net.ScriptBasedMapping","yarn.nodemanager.amrmproxy.address":"0.0.0.0:8049","ipc.server.listen.queue.size":"128","map.sort.class":"org.apache.hadoop.util.QuickSort","fs.viewfs.rename.strategy":"SAME_MOUNTPOINT","hadoop.security.kms.client.authentication.retry-count":"1","fs.permissions.umask-mode":"022","fs.s3a.assumed.role.credentials.provider":"org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider","yarn.nodemanager.vmem-check-enabled":"true","yarn.nodemanager.numa-awareness.enabled":"false","yarn.nodemanager.recovery.compaction-interval-secs":"3600","yarn.app.mapreduce.client-am.ipc.max-retries":"3","yarn.federation.registry.base-dir":"yarnfederation/","mapreduce.job.max.map":"-1","mapreduce.job.local-fs.single-disk-limit.bytes":"-1","mapreduce.job.ubertask.maxreduces":"1","hadoop.security.kms.client.encrypted.key.cache.size":"500","hadoop.security.java.secure.random.algorithm":"SHA1PRNG","ha.failover-controller.cli-check.rpc-timeout.ms":"20000","mapreduce.jobhistory.jobname.limit":"50","yarn.client.nodemanager-connect.retry-interval-ms":"10000","yarn.timeline-service.state-store-class":"org.apache.hadoop.yarn.server.timeline.recovery.LeveldbTimelineStateStore","yarn.nodemanager.env-whitelist":"JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ","yarn.sharedcache.nested-level":"3","yarn.timeline-service.webapp.rest-csrf.methods-to-ignore":"GET,OPTIONS,HEAD","fs.azure.user.agent.prefix":"unknown","yarn.resourcemanager.zk-delegation-token-node.split-index":"*********(redacted)","yarn.nodemanager.numa-awareness.read-topology":"false","yarn.nodemanager.webapp.address":"${yarn.nodemanager.hostname}:8042","rpc.metrics.quantile.enable":"false","yarn.registry.class":"org.apache.hadoop.registry.client.impl.FSRegistryOperationsService","mapreduce.jobhistory.admin.acl":"*","yarn.resourcemanager.system-metrics-publisher.dispatcher.pool-size":"10","yarn.scheduler.queue-placement-rules":"user-group","hadoop.http.authentication.kerberos.keytab":"${user.home}/hadoop.keytab","yarn.resourcemanager.recovery.enabled":"false","yarn.timeline-service.webapp.rest-csrf.enabled":"false"},"System Properties":{"java.io.tmpdir":"/tmp","line.separator":"\n","path.separator":":","sun.management.compiler":"HotSpot 64-Bit Tiered Compilers","SPARK_SUBMIT":"true","sun.cpu.endian":"little","java.specification.version":"1.8","java.vm.specification.name":"Java Virtual Machine Specification","java.vendor":"Private Build","java.vm.specification.version":"1.8","user.home":"/home/user1","file.encoding.pkg":"sun.io","sun.nio.ch.bugLevel":"","sun.arch.data.model":"64","sun.boot.library.path":"/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64","user.dir":"/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2","java.library.path":"/snap/bin/cmake:/usr/local/cuda-11.5/lib64::/usr/java/packages/lib/amd64:/usr/lib/x86_64-linux-gnu/jni:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib/jni:/lib:/usr/lib","sun.cpu.isalist":"","sun.desktop":"gnome","os.arch":"amd64","java.vm.version":"25.312-b07","jetty.git.hash":"238ec6997c7806b055319a6d11f8ae7564adc0de","java.endorsed.dirs":"/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/endorsed","java.runtime.version":"1.8.0_312-8u312-b07-0ubuntu1~18.04-b07","java.vm.info":"mixed mode","java.ext.dirs":"/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext:/usr/java/packages/lib/ext","java.runtime.name":"OpenJDK Runtime Environment","file.separator":"/","java.class.version":"52.0","scala.usejavacp":"true","java.specification.name":"Java Platform API Specification","sun.boot.class.path":"/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/resources.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/sunrsasign.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/jsse.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/jce.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/charsets.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/jfr.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/classes","file.encoding":"UTF-8","user.timezone":"America/Los_Angeles","java.specification.vendor":"Oracle Corporation","sun.java.launcher":"SUN_STANDARD","os.version":"5.4.0-96-generic","sun.os.patch.level":"unknown","java.vm.specification.vendor":"Oracle Corporation","user.country":"US","sun.jnu.encoding":"UTF-8","user.language":"en","java.vendor.url":"http://java.oracle.com/","java.awt.printerjob":"sun.print.PSPrinterJob","java.awt.graphicsenv":"sun.awt.X11GraphicsEnvironment","awt.toolkit":"sun.awt.X11.XToolkit","os.name":"Linux","java.vm.vendor":"Private Build","java.vendor.url.bug":"http://bugreport.sun.com/bugreport/","user.name":"user1","java.vm.name":"OpenJDK 64-Bit Server VM","sun.java.command":"org.apache.spark.deploy.SparkSubmit --conf spark.eventLog.enabled=true --conf spark.eventLog.dir=/home/user1/new_eventlogs --class org.apache.spark.repl.Main --name Spark shell spark-shell","java.home":"/usr/lib/jvm/java-8-openjdk-amd64/jre","java.version":"1.8.0_312","sun.io.unicode.encoding":"UnicodeLittle"},"Classpath Entries":{"/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/shapeless_2.12-2.3.3.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/metrics-jvm-4.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/spark-sql_2.12-3.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/spire-macros_2.12-0.17.0-M1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/antlr4-runtime-4.8-1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/arpack_combined_all-0.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/htrace-core4-4.1.0-incubating.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/machinist_2.12-0.6.8.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jline-2.14.6.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jersey-client-2.30.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jaxb-api-2.2.11.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hadoop-yarn-registry-3.2.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kubernetes-model-common-4.12.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/stax2-api-3.1.4.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/osgi-resource-locator-1.0.3.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/aopalliance-1.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/janino-3.0.16.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jackson-dataformat-yaml-2.10.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jackson-module-scala_2.12-2.10.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/scala-collection-compat_2.12-2.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/scala-xml_2.12-1.2.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/leveldbjni-all-1.8.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/spire-util_2.12-0.17.0-M1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/curator-recipes-2.13.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/spark-repl_2.12-3.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/json4s-core_2.12-3.7.0-M5.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jackson-core-2.10.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jcl-over-slf4j-1.7.30.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/httpcore-4.4.12.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kubernetes-model-metrics-4.12.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/generex-1.0.2.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jpam-1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/JLargeArrays-1.5.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/spark-core_2.12-3.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hadoop-yarn-server-web-proxy-3.2.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/mesos-1.4.0-shaded-protobuf.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jul-to-slf4j-1.7.30.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kerby-pkix-1.0.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kubernetes-model-apiextensions-4.12.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/json4s-ast_2.12-3.7.0-M5.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jackson-core-asl-1.9.13.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/protobuf-java-2.5.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/commons-io-2.5.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jta-1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/spark-catalyst_2.12-3.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/activation-1.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hive-common-2.3.7.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/ivy-2.4.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jersey-container-servlet-2.30.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/py4j-0.10.9.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/commons-codec-1.10.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kerb-admin-1.0.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kerb-simplekdc-1.0.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/threeten-extra-1.5.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/cats-kernel_2.12-2.0.0-M4.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hk2-locator-2.6.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/spark-hive_2.12-3.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/spire-platform_2.12-0.17.0-M1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/spark-network-common_2.12-3.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/minlog-1.3.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/token-provider-1.0.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/aopalliance-repackaged-2.6.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/conf/":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/stax-api-1.0.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kerby-config-1.0.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/javassist-3.25.0-GA.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jakarta.inject-2.6.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/opencsv-2.3.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hadoop-mapreduce-client-core-3.2.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/zjsonpatch-0.3.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/univocity-parsers-2.9.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jackson-mapper-asl-1.9.13.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hadoop-yarn-api-3.2.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/spark-yarn_2.12-3.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/commons-text-1.6.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jsp-api-2.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/spark-kvstore_2.12-3.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jersey-media-jaxb-2.30.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/bonecp-0.8.0.RELEASE.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kubernetes-model-networking-4.12.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/transaction-api-1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jackson-annotations-2.10.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/datanucleus-api-jdo-4.2.4.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kubernetes-model-autoscaling-4.12.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/velocity-1.5.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kubernetes-model-batch-4.12.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/okio-1.14.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/spark-streaming_2.12-3.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/arrow-memory-netty-2.0.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hadoop-yarn-server-common-3.2.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jakarta.servlet-api-4.0.3.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hive-llap-common-2.3.7.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kerb-identity-1.0.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/okhttp-3.12.12.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/xz-1.5.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/compress-lzf-1.0.3.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/arrow-format-2.0.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hive-jdbc-2.3.7.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/spark-launcher_2.12-3.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/parquet-column-1.10.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hadoop-mapreduce-client-common-3.2.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/avro-ipc-1.8.2.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/spark-mllib_2.12-3.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/shims-0.9.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/parquet-format-2.4.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/commons-crypto-1.1.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/re2j-1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/automaton-1.11-8.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kubernetes-model-policy-4.12.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/flatbuffers-java-1.9.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/parquet-jackson-1.10.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/spark-tags_2.12-3.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kerb-core-1.0.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hadoop-annotations-3.2.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hadoop-auth-3.2.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/metrics-json-4.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/parquet-encoding-1.10.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/oro-2.0.8.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/avro-1.8.2.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jodd-core-3.5.2.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kubernetes-model-admissionregistration-4.12.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/metrics-core-4.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/parquet-common-1.10.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/istack-commons-runtime-3.0.8.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/gson-2.2.4.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jackson-module-jaxb-annotations-2.10.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/commons-beanutils-1.9.4.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/spark-mesos_2.12-3.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/snappy-java-1.1.8.2.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jcip-annotations-1.0-1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/log4j-1.2.17.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kerby-asn1-1.0.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/accessors-smart-1.2.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jackson-module-paranamer-2.10.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/xbean-asm7-shaded-4.15.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/scala-compiler-2.12.10.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/commons-daemon-1.0.13.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/commons-dbcp-1.4.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/orc-core-1.5.12.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/aircompressor-0.10.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/okhttp-2.7.5.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jackson-jaxrs-json-provider-2.9.5.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/metrics-graphite-4.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/stream-2.9.6.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/algebra_2.12-2.0.0-M2.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/spark-mllib-local_2.12-3.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hive-service-rpc-3.1.2.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kubernetes-model-rbac-4.12.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/metrics-jmx-4.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/nimbus-jose-jwt-4.41.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/spark-kubernetes_2.12-3.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/slf4j-api-1.7.30.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kerb-common-1.0.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/commons-compiler-3.0.16.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hive-metastore-2.3.7.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/core-1.1.2.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jaxb-runtime-2.3.2.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/paranamer-2.8.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/guice-4.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/commons-pool-1.5.4.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/super-csv-2.2.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hive-exec-2.3.7-core.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/commons-logging-1.1.3.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kubernetes-model-settings-4.12.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/spark-network-shuffle_2.12-3.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/spark-tags_2.12-3.1.1-tests.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/commons-configuration2-2.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jersey-common-2.30.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kubernetes-model-certificates-4.12.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jackson-datatype-jsr310-2.11.2.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/antlr-runtime-3.5.2.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/curator-framework-2.13.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/parquet-hadoop-1.10.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/json-1.8.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kubernetes-model-core-4.12.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/scala-library-2.12.10.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/commons-cli-1.2.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kerby-util-1.0.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/JTransforms-3.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/macro-compat_2.12-1.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jackson-databind-2.10.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/spark-hive-thriftserver_2.12-3.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hk2-api-2.6.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hive-shims-common-2.3.7.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/json4s-scalap_2.12-3.7.0-M5.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kerb-server-1.0.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/ST4-4.0.4.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jakarta.xml.bind-api-2.3.2.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/spark-graphx_2.12-3.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/slf4j-log4j12-1.7.30.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jdo-api-3.0.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jakarta.ws.rs-api-2.1.6.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kubernetes-client-4.12.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kubernetes-model-coordination-4.12.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/orc-mapreduce-1.5.12.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/commons-collections-3.2.2.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hive-shims-2.3.7.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/commons-httpclient-3.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/breeze-macros_2.12-1.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hive-storage-api-2.7.2.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kerb-crypto-1.0.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/objenesis-2.6.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/orc-shims-1.5.12.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/libthrift-0.12.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/snakeyaml-1.24.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hadoop-mapreduce-client-jobclient-3.2.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/zstd-jni-1.4.8-1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hive-serde-2.3.7.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/arrow-memory-core-2.0.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/guice-servlet-4.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jackson-jaxrs-base-2.9.5.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/javax.inject-1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/datanucleus-rdbms-4.1.19.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/derby-10.12.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kryo-shaded-4.0.2.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hk2-utils-2.6.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hive-beeline-2.3.7.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hadoop-yarn-client-3.2.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/audience-annotations-0.5.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/scala-parser-combinators_2.12-1.1.2.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hive-vector-code-gen-2.3.7.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jakarta.activation-api-1.2.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jersey-server-2.30.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kubernetes-model-events-4.12.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/spark-sketch_2.12-3.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/logging-interceptor-3.12.12.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hadoop-client-3.2.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jersey-hk2-2.30.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hadoop-hdfs-client-3.2.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jakarta.annotation-api-1.3.5.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/netty-all-4.1.51.Final.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/pyrolite-4.30.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/httpclient-4.5.6.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/javolution-5.5.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/joda-time-2.10.5.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/commons-net-3.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/avro-mapred-1.8.2-hadoop2.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kubernetes-model-apps-4.12.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/dnsjava-2.1.7.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kubernetes-model-storageclass-4.12.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jsr305-3.0.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/RoaringBitmap-0.9.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/zookeeper-3.4.14.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/chill_2.12-0.9.5.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/commons-math3-3.4.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/ehcache-3.3.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/chill-java-0.9.5.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/guava-14.0.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/woodstox-core-5.0.3.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hive-cli-2.3.7.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hadoop-yarn-common-3.2.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/json4s-jackson_2.12-3.7.0-M5.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/commons-compress-1.20.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/javax.jdo-3.2.0-m3.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/lz4-java-1.7.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kerb-client-1.0.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kerb-util-1.0.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kubernetes-model-discovery-4.12.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/dropwizard-metrics-hadoop-metrics2-reporter-0.1.2.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kubernetes-model-scheduling-4.12.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/datanucleus-core-4.1.17.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/json-smart-2.3.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jersey-container-servlet-core-2.30.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kerby-xdr-1.0.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/spire_2.12-0.17.0-M1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/jakarta.validation-api-2.0.2.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/geronimo-jcache_1.0_spec-1.0-alpha-1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/arrow-vector-2.0.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hive-shims-0.23-2.3.7.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/kubernetes-model-extensions-4.12.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/commons-lang-2.6.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/libfb303-0.9.3.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/HikariCP-2.5.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/spark-unsafe_2.12-3.1.1.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/breeze_2.12-1.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/commons-lang3-3.10.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hadoop-common-3.2.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/scala-reflect-2.12.10.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/curator-client-2.13.0.jar":"System Classpath","/home/user1/spark-3.1.1/spark-3.1.1-bin-hadoop3.2/jars/hive-shims-scheduler-2.3.7.jar":"System Classpath"}} -{"Event":"SparkListenerApplicationStart","App Name":"Spark shell","App ID":"application_1718382712696_0008","Timestamp":1718390699078,"User":"test_user"} -{"Event":"SparkListenerExecutorAdded","Timestamp":1718390707480,"Executor ID":"4","Executor Info":{"Host":"test-host-w0","Total Cores":8,"Log Urls":{"stdout":"http://test-host-w0:8042/node/containerlogs/container_1718382712696_0008_01_000004/test_user/stdout?start=-4096","stderr":"http://test-host-w0:8042/node/containerlogs/container_1718382712696_0008_01_000004/test_user/stderr?start=-4096"},"Attributes":{"NM_HTTP_ADDRESS":"test-host-w0:8042","YARN_LOG_SERVER_URL":"http://test-cpu-cluster-m:19888/jobhistory/logs","USER":"test_user","LOG_FILES":"stderr,stdout","NM_HTTP_PORT":"8042","CLUSTER_ID":"","NM_PORT":"8026","HTTP_SCHEME":"http://","NM_HOST":"test-host-w0","CONTAINER_ID":"container_1718382712696_0008_01_000004"},"Resources":{},"Resource Profile Id":0}} -{"Event":"SparkListenerBlockManagerAdded","Block Manager ID":{"Executor ID":"4","Host":"test-host-w0","Port":33361},"Maximum Memory":14766676377,"Timestamp":1718390707561,"Maximum Onheap Memory":14766676377,"Maximum Offheap Memory":0} -{"Event":"SparkListenerExecutorAdded","Timestamp":1718390707571,"Executor ID":"3","Executor Info":{"Host":"test-host-w2","Total Cores":8,"Log Urls":{"stdout":"http://test-host-w2:8042/node/containerlogs/container_1718382712696_0008_01_000003/test_user/stdout?start=-4096","stderr":"http://test-host-w2:8042/node/containerlogs/container_1718382712696_0008_01_000003/test_user/stderr?start=-4096"},"Attributes":{"NM_HTTP_ADDRESS":"test-host-w2:8042","YARN_LOG_SERVER_URL":"http://test-cpu-cluster-m:19888/jobhistory/logs","USER":"test_user","LOG_FILES":"stderr,stdout","NM_HTTP_PORT":"8042","CLUSTER_ID":"","NM_PORT":"8026","HTTP_SCHEME":"http://","NM_HOST":"test-host-w2","CONTAINER_ID":"container_1718382712696_0008_01_000003"},"Resources":{},"Resource Profile Id":0}} -{"Event":"SparkListenerExecutorAdded","Timestamp":1718390707572,"Executor ID":"2","Executor Info":{"Host":"test-host-w3","Total Cores":8,"Log Urls":{"stdout":"http://test-host-w3:8042/node/containerlogs/container_1718382712696_0008_01_000002/test_user/stdout?start=-4096","stderr":"http://test-host-w3:8042/node/containerlogs/container_1718382712696_0008_01_000002/test_user/stderr?start=-4096"},"Attributes":{"NM_HTTP_ADDRESS":"test-host-w3:8042","YARN_LOG_SERVER_URL":"http://test-cpu-cluster-m:19888/jobhistory/logs","USER":"test_user","LOG_FILES":"stderr,stdout","NM_HTTP_PORT":"8042","CLUSTER_ID":"","NM_PORT":"8026","HTTP_SCHEME":"http://","NM_HOST":"test-host-w3","CONTAINER_ID":"container_1718382712696_0008_01_000002"},"Resources":{},"Resource Profile Id":0}} -{"Event":"SparkListenerExecutorAdded","Timestamp":1718390707616,"Executor ID":"1","Executor Info":{"Host":"test-host-w1","Total Cores":8,"Log Urls":{"stdout":"http://test-host-w1:8042/node/containerlogs/container_1718382712696_0008_01_000001/test_user/stdout?start=-4096","stderr":"http://test-host-w1:8042/node/containerlogs/container_1718382712696_0008_01_000001/test_user/stderr?start=-4096"},"Attributes":{"NM_HTTP_ADDRESS":"test-host-w1:8042","YARN_LOG_SERVER_URL":"http://test-cpu-cluster-m:19888/jobhistory/logs","USER":"test_user","LOG_FILES":"stderr,stdout","NM_HTTP_PORT":"8042","CLUSTER_ID":"","NM_PORT":"8026","HTTP_SCHEME":"http://","NM_HOST":"test-host-w1","CONTAINER_ID":"container_1718382712696_0008_01_000001"},"Resources":{},"Resource Profile Id":0}} -{"Event":"SparkListenerBlockManagerAdded","Block Manager ID":{"Executor ID":"2","Host":"test-host-w3","Port":46169},"Maximum Memory":14766676377,"Timestamp":1718390707665,"Maximum Onheap Memory":14766676377,"Maximum Offheap Memory":0} -{"Event":"SparkListenerBlockManagerAdded","Block Manager ID":{"Executor ID":"3","Host":"test-host-w2","Port":36449},"Maximum Memory":14766676377,"Timestamp":1718390707665,"Maximum Onheap Memory":14766676377,"Maximum Offheap Memory":0} -{"Event":"SparkListenerBlockManagerAdded","Block Manager ID":{"Executor ID":"1","Host":"test-host-w1","Port":32957},"Maximum Memory":14766676377,"Timestamp":1718390707704,"Maximum Onheap Memory":14766676377,"Maximum Offheap Memory":0} -{"Event":"SparkListenerExecutorAdded","Timestamp":1718390708103,"Executor ID":"8","Executor Info":{"Host":"test-host-w0","Total Cores":8,"Log Urls":{"stdout":"http://test-host-w0:8042/node/containerlogs/container_1718382712696_0008_01_000008/test_user/stdout?start=-4096","stderr":"http://test-host-w0:8042/node/containerlogs/container_1718382712696_0008_01_000008/test_user/stderr?start=-4096"},"Attributes":{"NM_HTTP_ADDRESS":"test-host-w0:8042","YARN_LOG_SERVER_URL":"http://test-cpu-cluster-m:19888/jobhistory/logs","USER":"test_user","LOG_FILES":"stderr,stdout","NM_HTTP_PORT":"8042","CLUSTER_ID":"","NM_PORT":"8026","HTTP_SCHEME":"http://","NM_HOST":"test-host-w0","CONTAINER_ID":"container_1718382712696_0008_01_000008"},"Resources":{},"Resource Profile Id":0}} -{"Event":"SparkListenerBlockManagerAdded","Block Manager ID":{"Executor ID":"8","Host":"test-host-w0","Port":35523},"Maximum Memory":14766676377,"Timestamp":1718390708180,"Maximum Onheap Memory":14766676377,"Maximum Offheap Memory":0} -{"Event":"SparkListenerExecutorAdded","Timestamp":1718390708319,"Executor ID":"7","Executor Info":{"Host":"test-host-w2","Total Cores":8,"Log Urls":{"stdout":"http://test-host-w2:8042/node/containerlogs/container_1718382712696_0008_01_000007/test_user/stdout?start=-4096","stderr":"http://test-host-w2:8042/node/containerlogs/container_1718382712696_0008_01_000007/test_user/stderr?start=-4096"},"Attributes":{"NM_HTTP_ADDRESS":"test-host-w2:8042","YARN_LOG_SERVER_URL":"http://test-cpu-cluster-m:19888/jobhistory/logs","USER":"test_user","LOG_FILES":"stderr,stdout","NM_HTTP_PORT":"8042","CLUSTER_ID":"","NM_PORT":"8026","HTTP_SCHEME":"http://","NM_HOST":"test-host-w2","CONTAINER_ID":"container_1718382712696_0008_01_000007"},"Resources":{},"Resource Profile Id":0}} -{"Event":"SparkListenerExecutorAdded","Timestamp":1718390708326,"Executor ID":"6","Executor Info":{"Host":"test-host-w3","Total Cores":8,"Log Urls":{"stdout":"http://test-host-w3:8042/node/containerlogs/container_1718382712696_0008_01_000006/test_user/stdout?start=-4096","stderr":"http://test-host-w3:8042/node/containerlogs/container_1718382712696_0008_01_000006/test_user/stderr?start=-4096"},"Attributes":{"NM_HTTP_ADDRESS":"test-host-w3:8042","YARN_LOG_SERVER_URL":"http://test-cpu-cluster-m:19888/jobhistory/logs","USER":"test_user","LOG_FILES":"stderr,stdout","NM_HTTP_PORT":"8042","CLUSTER_ID":"","NM_PORT":"8026","HTTP_SCHEME":"http://","NM_HOST":"test-host-w3","CONTAINER_ID":"container_1718382712696_0008_01_000006"},"Resources":{},"Resource Profile Id":0}} -{"Event":"SparkListenerExecutorAdded","Timestamp":1718390708356,"Executor ID":"5","Executor Info":{"Host":"test-host-w1","Total Cores":8,"Log Urls":{"stdout":"http://test-host-w1:8042/node/containerlogs/container_1718382712696_0008_01_000005/test_user/stdout?start=-4096","stderr":"http://test-host-w1:8042/node/containerlogs/container_1718382712696_0008_01_000005/test_user/stderr?start=-4096"},"Attributes":{"NM_HTTP_ADDRESS":"test-host-w1:8042","YARN_LOG_SERVER_URL":"http://test-cpu-cluster-m:19888/jobhistory/logs","USER":"test_user","LOG_FILES":"stderr,stdout","NM_HTTP_PORT":"8042","CLUSTER_ID":"","NM_PORT":"8026","HTTP_SCHEME":"http://","NM_HOST":"test-host-w1","CONTAINER_ID":"container_1718382712696_0008_01_000005"},"Resources":{},"Resource Profile Id":0}} -{"Event":"SparkListenerBlockManagerAdded","Block Manager ID":{"Executor ID":"7","Host":"test-host-w2","Port":37615},"Maximum Memory":14766676377,"Timestamp":1718390708401,"Maximum Onheap Memory":14766676377,"Maximum Offheap Memory":0} -{"Event":"SparkListenerBlockManagerAdded","Block Manager ID":{"Executor ID":"6","Host":"test-host-w3","Port":32883},"Maximum Memory":14766676377,"Timestamp":1718390708417,"Maximum Onheap Memory":14766676377,"Maximum Offheap Memory":0} -{"Event":"SparkListenerBlockManagerAdded","Block Manager ID":{"Executor ID":"5","Host":"test-host-w1","Port":45663},"Maximum Memory":14766676377,"Timestamp":1718390708442,"Maximum Onheap Memory":14766676377,"Maximum Offheap Memory":0} -{"Event":"SparkListenerBlockManagerRemoved","Block Manager ID":{"Executor ID":"2","Host":"test-host-w3","Port":46169},"Timestamp":1718390771091} -{"Event":"SparkListenerBlockManagerRemoved","Block Manager ID":{"Executor ID":"5","Host":"test-host-w1","Port":45663},"Timestamp":1718390771092} -{"Event":"SparkListenerBlockManagerRemoved","Block Manager ID":{"Executor ID":"1","Host":"test-host-w1","Port":32957},"Timestamp":1718390771092} -{"Event":"SparkListenerExecutorRemoved","Timestamp":1718390771093,"Executor ID":"2","Removed Reason":"Executor killed by driver."} -{"Event":"SparkListenerExecutorRemoved","Timestamp":1718390771094,"Executor ID":"5","Removed Reason":"Executor killed by driver."} -{"Event":"SparkListenerExecutorRemoved","Timestamp":1718390771095,"Executor ID":"1","Removed Reason":"Executor killed by driver."} -{"Event":"SparkListenerBlockManagerRemoved","Block Manager ID":{"Executor ID":"3","Host":"test-host-w2","Port":36449},"Timestamp":1718390771095} -{"Event":"SparkListenerBlockManagerRemoved","Block Manager ID":{"Executor ID":"7","Host":"test-host-w2","Port":37615},"Timestamp":1718390771096} -{"Event":"SparkListenerBlockManagerRemoved","Block Manager ID":{"Executor ID":"4","Host":"test-host-w0","Port":33361},"Timestamp":1718390771096} -{"Event":"SparkListenerExecutorRemoved","Timestamp":1718390771096,"Executor ID":"3","Removed Reason":"Executor killed by driver."} -{"Event":"SparkListenerBlockManagerRemoved","Block Manager ID":{"Executor ID":"8","Host":"test-host-w0","Port":35523},"Timestamp":1718390771096} -{"Event":"SparkListenerExecutorRemoved","Timestamp":1718390771097,"Executor ID":"8","Removed Reason":"Executor killed by driver."} -{"Event":"SparkListenerExecutorRemoved","Timestamp":1718390771098,"Executor ID":"4","Removed Reason":"Executor killed by driver."} -{"Event":"SparkListenerExecutorRemoved","Timestamp":1718390771098,"Executor ID":"7","Removed Reason":"Executor killed by driver."} -{"Event":"org.apache.spark.sql.execution.ui.SparkListenerSQLExecutionStart","executionId":0,"description":"csv at :24","details":"org.apache.spark.sql.DataFrameWriter.csv(DataFrameWriter.scala:979)\n$line26.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.(:24)\n$line26.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw.(:28)\n$line26.$read$$iw$$iw$$iw$$iw$$iw$$iw.(:30)\n$line26.$read$$iw$$iw$$iw$$iw$$iw.(:32)\n$line26.$read$$iw$$iw$$iw$$iw.(:34)\n$line26.$read$$iw$$iw$$iw.(:36)\n$line26.$read$$iw$$iw.(:38)\n$line26.$read$$iw.(:40)\n$line26.$read.(:42)\n$line26.$read$.(:46)\n$line26.$read$.()\n$line26.$eval$.$print$lzycompute(:7)\n$line26.$eval$.$print(:6)\n$line26.$eval.$print()\nsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\nsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\nsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\njava.lang.reflect.Method.invoke(Method.java:498)\nscala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:747)","physicalPlanDescription":"== Physical Plan ==\nExecute InsertIntoHadoopFsRelationCommand (16)\n+- AdaptiveSparkPlan (15)\n +- Sort (14)\n +- Exchange (13)\n +- HashAggregate (12)\n +- Exchange (11)\n +- HashAggregate (10)\n +- Project (9)\n +- BroadcastHashJoin Inner BuildRight (8)\n :- Project (5)\n : +- BroadcastHashJoin Inner BuildRight (4)\n : :- LocalTableScan (1)\n : +- BroadcastExchange (3)\n : +- LocalTableScan (2)\n +- BroadcastExchange (7)\n +- LocalTableScan (6)\n\n\n(1) LocalTableScan\nOutput [3]: [id#8, group_id#10, category_id#11]\nArguments: [id#8, group_id#10, category_id#11]\n\n(2) LocalTableScan\nOutput [2]: [id#22, value#23]\nArguments: [id#22, value#23]\n\n(3) BroadcastExchange\nInput [2]: [id#22, value#23]\nArguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#43]\n\n(4) BroadcastHashJoin\nLeft keys [1]: [id#8]\nRight keys [1]: [id#22]\nJoin condition: None\n\n(5) Project\nOutput [4]: [id#8, group_id#10, category_id#11, value#23]\nInput [5]: [id#8, group_id#10, category_id#11, id#22, value#23]\n\n(6) LocalTableScan\nOutput [2]: [id#34, detail_id#36]\nArguments: [id#34, detail_id#36]\n\n(7) BroadcastExchange\nInput [2]: [id#34, detail_id#36]\nArguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#47]\n\n(8) BroadcastHashJoin\nLeft keys [1]: [id#8]\nRight keys [1]: [id#34]\nJoin condition: None\n\n(9) Project\nOutput [4]: [group_id#10, category_id#11, value#23, detail_id#36]\nInput [6]: [id#8, group_id#10, category_id#11, value#23, id#34, detail_id#36]\n\n(10) HashAggregate\nInput [4]: [group_id#10, category_id#11, value#23, detail_id#36]\nKeys [3]: [group_id#10, category_id#11, detail_id#36]\nFunctions [5]: [partial_sum(cast(value#23 as bigint)), partial_avg(cast(value#23 as bigint)), partial_max(value#23), partial_min(value#23), partial_count(1)]\nAggregate Attributes [6]: [sum#89L, sum#90, count#91L, max#92, min#93, count#94L]\nResults [9]: [group_id#10, category_id#11, detail_id#36, sum#95L, sum#96, count#97L, max#98, min#99, count#100L]\n\n(11) Exchange\nInput [9]: [group_id#10, category_id#11, detail_id#36, sum#95L, sum#96, count#97L, max#98, min#99, count#100L]\nArguments: hashpartitioning(group_id#10, category_id#11, detail_id#36, 200), ENSURE_REQUIREMENTS, [id=#52]\n\n(12) HashAggregate\nInput [9]: [group_id#10, category_id#11, detail_id#36, sum#95L, sum#96, count#97L, max#98, min#99, count#100L]\nKeys [3]: [group_id#10, category_id#11, detail_id#36]\nFunctions [5]: [sum(cast(value#23 as bigint)), avg(cast(value#23 as bigint)), max(value#23), min(value#23), count(1)]\nAggregate Attributes [5]: [sum(cast(value#23 as bigint))#62L, avg(cast(value#23 as bigint))#64, max(value#23)#66, min(value#23)#68, count(1)#70L]\nResults [8]: [group_id#10, category_id#11, detail_id#36, sum(cast(value#23 as bigint))#62L AS total_value#63L, avg(cast(value#23 as bigint))#64 AS avg_value#65, max(value#23)#66 AS max_value#67, min(value#23)#68 AS min_value#69, count(1)#70L AS count#72L]\n\n(13) Exchange\nInput [8]: [group_id#10, category_id#11, detail_id#36, total_value#63L, avg_value#65, max_value#67, min_value#69, count#72L]\nArguments: rangepartitioning(total_value#63L DESC NULLS LAST, 200), ENSURE_REQUIREMENTS, [id=#55]\n\n(14) Sort\nInput [8]: [group_id#10, category_id#11, detail_id#36, total_value#63L, avg_value#65, max_value#67, min_value#69, count#72L]\nArguments: [total_value#63L DESC NULLS LAST], true, 0\n\n(15) AdaptiveSparkPlan\nOutput [8]: [group_id#10, category_id#11, detail_id#36, total_value#63L, avg_value#65, max_value#67, min_value#69, count#72L]\nArguments: isFinalPlan=false\n\n(16) Execute InsertIntoHadoopFsRelationCommand\nInput [8]: [group_id#10, category_id#11, detail_id#36, total_value#63L, avg_value#65, max_value#67, min_value#69, count#72L]\nArguments: hdfs://test-cpu-cluster-m/tmp/complex_large_job_output, false, CSV, [header=true, path=/tmp/complex_large_job_output], ErrorIfExists, [group_id, category_id, detail_id, total_value, avg_value, max_value, min_value, count]\n\n","sparkPlanInfo":{"nodeName":"Execute InsertIntoHadoopFsRelationCommand","simpleString":"Execute InsertIntoHadoopFsRelationCommand hdfs://test-cpu-cluster-m/tmp/complex_large_job_output, false, CSV, [header=true, path=/tmp/complex_large_job_output], ErrorIfExists, [group_id, category_id, detail_id, total_value, avg_value, max_value, min_value, count]","children":[{"nodeName":"AdaptiveSparkPlan","simpleString":"AdaptiveSparkPlan isFinalPlan=false","children":[{"nodeName":"Sort","simpleString":"Sort [total_value#63L DESC NULLS LAST], true, 0","children":[{"nodeName":"Exchange","simpleString":"Exchange rangepartitioning(total_value#63L DESC NULLS LAST, 200), ENSURE_REQUIREMENTS, [id=#55]","children":[{"nodeName":"HashAggregate","simpleString":"HashAggregate(keys=[group_id#10, category_id#11, detail_id#36], functions=[sum(cast(value#23 as bigint)), avg(cast(value#23 as bigint)), max(value#23), min(value#23), count(1)])","children":[{"nodeName":"Exchange","simpleString":"Exchange hashpartitioning(group_id#10, category_id#11, detail_id#36, 200), ENSURE_REQUIREMENTS, [id=#52]","children":[{"nodeName":"HashAggregate","simpleString":"HashAggregate(keys=[group_id#10, category_id#11, detail_id#36], functions=[partial_sum(cast(value#23 as bigint)), partial_avg(cast(value#23 as bigint)), partial_max(value#23), partial_min(value#23), partial_count(1)])","children":[{"nodeName":"Project","simpleString":"Project [group_id#10, category_id#11, value#23, detail_id#36]","children":[{"nodeName":"BroadcastHashJoin","simpleString":"BroadcastHashJoin [id#8], [id#34], Inner, BuildRight, false","children":[{"nodeName":"Project","simpleString":"Project [id#8, group_id#10, category_id#11, value#23]","children":[{"nodeName":"BroadcastHashJoin","simpleString":"BroadcastHashJoin [id#8], [id#22], Inner, BuildRight, false","children":[{"nodeName":"LocalTableScan","simpleString":"LocalTableScan [id#8, group_id#10, category_id#11]","children":[],"metadata":{},"metrics":[{"name":"number of output rows","accumulatorId":41,"metricType":"sum"}]},{"nodeName":"BroadcastExchange","simpleString":"BroadcastExchange HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#43]","children":[{"nodeName":"LocalTableScan","simpleString":"LocalTableScan [id#22, value#23]","children":[],"metadata":{},"metrics":[{"name":"number of output rows","accumulatorId":47,"metricType":"sum"}]}],"metadata":{},"metrics":[{"name":"time to broadcast","accumulatorId":46,"metricType":"timing"},{"name":"time to build","accumulatorId":45,"metricType":"timing"},{"name":"time to collect","accumulatorId":44,"metricType":"timing"},{"name":"number of output rows","accumulatorId":43,"metricType":"sum"},{"name":"data size","accumulatorId":42,"metricType":"size"}]}],"metadata":{},"metrics":[{"name":"number of output rows","accumulatorId":40,"metricType":"sum"}]}],"metadata":{},"metrics":[]},{"nodeName":"BroadcastExchange","simpleString":"BroadcastExchange HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [id=#47]","children":[{"nodeName":"LocalTableScan","simpleString":"LocalTableScan [id#34, detail_id#36]","children":[],"metadata":{},"metrics":[{"name":"number of output rows","accumulatorId":53,"metricType":"sum"}]}],"metadata":{},"metrics":[{"name":"time to broadcast","accumulatorId":52,"metricType":"timing"},{"name":"time to build","accumulatorId":51,"metricType":"timing"},{"name":"time to collect","accumulatorId":50,"metricType":"timing"},{"name":"number of output rows","accumulatorId":49,"metricType":"sum"},{"name":"data size","accumulatorId":48,"metricType":"size"}]}],"metadata":{},"metrics":[{"name":"number of output rows","accumulatorId":39,"metricType":"sum"}]}],"metadata":{},"metrics":[]}],"metadata":{},"metrics":[{"name":"spill size","accumulatorId":36,"metricType":"size"},{"name":"time in aggregation build","accumulatorId":37,"metricType":"timing"},{"name":"peak memory","accumulatorId":35,"metricType":"size"},{"name":"number of output rows","accumulatorId":34,"metricType":"sum"},{"name":"avg hash probe bucket list iters","accumulatorId":38,"metricType":"average"}]}],"metadata":{},"metrics":[{"name":"shuffle records written","accumulatorId":9,"metricType":"sum"},{"name":"shuffle write time","accumulatorId":10,"metricType":"nsTiming"},{"name":"records read","accumulatorId":7,"metricType":"sum"},{"name":"local bytes read","accumulatorId":5,"metricType":"size"},{"name":"fetch wait time","accumulatorId":6,"metricType":"timing"},{"name":"remote bytes read","accumulatorId":3,"metricType":"size"},{"name":"local blocks read","accumulatorId":2,"metricType":"sum"},{"name":"remote blocks read","accumulatorId":1,"metricType":"sum"},{"name":"data size","accumulatorId":0,"metricType":"size"},{"name":"remote bytes read to disk","accumulatorId":4,"metricType":"size"},{"name":"shuffle bytes written","accumulatorId":8,"metricType":"size"}]}],"metadata":{},"metrics":[{"name":"spill size","accumulatorId":31,"metricType":"size"},{"name":"time in aggregation build","accumulatorId":32,"metricType":"timing"},{"name":"peak memory","accumulatorId":30,"metricType":"size"},{"name":"number of output rows","accumulatorId":29,"metricType":"sum"},{"name":"avg hash probe bucket list iters","accumulatorId":33,"metricType":"average"}]}],"metadata":{},"metrics":[{"name":"shuffle records written","accumulatorId":20,"metricType":"sum"},{"name":"shuffle write time","accumulatorId":21,"metricType":"nsTiming"},{"name":"records read","accumulatorId":18,"metricType":"sum"},{"name":"local bytes read","accumulatorId":16,"metricType":"size"},{"name":"fetch wait time","accumulatorId":17,"metricType":"timing"},{"name":"remote bytes read","accumulatorId":14,"metricType":"size"},{"name":"local blocks read","accumulatorId":13,"metricType":"sum"},{"name":"remote blocks read","accumulatorId":12,"metricType":"sum"},{"name":"data size","accumulatorId":11,"metricType":"size"},{"name":"remote bytes read to disk","accumulatorId":15,"metricType":"size"},{"name":"shuffle bytes written","accumulatorId":19,"metricType":"size"}]}],"metadata":{},"metrics":[{"name":"sort time","accumulatorId":26,"metricType":"timing"},{"name":"peak memory","accumulatorId":27,"metricType":"size"},{"name":"spill size","accumulatorId":28,"metricType":"size"}]}],"metadata":{},"metrics":[]}],"metadata":{},"metrics":[{"name":"number of written files","accumulatorId":22,"metricType":"sum"},{"name":"written output","accumulatorId":23,"metricType":"size"},{"name":"number of output rows","accumulatorId":24,"metricType":"sum"},{"name":"number of dynamic part","accumulatorId":25,"metricType":"sum"}]},"time":1718390856188} -{"Event":"org.apache.spark.sql.execution.ui.SparkListenerSQLExecutionEnd","executionId":0,"time":1718390856380} -{"Event":"org.apache.spark.sql.execution.ui.SparkListenerSQLExecutionStart","executionId":1,"description":"show at :24","details":"org.apache.spark.sql.Dataset.show(Dataset.scala:794)\n$line34.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.(:24)\n$line34.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw.(:28)\n$line34.$read$$iw$$iw$$iw$$iw$$iw$$iw.(:30)\n$line34.$read$$iw$$iw$$iw$$iw$$iw.(:32)\n$line34.$read$$iw$$iw$$iw$$iw.(:34)\n$line34.$read$$iw$$iw$$iw.(:36)\n$line34.$read$$iw$$iw.(:38)\n$line34.$read$$iw.(:40)\n$line34.$read.(:42)\n$line34.$read$.(:46)\n$line34.$read$.()\n$line34.$eval$.$print$lzycompute(:7)\n$line34.$eval$.$print(:6)\n$line34.$eval.$print()\nsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\nsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\nsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\njava.lang.reflect.Method.invoke(Method.java:498)\nscala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:747)","physicalPlanDescription":"== Physical Plan ==\nLocalTableScan (1)\n\n\n(1) LocalTableScan\nOutput [2]: [Name#111, Value#112]\nArguments: [Name#111, Value#112]\n\n","sparkPlanInfo":{"nodeName":"LocalTableScan","simpleString":"LocalTableScan [Name#111, Value#112]","children":[],"metadata":{},"metrics":[{"name":"number of output rows","accumulatorId":54,"metricType":"sum"}]},"time":1718392657665} -{"Event":"org.apache.spark.sql.execution.ui.SparkListenerSQLExecutionEnd","executionId":1,"time":1718392657754} -{"Event":"org.apache.spark.sql.execution.ui.SparkListenerSQLExecutionStart","executionId":2,"description":"show at :24","details":"org.apache.spark.sql.Dataset.show(Dataset.scala:794)\n$line36.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.(:24)\n$line36.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw.(:28)\n$line36.$read$$iw$$iw$$iw$$iw$$iw$$iw.(:30)\n$line36.$read$$iw$$iw$$iw$$iw$$iw.(:32)\n$line36.$read$$iw$$iw$$iw$$iw.(:34)\n$line36.$read$$iw$$iw$$iw.(:36)\n$line36.$read$$iw$$iw.(:38)\n$line36.$read$$iw.(:40)\n$line36.$read.(:42)\n$line36.$read$.(:46)\n$line36.$read$.()\n$line36.$eval$.$print$lzycompute(:7)\n$line36.$eval$.$print(:6)\n$line36.$eval.$print()\nsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\nsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\nsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\njava.lang.reflect.Method.invoke(Method.java:498)\nscala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:747)","physicalPlanDescription":"== Physical Plan ==\nLocalTableScan (1)\n\n\n(1) LocalTableScan\nOutput [3]: [Name#125, Value#126, ValueSquared#127]\nArguments: [Name#125, Value#126, ValueSquared#127]\n\n","sparkPlanInfo":{"nodeName":"LocalTableScan","simpleString":"LocalTableScan [Name#125, Value#126, ValueSquared#127]","children":[],"metadata":{},"metrics":[{"name":"number of output rows","accumulatorId":55,"metricType":"sum"}]},"time":1718392658027} -{"Event":"org.apache.spark.sql.execution.ui.SparkListenerSQLExecutionEnd","executionId":2,"time":1718392658069} -{"Event":"SparkListenerApplicationEnd","Timestamp":1718393600896} diff --git a/core/src/test/resources/spark-events-qualification/cluster_information/eventlog_4nodes_8cores_dynamic_alloc.zstd b/core/src/test/resources/spark-events-qualification/cluster_information/eventlog_4nodes_8cores_dynamic_alloc.zstd new file mode 100644 index 000000000..494fcb881 Binary files /dev/null and b/core/src/test/resources/spark-events-qualification/cluster_information/eventlog_4nodes_8cores_dynamic_alloc.zstd differ diff --git a/core/src/test/scala/com/nvidia/spark/rapids/tool/planparser/SqlPlanParserSuite.scala b/core/src/test/scala/com/nvidia/spark/rapids/tool/planparser/SqlPlanParserSuite.scala index 99eb28e5f..8d958f6c3 100644 --- a/core/src/test/scala/com/nvidia/spark/rapids/tool/planparser/SqlPlanParserSuite.scala +++ b/core/src/test/scala/com/nvidia/spark/rapids/tool/planparser/SqlPlanParserSuite.scala @@ -22,7 +22,7 @@ import scala.collection.mutable import scala.util.control.NonFatal import com.nvidia.spark.rapids.BaseTestSuite -import com.nvidia.spark.rapids.tool.{EventLogPathProcessor, ToolTestUtils} +import com.nvidia.spark.rapids.tool.{EventLogPathProcessor, PlatformFactory, ToolTestUtils} import com.nvidia.spark.rapids.tool.qualification._ import org.scalatest.Matchers.{be, contain, convertToAnyShouldWrapper} import org.scalatest.exceptions.TestFailedException @@ -78,7 +78,8 @@ class SQLPlanParserSuite extends BaseTestSuite { val pluginTypeChecker = new PluginTypeChecker() assert(allEventLogs.size == 1) val appResult = QualificationAppInfo.createApp(allEventLogs.head, hadoopConf, - pluginTypeChecker, reportSqlLevel = false, mlOpsEnabled = false, penalizeTransitions = true) + pluginTypeChecker, reportSqlLevel = false, mlOpsEnabled = false, penalizeTransitions = true, + PlatformFactory.createInstance()) appResult match { case Right(app) => app case Left(_) => throw new AssertionError("Cannot create application") diff --git a/core/src/test/scala/com/nvidia/spark/rapids/tool/profiling/AutoTunerSuite.scala b/core/src/test/scala/com/nvidia/spark/rapids/tool/profiling/AutoTunerSuite.scala index 953d7cfe7..cc2f806eb 100644 --- a/core/src/test/scala/com/nvidia/spark/rapids/tool/profiling/AutoTunerSuite.scala +++ b/core/src/test/scala/com/nvidia/spark/rapids/tool/profiling/AutoTunerSuite.scala @@ -223,7 +223,8 @@ class AutoTunerSuite extends FunSuite with BeforeAndAfterEach with Logging { } test("Load non-existing cluster properties") { - val autoTuner = AutoTuner.buildAutoTuner("non-existing.yaml", getGpuAppMockInfoProvider) + val platform = PlatformFactory.createInstance(clusterProperties = None) + val autoTuner = AutoTuner.buildAutoTuner(getGpuAppMockInfoProvider, platform) val (properties, comments) = autoTuner.getRecommendedProperties() val autoTunerOutput = Profiler.getAutoTunerResultsAsString(properties, comments) // scalastyle:off line.size.limit diff --git a/core/src/test/scala/com/nvidia/spark/rapids/tool/qualification/QualificationSuite.scala b/core/src/test/scala/com/nvidia/spark/rapids/tool/qualification/QualificationSuite.scala index 9fe3e90cf..8f5f11a3c 100644 --- a/core/src/test/scala/com/nvidia/spark/rapids/tool/qualification/QualificationSuite.scala +++ b/core/src/test/scala/com/nvidia/spark/rapids/tool/qualification/QualificationSuite.scala @@ -1592,29 +1592,27 @@ class QualificationSuite extends BaseTestSuite { val expectedClusterInfoMap: Seq[(String, Option[ExistingClusterInfo])] = Seq( "eventlog_2nodes_8cores" -> // 2 executor nodes with 8 cores. Some(ExistingClusterInfo(vendor = PlatformNames.DEFAULT, coresPerExecutor = 8, - numExecsPerNode = 1, numWorkerNodes = 2, executorHeapMemory = 0L, - driverHost = Some("10.10.10.100"))), + numExecsPerNode = 1, numExecutors = 2, numWorkerNodes = 2, executorHeapMemory = 0L, + dynamicAllocationEnabled = false, "N/A", "N/A", "N/A", driverHost = Some("10.10.10.100"))), "eventlog_3nodes_12cores_multiple_executors" -> // 3 nodes, each with 2 executors having 12 cores. Some(ExistingClusterInfo(vendor = PlatformNames.DEFAULT, coresPerExecutor = 12, - numExecsPerNode = 2, numWorkerNodes = 3, executorHeapMemory = 0L, - driverHost = Some("10.59.184.210"))), - // TODO: Currently we do not handle dynamic allocation while calculating number of nodes. For - // calculating nodes, we look at unique active hosts at the end of application. In this test - // case, the application used all 4 nodes initially (8 executors total), and then 7 executors were - // removed. In the end, only 1 executor was active on 1 node. This test case should be updated - // once we handle dynamic allocation. - "eventlog_4nodes_8cores_dynamic_alloc" -> // 4 nodes, each with 2 executor having 8 cores, with dynamic allocation. - Some(ExistingClusterInfo(vendor = PlatformNames.DEFAULT, coresPerExecutor = 8, - numExecsPerNode = 2, numWorkerNodes = 1, executorHeapMemory = 0L, - driverHost = Some("test-cpu-cluster-m"))), + numExecsPerNode = -1, numExecutors = 4, numWorkerNodes = 3, executorHeapMemory = 0L, + dynamicAllocationEnabled = false, "N/A", "N/A", "N/A", driverHost = Some("10.59.184.210"))), + "eventlog_4nodes_8cores_dynamic_alloc.zstd" -> // using dynamic allocation, total of 5 nodes, each with max 7 + // executor running having 4 cores. At the end it had 1 active executor. + Some(ExistingClusterInfo(vendor = PlatformNames.DEFAULT, coresPerExecutor = 4, + numExecsPerNode = -1, numExecutors = 7, numWorkerNodes = 5, executorHeapMemory = 20480L, + dynamicAllocationEnabled = true, dynamicAllocationMaxExecutors = "2147483647", + dynamicAllocationMinExecutors = "0", dynamicAllocationInitialExecutors = "2", + driverHost = Some("10.10.6.9"))), "eventlog_3nodes_12cores_variable_cores" -> // 3 nodes with varying cores: 8, 12, and 8, each with 1 executor. Some(ExistingClusterInfo(vendor = PlatformNames.DEFAULT, coresPerExecutor = 12, - numExecsPerNode = 1, numWorkerNodes = 3, executorHeapMemory = 0L, - driverHost = Some("10.10.10.100"))), + numExecsPerNode = 1, numExecutors = 3, numWorkerNodes = 3, executorHeapMemory = 0L, + dynamicAllocationEnabled = false, "N/A", "N/A", "N/A", driverHost = Some("10.10.10.100"))), "eventlog_3nodes_12cores_exec_removed" -> // 2 nodes, each with 1 executor having 12 cores, 1 executor removed. Some(ExistingClusterInfo(vendor = PlatformNames.DEFAULT, coresPerExecutor = 12, - numExecsPerNode = 1, numWorkerNodes = 2, executorHeapMemory = 0L, - driverHost = Some("10.10.10.100"))), + numExecsPerNode = 1, numExecutors = 2, numWorkerNodes = 2, executorHeapMemory = 0L, + dynamicAllocationEnabled = false, "N/A", "N/A", "N/A", driverHost = Some("10.10.10.100"))), "eventlog_driver_only" -> None // Event log with driver only ) // scalastyle:on line.size.limit @@ -1632,8 +1630,11 @@ class QualificationSuite extends BaseTestSuite { ExistingClusterInfo(vendor = PlatformNames.DATABRICKS_AWS, coresPerExecutor = 8, numExecsPerNode = 1, + numExecutors = 2, numWorkerNodes = 2, executorHeapMemory = 0L, + dynamicAllocationEnabled = false, + "N/A", "N/A", "N/A", driverNodeType = Some("m6gd.2xlarge"), workerNodeType = Some("m6gd.2xlarge"), driverHost = Some("10.10.10.100"), @@ -1643,8 +1644,11 @@ class QualificationSuite extends BaseTestSuite { ExistingClusterInfo(vendor = PlatformNames.DATABRICKS_AZURE, coresPerExecutor = 8, numExecsPerNode = 1, + numExecutors = 2, numWorkerNodes = 2, executorHeapMemory = 0L, + dynamicAllocationEnabled = false, + "N/A", "N/A", "N/A", driverNodeType = Some("Standard_E8ds_v4"), workerNodeType = Some("Standard_E8ds_v4"), driverHost = Some("10.10.10.100"), @@ -1654,23 +1658,32 @@ class QualificationSuite extends BaseTestSuite { ExistingClusterInfo(vendor = PlatformNames.DATAPROC, coresPerExecutor = 8, numExecsPerNode = 1, + numExecutors = 2, numWorkerNodes = 2, executorHeapMemory = 0L, + dynamicAllocationEnabled = false, + "N/A", "N/A", "N/A", driverHost = Some("dataproc-test-m.c.internal")), PlatformNames.EMR -> ExistingClusterInfo(vendor = PlatformNames.EMR, coresPerExecutor = 8, numExecsPerNode = 1, + numExecutors = 2, numWorkerNodes = 2, executorHeapMemory = 0L, + dynamicAllocationEnabled = false, + "N/A", "N/A", "N/A", driverHost = Some("10.10.10.100"), clusterId = Some("j-123AB678XY321")), PlatformNames.ONPREM -> ExistingClusterInfo(vendor = PlatformNames.ONPREM, coresPerExecutor = 8, numExecsPerNode = 1, + numExecutors = 2, numWorkerNodes = 2, executorHeapMemory = 0L, + dynamicAllocationEnabled = false, + "N/A", "N/A", "N/A", driverHost = Some("10.10.10.100")) ) diff --git a/user_tools/tests/spark_rapids_tools_e2e/features/installation_checks.feature b/user_tools/tests/spark_rapids_tools_e2e/features/installation_checks.feature index 3edce082f..a05191d46 100644 --- a/user_tools/tests/spark_rapids_tools_e2e/features/installation_checks.feature +++ b/user_tools/tests/spark_rapids_tools_e2e/features/installation_checks.feature @@ -28,10 +28,10 @@ Feature: Tool Installation Checks Examples: | platform | cli | expected_stdout | - | dataproc | gcloud | 2 x n1-standard-16 (4 T4 each) | + | dataproc | gcloud | 3 x n1-standard-16 (4 T4 each) | | emr | aws | 10 x g5.xlarge | | databricks-aws | aws | 10 x g5.xlarge | - | databricks-azure | az | 2 x Standard_NC64as_T4_v3 | + | databricks-azure | az | 3 x Standard_NC64as_T4_v3 | @test_id_IC_0002 Scenario: Environment has missing java