Car*_*cas 8 java scala gradle amazon-emr apache-spark
我知道至少有两种方法可以将我的依赖项放入Spark EMR作业中.一种是创建一个胖罐,另一种是使用该--packages选项指定你想要在spark中提交哪些包.
拉链需要很长时间.这是正常的吗?~10分钟.我们是否可能错误配置了它?
命令行选项很好,但容易出错.
还有其他选择吗?我喜欢它,如果有(已经存在)一种方法将依赖列表包含在带有gradle的jar中,然后让它下载它们.这可能吗?还有其他选择吗?
更新:我发布了部分答案.我在原始问题中没有说清楚的一件事是我还关心你何时遇到依赖冲突,因为你有不同版本的jar.
更新
感谢您关于减少依赖项数量或尽可能使用提供的响应.为了这个问题,我们假设我们拥有运行jar所需的最少数量的依赖项.
如果必须通过某些应用程序在Spark启动器的帮助下启动spark作业,则可以使用Spark启动程序,您可以配置jar patah,无需为运行应用程序创建fat.jar.
使用fat-jar,你必须安装Java并启动Spark应用程序需要执行java -jar [your-fat-jar-here].如果您想要从Web应用程序启动应用程序,则很难自动化它.
使用SparkLauncher,您可以选择从另一个应用程序启动Spark应用程序,例如上面的Web应用程序.它更容易.
import org.apache.spark.launcher.SparkLauncher
SparkLauncher extends App {
val spark = new SparkLauncher()
.setSparkHome("/home/knoldus/spark-1.4.0-bin-hadoop2.6")
.setAppResource("/home/knoldus/spark_launcher-assembly-1.0.jar")
.setMainClass("SparkApp")
.setMaster("local[*]")
.launch();
spark.waitFor();
}
Run Code Online (Sandbox Code Playgroud)
代码: https ://github.com/phalodi/Spark-launcher
这里
setSparkHome("/ home/knoldus/spark-1.4.0-bin-hadoop2.6")用于设置内部使用的spark home来调用spark submit.
.setAppResource("/ home/knoldus/spark_launcher-assembly-1.0.jar")用于指定我们的spark应用程序的jar.
.setMainClass("SparkApp")火花程序的入口点即驱动程序.
.setMaster("local [*]")设置master的地址,从这里开始我们现在在loacal机器上运行它.
.launch()只是启动我们的spark应用程序
SparkLauncher与java -jar fat-jar有什么好处?
https://jaceklaskowski.gitbooks.io/mastering-apache-spark/spark-SparkLauncher.html
https://spark.apache.org/docs/2.0.0/api/java/org/apache/spark/launcher/SparkLauncher.html
http://henningpetersen.com/post/22/running-apache-spark-jobs-from-applications
| 归档时间: |
|
| 查看次数: |
1581 次 |
| 最近记录: |