IDEA build Spark Artifact包 控制jar大小

本文介绍如何在IDEA中为Spark程序打Jar包,特别适用于CDH环境。通过排除集群已有的依赖,减少Jar包大小,提高部署效率。核心在于识别并整合外部环境中缺失的依赖。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用IDEA打Spark jar包

我们使用Scala编写Spark程序代码,需要将编译好的jar放到集群环境中跑任务,但是集群中大部分的依赖包已经存在了,我们就不需要将其再次打入到Spark程序包中,这个操作类似于用Maven打包的<scope>provided</scope>
今天抽空写一下用IDEA build Artifact包。
PS :Scala开发环境以及使用Maven创建Scala项目得准备好,这里不做教程

第一步、
在这里插入图片描述第二步、
在这里插入图片描述第三步、
这里指定与否感觉影响不大都能跑在这里插入图片描述在这里插入图片描述第四步、
在这里插入图片描述我在第四步骤的做法是把所有的依赖全部删除,我去maven本地库中寻找我需要的依赖jar 将它们整合在一起放到一个文件夹下面,然后点击左边的 “+”将它们再次引进过来,具体看下面的截图。
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述第五步、

开始build 了
在这里插入图片描述在这里插入图片描述build结束后我们就能看到artifacts文件夹了,下面是我们所有build jar
在这里插入图片描述在这里插入图片描述在这里插入图片描述到此结束,此种打包方式放到CDH环境上是没问题的,亲测有效。
核心就是找出你哪些引用的jar在CDH环境上是没有的,将其整合在一起。

### 如何在虚拟机 Spark 集群上运行 JAR 要在虚拟机上的 Spark 集群中运行 JAR ,通常需要完成以下几个方面的操作: #### 1. 准备工作 确保 Spark 已经正确安装并配置在虚拟机集群环境中。这括 Master 和 Slave 节点之间的网络通信正常以及 Hadoop 的正确配置[^4]。 #### 2. 构建 Scala 或 Java 项目 使用 IntelliJ IDEA 创建一个 Scala 项目(推荐),或者 Maven/Gradle 项目来编写 Spark 应用程序代码。如果遇到依赖问题,可以通过手动导入 Spark 安装中的 jar 文件解决[^2]。 #### 3. 打包应用程序 通过 IntelliJ IDEA 将开发好的 Spark 程序打包成可执行的 fat-jar (uber-jar),其中含了所有的依赖项。具体步骤如下: - 在 IDEA 中右键点击项目 -> Add Framework Support -> 添加 Artifact。 - 设置 Main Class 并指定输出路径。 - 使用 `Build` 功能生成最终的 jar 文件[^3]。 #### 4. 提交作业至 Spark Cluster 将构建好的 jar 文件上传到目标服务器(通常是 Master 节点)。可以利用 SCP 命令或其他工具实现文件传输。之后,在命令行界面输入以下格式启动应用: ```bash spark-submit \ --class com.example.MainClass \ --master spark://<Master_IP>:7077 \ /path/to/application.jar arg1 arg2 ... ``` 上述参数解释如下: - `--class`: 指定入口类名; - `--master`: 明确指明使用的 master URL 地址; - `/path/to/application.jar`: 表示实际的应用程序位置及其名称; - `arg1`, `arg2`: 可选参数传递给 main 方法[^1]。 注意:对于 Windows 用户来说可能还需要额外处理一些兼容性问题比如 winutils.exe 的缺失情况。 #### 5. 远程调试支持(可选项) 为了方便排查错误信息,可以在本地设置断点并通过 IDE 实现远程调试功能。此过程涉及调整 JVM 启动脚本加入相应监听端口等内容。 --- ### 示例代码片段 下面是一个简单的 WordCount 示例用于演示如何创建 Spark Application: ```scala import org.apache.spark.sql.SparkSession object SimpleApp { def main(args: Array[String]): Unit = { val logFile = args(0) // Should be some file on your system val spark = SparkSession.builder.appName("Simple Application").getOrCreate() val logData = spark.read.textFile(logFile).cache() val numAs = logData.filter(line => line.contains("a")).count() println(s"Lines with a: $numAs") spark.stop() } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值