【问题标题】:What specific Spark libraries are 'Provided'?“提供”了哪些特定的 Spark 库?
【发布时间】:2016-03-03 03:42:46
【问题描述】:

在官方Sparkdocumentation中解释了application jar这个词对应于:

包含用户的 Spark 应用程序的 jar。在某些情况下,用户会希望创建一个“超级 jar”,其中包含他们的应用程序及其依赖项。用户的 jar 不应包含 Hadoop 或 Spark 库,但是,这些将在运行时添加

这可以通过在 maven 或 sbt 中使用 'Provided' 范围来轻松解决:

"org.apache.spark" % "spark-core_2.10" % sparkVersion % Provided

但是,我可能在这里遗漏了一些明显的东西,但我找不到直接的答案,在运行时将添加哪些特定库?它会只是核心(例如 spark-core、hadoop-core)还是会添加其他一些(例如:spark-streaming、hadoop-hdfs)?

有没有办法检查这一点并获取将在运行时添加并因此可以标记为已提供的 Spark 依赖项的实际列表?

【问题讨论】:

    标签: hadoop apache-spark


    【解决方案1】:

    简短的回答是:从download page 下载 Spark 时选择的所有 Spark 库和 hadoop 版本。

    更长的答案是:这取决于您使用的部署模式:

    1. 本地模式:因为本地模式下只有一个 JVM,那就是驱动程序应用程序的 JVM - 那么这取决于您如何打包驱动程序应用程序。如果您没有(例如直接从 IDE 运行),那么将依赖项定义为“已提供”并没有任何意义,因此您在 SBT 文件中拥有的任何库都将在运行时出现。如果您打包您的驱动程序应用程序并尝试使用标记为已提供的 Spark 运行它,您可能会看到失败,除非您以其他方式将这些 jar 混入其中(但无论如何,本地模式并不是真正的意思......) .

    2. 独立模式:如果您将下载页面上提供的预构建包之一部署到集群(主计算机和工作计算机)上,它们包含 Spark 的所有库(包括 Spark SQL、Streaming、GraphX...)和您选择的 Hadoop 版本。如果您部署了自己构建的 jar,那么这取决于您打包的内容和方式...

    3. Yarn 模式:当您将 Spark 应用程序提交给 YARN 管理器时,您可以设置应用程序要使用的 Spark jar 位置(通过参数 spark.yarn.jar) - 无论那个 jar(或罐子)包含将被加载。再一次 - 如果该 jar 是预构建的 jar 之一,它包含所有 Spark 库和选择的 Hadoop 版本

    【讨论】:

    • 这个答案很明确,也很中肯。就我而言,解释这三种模式特别有用。顺便说一句,当我们处于特定于供应商的世界时,事情会变得更加复杂,并且 jar 不一定是标准的,但即使在这种情况下,这个答案也提供了获取正确信息的必要提示
    猜你喜欢
    • 2010-10-12
    • 1970-01-01
    • 2010-11-19
    • 2013-03-07
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    相关资源
    最近更新 更多