2016-03-02 24 views
3

在官方火花documentation它解释的是,术语应用罐子对应于:什么特定的Spark库“提供”?

甲包含用户的火花应用罐子。在某些情况下,用户需要创建一个包含应用程序及其依赖关系的“超级jar”。用户的罐子不应该包括Hadoop的或Spark库,但是,这些将在运行时添加

这可以通过使用很容易照顾“提供”的行家或SBT范围:

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

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

有没有办法来检查这个并获得实际的Spark依赖项列表,这些依赖项将在运行时添加,因此可以标记为提供?

回答

4

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

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

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

  2. 单机模式:如果部署可在下载页面的预编译包的一个到群集(主机和工人的机器),它们包含所有Spark的库(包括星火SQL,流媒体,GraphX的。 ..)和您选择的Hadoop版本。如果部署,你自己建罐子 - 嗯,那就要看是什么和如何包装...

  3. 纱模式:当您提交申请星火向纱线的经理,你设置的星火罐子位置为应用程序使用(通过参数spark.yarn.jar) - 无论该jar(或罐子)包含将被加载。再次 - 如果该罐是预建的罐之一,则它包含所有的Spark库和所选的Hadoop版本

+0

此答案很明确,并且重点突出。在我的情况下,解释三种模式特别有用。顺便说一句,当我们处于供应商特定的世界时,情况会变得更加复杂,并且jar不一定是标准的,但即使在这种情况下,这个答案也提供了必要的提示以获得正确的信息 – djsecilla