【发布时间】:2019-10-18 23:35:36
【问题描述】:
我是 spark 新手,正在寻找管理依赖 jar 的最佳实践
我能想到几个选项
- 将所有内容(应用程序和第三方 jar)都包含在一个 fat jar 中
优点:依赖是通过maven pom文件控制的,什么 我们用来编译、构建和测试的依赖 jars 去不同的 环境(QA/Prod 等)
缺点:由于它是一个胖 jar,maven 存储库已满,需要时间 构建并将 jar 从构建机器推送到部署机器等
- 只有与应用程序相关的代码驻留在 jar 中,第三方 jar 导出为 --conf spark.executor.extraClassPath=
优点:应用程序 jar 很小,易于构建并从构建环境推送到目标环境
缺点:可能会导致maven pom依赖列表和classpath列表中指定的jar名列表不一致,也需要make 确保版本完好无损
我们正在使用 Cloudera 发行版并使用 Spark 2.3.0
同样在这两种情况下,我们都不需要包含 spark,Hadoop 相关的 jars 默认会在 spark executors 中可用,所以每次我们运行 spark 应用程序时都不需要将其传输到 executor,对吗?
我们如何知道默认情况下所有依赖 jar 将在 (Cloudera) spark executor 中可用,以便我们不会将其导出或包含在胖 jar 中
将第三方 jars 保存在 HDFS 中并将其导出到类路径中而不是将 jars 保存在客户端/边缘节点中并从那里导出是否很好?
是否有任何最佳做法或建议?有任何参考吗?
【问题讨论】: