乐于分享
好东西不私藏

Spark 源码 | SparkSubmitArguments 参数解析(三)

Spark 源码 | SparkSubmitArguments 参数解析(三)

前言

在第二篇文章 Spark 源码 | SparkSubmit 提交流程分析(二) 中,我们分析了 SparkSubmit 的提交流程,其中 doSubmit 方法会调用 parseArguments 解析命令行参数。本文详细介绍参数解析的过程。

版本

Spark 3.2.3

SparkSubmitArguments 概述

SparkSubmitArguments 继承自 SparkSubmitArgumentsParser,用于解析 spark-submit 命令行参数。

// SparkSubmitArguments.scalaprivate[deploy] classSparkSubmitArguments(args: Seq[String], env: Map[StringString] = sys.env)extendsSparkSubmitArgumentsParserwithLogging {

字段定义

// --master MASTER_URL// Spark Master 地址,如 spark://host:port, mesos://host:port, yarn, k8s://https://host:port, local(默认 local[*])var master: String = null// --deploy-mode DEPLOY_MODE// 部署模式,client 表示在本地启动 Driver,cluster 表示在集群的 Worker 节点上启动 Driver(默认 client)var deployMode: String = null// --executor-memory MEM// 每个 Executor 的内存(如 1000M, 2G)(默认 1G)var executorMemory: String = null// --executor-cores NUM// 每个 Executor 的 CPU 核心数(YARN 和 K8S 模式默认 1,Standalone 模式默认为 Worker 上的所有核心)var executorCores: String = null// --total-executor-cores NUM// 所有 Executor 的总 CPU 核心数var totalExecutorCores: String = null// --properties-file FILE// 配置文件路径,用于加载额外的 Spark 配置。如果未指定,则默认查找 conf/spark-defaults.confvar propertiesFile: String = null// --driver-memory MEM// Driver 的内存(如 1000M, 2G)var driverMemory: String = null// --driver-class-path// 额外添加到 Driver classpath 的路径。注意:通过 --jars 添加的 jar 包会自动包含在 classpath 中var driverExtraClassPath: String = null// --driver-library-path// 额外添加到 Driver 库路径的环境变量var driverExtraLibraryPath: String = null// --driver-java-options// 传递给 Driver 的额外 Java 选项var driverExtraJavaOptions: String = null// --queue QUEUE_NAME// YARN 队列名称(默认 "default")var queue: String = null// --num-executors NUM// Executor 的数量(默认 2)。启用动态分配时,实际初始数量取 --num-executors、// spark.dynamicAllocation.minExecutors 和 spark.dynamicAllocation.initialExecutors 三者中的最大值var numExecutors: String = null// --files FILES// 逗号分隔的文件列表,会被放置在每个 Executor 的工作目录中。在 Executor 中可通过 SparkFiles.get(fileName) 获取文件路径var files: String = null// --archives ARCHIVES// 逗号分隔的归档文件列表,会被提取到每个 Executor 的工作目录中var archives: String = null// --class CLASS_NAME// 应用程序的主类(用于 Java / Scala 应用)var mainClass: String = null// <app jar | python file | R file>// 第一个未被识别的选项被视为"主资源"(primary resource)var primaryResource: String = null// --name NAME// 应用程序的名称var name: String = null// 应用程序参数var childArgs: ArrayBuffer[String] = newArrayBuffer[String]()// --jars JARS// 逗号分隔的 JAR 包列表,会被添加到 Driver 和 Executor 的 classpath 中var jars: String = null// --packages// 逗号分隔的 Maven 坐标列表,用于添加 JAR 包到 Driver 和 Executor 的 classpath。// 会先搜索本地 Maven 仓库,然后是 Maven 中央仓库,以及 --repositories 指定的远程仓库。// 坐标格式为 groupId:artifactId:versionvar packages: String = null// --repositories// 逗号分隔的远程仓库地址,用于搜索 --packages 指定的 Maven 坐标var repositories: String = nullvar ivyRepoPath: String = nullvar ivySettingsPath: Option[String] = None// --exclude-packages// 逗号分隔的 groupId:artifactId 列表,在解析 --packages 提供的依赖时排除这些包,以避免依赖冲突var packagesExclusions: String = null// --verbose, -v// 打印额外的调试输出var verbose: Boolean = falsevar isPython: Boolean = false// --py-files PY_FILES// 逗号分隔的 .zip、.egg 或 .py 文件列表,会被添加到 Python 应用的 PYTHONPATH 中var pyFiles: String = nullvar isR: Boolean = falsevar action: SparkSubmitAction = null// 通过 `--conf` 和配置文件加载的 Spark 配置属性val sparkProperties: HashMap[StringString] = newHashMap[StringString]()// --proxy-user NAME// 提交应用程序时模拟的用户名。不能与 --principal / --keytab 同时使用var proxyUser: String = null// --principal PRINCIPAL// 用于登录 KDC 的 Principal(仅 YARN/K8s 模式)var principal: String = null// --keytab KEYTAB// 包含上述 Principal 对应 keytab 的文件路径var keytab: String = nullprivatevar dynamicAllocationEnabled: Boolean = false// --supervise// 如果设置,Driver 失败时会自动重启(仅 Spark Standalone 或 Mesos 的 cluster 部署模式)var supervise: Boolean = false// --driver-cores NUM// Driver 使用的 CPU 核心数,仅在 cluster 模式可用(默认 1)var driverCores: String = null// --kill SUBMISSION_ID// 如果设置,杀死指定的 Driver(Spark Standalone、Mesos 或 K8s 的 cluster 部署模式)var submissionToKill: String = null// --status SUBMISSION_ID// 如果设置,查询指定 Driver 的状态var submissionToRequestStatusFor: String = null// 内部使用,用于 REST APIvar useRest: Boolean = false

