在官方Spark documentation中,解释了术语 application jar 对应于:
包含用户Spark应用程序的jar。在某些情况下,用户需要创建一个" uber jar"包含其应用程序及其依赖项。用户的jar不应该包含Hadoop或Spark库,但是,这些将在运行时添加
使用'提供的'可以很容易地解决这个问题。范围在maven或sbt:
"org.apache.spark" % "spark-core_2.10" % sparkVersion % Provided
但是,我可能会遗漏一些明显的东西,但我找不到一个直接的答案,在运行时添加的具体库是什么?它只是核心的(例如spark-core,hadoop-core)还是其他一些(例如:spark-streaming,hadoop-hdfs)也会被添加?
有没有办法检查这个并获得将在运行时添加的Spark依赖项的实际列表,因此可以标记为提供?
答案 0 :(得分:4)
简短的回答是:从download page下载Spark后,您选择的所有Spark库和hadoop版本。
答案越长:它取决于您使用的部署模式:
本地模式:由于本地模式中只有一个JVM,而且是驱动程序应用程序的JVM - 那么这取决于你的方式打包你的驱动程序如果你没有(例如直接从IDE运行),那么将依赖关系定义为"提供"并不代表任何东西,因此您在SBT文件中的任何库都将存在于运行时。如果您打包驱动程序应用程序并尝试使用标记为提供的Spark运行它,您可能会看到失败,除非您以其他方式将这些jar放入混合中(但本地模式并不是真的意味着它...)。
独立模式:如果您将下载页面上提供的预构建软件包之一部署到您的群集(主计算机和工作计算机)上,它们包含所有Spark' s库(包括Spark SQL,Streaming,GraphX ...)和您选择的Hadoop版本。如果您部署了自己构建的罐子 - 那么,这取决于您打包的内容和方式......
纱线模式:当您向YARN管理器提交Spark应用程序时,您需要为要使用的应用程序设置Spark jar位置(通过参数spark.yarn.jar
) - 无论如何将加载jar(或jar)包含。再次 - 如果该jar是预构建的jar之一,它包含所有Spark库和所选的Hadoop版本