使用已安装的spark和maven将Spark Scala Program编译为jar文件
仍然试图熟悉maven并将我的源代码编译成jar文件以进行spark-submit。 我知道如何使用IntelliJ,但想了解这实际上是如何工作的。 我有一个EC2服务器,已经安装了所有最新的软件,如spark和scala,并且有我想用maven编译的示例SparkPi.scala源代码。 我的愚蠢问题首先是,我可以使用我安装的软件来构建代码,而不是从maven存储库中检索依赖项,如何从基本的pom.xml模板开始添加适当的需求。 我不完全理解maven正在做什么,我怎么才能测试我的源代码的编译? 据我了解,我只需要有标准的目录结构src/main/scala
然后想运行mvn package
。 此外,我想用maven而不是sbt进行测试。
除了@Krishna之外,如果你有mvn project
,请在pom.xml
上使用mvn clean package
。 确保你的pom.xml
有以下build
来制作fat-jar
。 (这是我的情况,我是如何制作jar子的)
src maven-compiler-plugin 3.0 1.7 1.7 org.apache.maven.plugins maven-assembly-plugin 2.4 jar-with-dependencies assemble-all package single
有关更多详细信息: 链接如果您有sbt project
,请使用sbt clean assembly
来制作fat-jar
。 为此,您需要以下配置,作为build.sbt
的示例
assemblyJarName := "WordCountSimple.jar" // val meta = """META.INF(.)*""".r assemblyMergeStrategy in assembly := { case PathList("javax", "servlet", xs@_*) => MergeStrategy.first case PathList(ps@_*) if ps.last endsWith ".html" => MergeStrategy.first case n if n.startsWith("reference.conf") => MergeStrategy.concat case n if n.endsWith(".conf") => MergeStrategy.concat case meta(_) => MergeStrategy.discard case x => MergeStrategy.first }
另外plugin.sbt
喜欢:
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.13.0")
有关更多信息,请参阅此内容 。
到这里为主要目标是在目标文件夹中获取所有依赖项的fat-jar。 使用该jar在集群中运行如下:
hastimal@nm:/usr/local/spark$ ./bin/spark-submit --class com.hastimal.wordcount --master yarn-cluster --num-executors 15 --executor-memory 52g --executor-cores 7 --driver-memory 52g --driver-cores 7 --conf spark.default.parallelism=105 --conf spark.driver.maxResultSize=4g --conf spark.network.timeout=300 --conf spark.yarn.executor.memoryOverhead=4608 --conf spark.yarn.driver.memoryOverhead=4608 --conf spark.akka.frameSize=1200 --conf spark.io.compression.codec=lz4 --conf spark.rdd.compress=true --conf spark.broadcast.compress=true --conf spark.shuffle.spill.compress=true --conf spark.shuffle.compress=true --conf spark.shuffle.manager=sort /users/hastimal/wordcount.jar inputRDF/data_all.txt /output
这里我有inputRDF/data_all.txt /output
是两个args。 同样在工具的角度来看,我在Intellij
中Intellij
为IDE。
请按照以下步骤操作
# create assembly jar upon code change sbt assembly # transfer the jar to a cluster scp target/scala-2.10/myproject-version-assembly.jar # fire spark-submit on your cluster $SPARK_HOME/bin/spark-submit --class not.memorable.package.applicaiton.class --master yarn --num-executor 10 \ --conf some.crazy.config=xyz --executor-memory=lotsG \ myproject-version-assembly.jar \
- httpclient版本与Apache Spark之间的冲突
- 如何通过Sparklyr在本地模式下运行Spark时配置驱动程序内存?
- 如何读取嵌套的JSON以进行聚合?
- 无法连接到spark master:InvalidClassException:org.apache.spark.rpc.RpcEndpointRef; 本地类不兼容
- sparkContext JavaSparkContext SQLContext SparkSession之间的区别?
- 将分析数据从Spark插入Postgres
- 在Apache spark中,使用mapPartitions和组合使用广播变量和map之间的区别是什么
- 实现java UDF并从pyspark调用它
- 将JavaPairRDD转换为JavaRDD