解析流程

1. 构造函数调用顺序

// Set parameters from command line arguments// 从命令行参数设置参数parse(args.asJava)// Populate `sparkProperties` map from properties file// 从属性文件填充 sparkPropertiesmergeDefaultSparkProperties()// Remove keys that don't start with "spark." from `sparkProperties`.// 从 sparkProperties 中移除不以 "spark." 开头的键ignoreNonSparkProperties()// Use `sparkProperties` map along with env vars to fill in any missing parameters// 使用 sparkProperties 和环境变量填充缺失的参数loadEnvironmentArguments()useRest = sparkProperties.getOrElse("spark.master.rest.enabled""false").toBooleanvalidateArguments()

解析顺序:

  1. 1. parse(args.asJava) - 从命令行参数设置参数
  2. 2. mergeDefaultSparkProperties() - 从属性文件填充 sparkProperties
  3. 3. ignoreNonSparkProperties() - 从 sparkProperties 中移除不以 "spark." 开头的键
  4. 4. loadEnvironmentArguments() - 使用 sparkProperties 和环境变量填充缺失的参数
  5. 5. validateArguments() - 验证参数

2. 解析命令行参数

继承自 SparkSubmitArgumentsParser(继承自 SparkSubmitOptionParser),重写 handlehandleUnknownhandleExtraArgs 三个回调方法处理参数。

SparkSubmitOptionParser parse 方法解析逻辑

parse(List<String> args) 方法的遍历逻辑:

// 遍历所有参数for (idx = 0; idx < args.size(); idx++) {// 支持 --master=spark://xxx 格式(等号分隔)// 检查是否是 --xxx=value 格式,若是则拆分Matcherm= eqSeparatedOpt.matcher(arg);if (m.matches()) {    arg = m.group(1);    value = m.group(2);  }// Look for options with a value.// 第一步:在 opts 数组中查找(带参数的选项,如 --master, --class 等)Stringname= findCliOption(arg, opts);if (name != null) {// If the option requires a value, fetch it.// 命令行格式:--选项 值(分开的两参数),如 --master yarnif (value == null) {if (idx == args.size() - 1) {thrownewIllegalArgumentException(            String.format("Missing argument for option '%s'.", arg));      }      idx++;      value = args.get(idx);    }if (!handle(name, value)) {// handle 返回 false 的情况:--version(--help 会直接退出,不会返回)break;    }continue;  }// Look for a switch.// 第二步:在 switches 数组中查找(不带参数的选项,如 --help, --verbose 等)  name = findCliOption(arg, switches);if (name != null) {// handle 返回 false 的情况:--version(打印版本后退出)if (!handle(name, null)) {break;    }continue;  }// 第三步:既不在 opts 也不在 switches 中,调用 handleUnknown 处理未知选项// SparkSubmitArguments 中将第一个未知选项作为 primaryResource,handleUnknown 始终返回 false// 返回 false 则 break 退出循环,剩余参数作为应用参数if (!handleUnknown(arg)) {break;  }}// 跳过第一个未知选项(primaryResource),只把剩余参数传给 handleExtraArgs// 如果正常遍历完(无 break),idx == args.size(),不需要 idx++// 如果因 break 提前退出,idx < args.size(),需要跳过 primaryResourceif (idx < args.size()) {  idx++;}// 第四步:解析完成后,剩余的参数作为应用参数调用 handleExtraArgs// 注意:循环可能因 break 提前退出,导致 idx < args.size()// 如:handleUnknown 返回 false 时(SparkSubmitArguments 将第一个未知选项作为 primaryResource)// spark-submit 命令格式:spark-submit [options] <app jar | python file> [app arguments]// 剩余的参数即 [app arguments],如 arg1 arg2 arg3handleExtraArgs(args.subList(idx, args.size()));

