我试图了解为什么会发生以下情况:
- 我有一个 Docker 容器,其中 Yarn 和 Spark 运行良好,只是该容器的时间戳比我想要的少了 X 小时。因此,当我运行时,
date
它返回的时间戳比当前时间戳少了 X 小时。 - 通过在命令中传递 TZ 环境变量来修复上述问题
docker run
,因此当我输入时date
我会得到正确的时间戳。 - 但是,当我
spark-submit
在 YARN 中运行(集群模式为 yarn)应用程序时,AM 日志中的时间戳仍然是错误的(减去 X 小时)。 spark-submit
通过在:-conf 'spark.executor.extraJavaOptions=-Duser.timezone'
和中传递 JVM 的时区设置来解决上述问题-conf 'spark.driver.extraJavaOptions=-Duser.timezone'
。- 这告诉我 YARN 使用的 JVM 存在问题。但是,当尝试从 SparkScala shell 获取日期时间时,它返回了正确的时间(使用
system.currenttimemillis()
),而无需在步骤 4 中指定任何 JVM 设置。
问题
- 我如何知道 YARN Application Master 容器启动时使用的是哪个 JVM,以及 SparkScala shell 使用的是哪个 JVM?
- 为什么在 shell/bash 和 spark-submit 中运行时会有不同的时间戳?