SparkSubmitArguments 重写的方法

1. handle 方法

处理已知的带参数选项,根据 opt(选项名)将 value 赋值给对应的字段。其中 CONF case 会直接将 --conf 的值存入 sparkProperties

overrideprotecteddefhandle(opt: String, value: String): Boolean = {  opt match {caseNAME =>      name = valuecaseMASTER =>      master = valuecaseCLASS =>      mainClass = valuecaseDEPLOY_MODE =>if (value != "client" && value != "cluster") {        error("--deploy-mode must be either \"client\" or \"cluster\"")      }      deployMode = valuecaseNUM_EXECUTORS =>      numExecutors = value// ... 其他参数// `--conf` KEY=VALUE 格式的配置项,直接存入 sparkProperties// 由于是直接赋值(覆盖写),后续合并配置文件时,`--conf` 的值会被保留caseCONF =>val (confName, confValue) = SparkSubmitUtils.parseSparkConfProperty(value)      sparkProperties(confName) = confValue// ... 其他参数  }// --version 时返回 false,其他情况返回 true  action != SparkSubmitAction.PRINT_VERSION}
2. handleUnknown 方法

处理未知选项,将第一个未知选项作为 primaryResource(主资源),如 myapp.jar、spark-shell、hdfs:///path/to/app.jar:

overrideprotecteddefhandleUnknown(opt: String): Boolean = {// 如果选项以 "-" 开头但不在已知选项中,报错if (opt.startsWith("-")) {    error(s"Unrecognized option '$opt'.")  }// 设置 primaryResource(主资源),如 myapp.jar、spark-shell、hdfs:///path/to/app.jar// 如果不是 shell(如 spark-shell、pyspark-shell、sparkr-shell)或内部选项(spark-internal),则通过 Utils.resolveURI 解析为标准 URI 格式// 如:./app.jar -> file:/path/to/app.jar,/path/app.jar -> file:/path/app.jar,hdfs://xxx -> hdfs://xxx// 否则直接作为字符串(如 spark-shell 用于交互式界面,spark-internal 用于测试场景)  primaryResource =if (!SparkSubmit.isShell(opt) && !SparkSubmit.isInternal(opt)) {Utils.resolveURI(opt).toString    } else {      opt    }// 判断是否为 Python 或 R 应用  isPython = SparkSubmit.isPython(opt)  isR = SparkSubmit.isR(opt)// 始终返回 false,退出循环false}
3. handleExtraArgs 方法

将解析剩余的应用参数添加到 childArgs:

overrideprotecteddefhandleExtraArgs(extra: JList[String]): Unit = {// 在 SparkSubmitArguments 类中只有这一处赋值,没看到有其它地方赋值,感觉两种写法效果可能是相同的// 使用 ++= 追加而非 = 赋值,可能为了和 SparkSubmit.scala 中对 childArgs 的操作风格保持一致// childArgs 是 ArrayBuffer[String],extra.asScala 是 Seq[String]// 使用 ++= 避免了显式类型转换(如 childArgs = extra.asScala.to[ArrayBuffer])  childArgs ++= extra.asScala}

3. 合并默认属性文件

将配置文件(默认 conf/spark-defaults.conf)中的属性合并到 sparkProperties 中。如果用户通过 --conf 指定了相同的配置项,则保留 --conf 的值(优先级更高)。

privatedefmergeDefaultSparkProperties(): Unit = {// Use common defaults file, if not specified by user// 如果用户未指定,则使用默认属性文件  propertiesFile = Option(propertiesFile).getOrElse(Utils.getDefaultPropertiesFile(env))// Honor `--conf` before the defaults file// `--conf` 的优先级高于默认属性文件  defaultSparkProperties.foreach { case (k, v) =>if (!sparkProperties.contains(k)) {      sparkProperties(k) = v    }  }}

4. 过滤非 Spark 属性

将 sparkProperties 中不以 spark. 开头的键移除掉。sparkProperties 中的值来自 --conf 和配置文件,不包含环境变量等来源。

privatedefignoreNonSparkProperties(): Unit = {  sparkProperties.keys.foreach { k =>if (!k.startsWith("spark.")) {      sparkProperties -= k      logWarning(s"Ignoring non-Spark config property: $k")    }  }}

5. 加载环境变量参数

将命令行未指定的参数从环境变量和 sparkProperties 中补充进来。例如:master 未在命令行指定时,会依次从 spark.master 配置、环境变量 MASTER 中获取。

privatedefloadEnvironmentArguments(): Unit = {// Load arguments from environment variables, Spark properties etc.// 从环境变量、Spark 属性等加载参数  master = Option(master)    .orElse(sparkProperties.get("spark.master"))    .orElse(env.get("MASTER"))    .orNull// ... 其他参数类似}

优先级:命令行参数 > sparkProperties > 环境变量 > 默认值

6. 参数验证

验证必填参数是否存在以及参数值是否合法。例如:必须指定 primaryResource(主资源),内存/核心数必须为正数,YARN 模式必须设置 HADOOP_CONF_DIR 等。

privatedefvalidateSubmitArguments(): Unit = {// Ensure that required fields exists. Call this only once all defaults are loaded.// 确保必填字段存在。调用此方法时所有默认值已加载完成if (args.length == 0) {    printUsageAndExit(-1)  }if (primaryResource == null) {    error("Must specify a primary resource (JAR or Python or R file)")  }// ... 其他验证}

参数优先级

来源
优先级
命令行参数
1(最高)
--conf
2
配置文件
3
环境变量
4
默认值
5(最低)

总结

SparkSubmitArguments 的解析流程:

  1. 1. parse - 解析命令行参数
  2. 2. mergeDefaultSparkProperties - 合并配置文件中的属性
  3. 3. ignoreNonSparkProperties - 过滤非 spark. 开头的属性
  4. 4. loadEnvironmentArguments - 用环境变量和 sparkProperties 填充空缺参数
  5. 5. validateArguments - 验证参数合法性

优先级:命令行 > --conf > 配置文件 > 环境变量 > 默认值

下一次我们将分析 Yarn Client、Yarn Cluster、Standalone Client、Standalone Cluster 模式的详细提交流程。

🧐 分享、点赞、在看,给个3连击👇

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-11 20:21:56 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/845223.html
  2. 运行时间 : 0.188424s [ 吞吐率:5.31req/s ] 内存消耗:4,746.63kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=78113cc20281ec0185248b2a505f8fe7
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001055s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001937s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000787s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000738s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001654s ]
  6. SELECT * FROM `set` [ RunTime:0.000650s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001959s ]
  8. SELECT * FROM `article` WHERE `id` = 845223 LIMIT 1 [ RunTime:0.001356s ]
  9. UPDATE `article` SET `lasttime` = 1783772516 WHERE `id` = 845223 [ RunTime:0.035589s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000938s ]
  11. SELECT * FROM `article` WHERE `id` < 845223 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001612s ]
  12. SELECT * FROM `article` WHERE `id` > 845223 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001217s ]
  13. SELECT * FROM `article` WHERE `id` < 845223 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002536s ]
  14. SELECT * FROM `article` WHERE `id` < 845223 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.003280s ]
  15. SELECT * FROM `article` WHERE `id` < 845223 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.002520s ]
0.190214s