在local模式下的spark程序打包到集群上运行

该博客介绍Scala词频统计程序打包运行的前期准备与导出jar包步骤。前期需在Linux系统搭建Hadoop、Spark伪分布式环境,在Windows系统有词频统计程序;导出jar包时要注意包名、类名、依赖文件等,上传到Ubuntu后用指定命令运行。

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

一、前期准备

  前期的环境准备,在Linux系统下要有Hadoop系统,spark伪分布式或者分布式,具体的教程可以查阅我的这两篇博客:

       Hadoop2.0伪分布式平台环境搭建

       Spark2.4.0伪分布式环境搭建

  然后在spark伪分布式的环境下必须出现如下八个节点才算spark环境搭建好。

  

  然后再在本地windows系统下有一个简单的词频统计程序。

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.rdd.RDD

object ScalaSparkDemo {
  def main(args: Array[String]) {
    /**
     * 第一步:创建Spark的配置对象SparkConf,设置Spark程序的运行时的配置信息,
     * 例如说通过setMaster来设置程序要连接的Spark集群的Master的URL,
     * 如果设置为local,则代表Spark程序在本地运行,特别适合于机器配置条件非常差
     * (例如只有1G的内存)的初学者
     */
    val conf = new SparkConf() //创建SparkConf对象,由于全局只有一个SparkConf所以不需要工厂方法
    conf.setAppName("wow,my first spark app") //设置应用程序的名称,在程序的监控界面可以看得到名称
    //conf.setMaster("local") //此时程序在本地运行,不需要安装Spark集群
    /**
     * 第二步:创建SparkContext对象
     * SparkContext是Spark程序所有功能的唯一入口,无论是采用Scala、Java、Python、R等都必须要有一个
     * SparkContext
     * SparkContext核心作用:初始化Spark应用程序运行所需要的核心组件,包括DAGScheduler,TaskScheduler,SchedulerBacked,
     * 同时还会负责Spark程序往Master注册程序等
     * SparkContext是整个Spark应用程序中最为至关重要的一个对象
     */
    val sc = new SparkContext(conf) //创建SpackContext对象,通过传入SparkConf实例来定制Spark运行的具体参数的配置信息
    /**
     * 第三步:根据具体的数据来源(HDFS,HBase,Local,FileSystem,DB,S3)通过SparkContext来创建RDD
     * RDD的创建基本有三种方式,(1)根据外部的数据来源(例如HDFS)(2)根据Scala集合(3)由其它的RDD操作
     * 数据会被RDD划分为成为一系列的Partitions,分配到每个Partition的数据属于一个Task的处理范畴
     */
    //读取本地文件并设置为一个Partition
    // val lines = sc.textFile("words.txt", 1) //第一个参数为为本地文件路径,第二个参数minPartitions为最小并行度,这里设为1
    sc.setLogLevel("WARN")
    val lines = sc.parallelize(List("pandas","i like pandas"))
    //类型推断 ,也可以写下面方式
    // val lines : RDD[String] =sc.textFile("words.txt", 1)
    /**
     * 第四步:对初始的RDD进行Transformation级别的处理,例如map,filter等高阶函数
     * 编程。来进行具体的数据计算
     * 第4.1步:将每一行的字符串拆分成单个的单词
     */
    //对每一行的字符串进行单词拆分并把所有行的结果通过flat合并成一个大的集合
    val words = lines.flatMap { line => line.split(" ") }
    /**
     * 第4.2步在单词拆分的基础上,对每个单词实例计数为1,也就是word=>(word,1)tuple
     */
    val pairs = words.map { word => (word, 1) }
    /**
     * 第4.3步在每个单词实例计数为1的基础之上统计每个单词在文中出现的总次数
     */
    //对相同的key进行value的累加(包括local和Reduce级别的同时Reduce)
    val wordCounts = pairs.reduceByKey(_ + _)
    //打印结果
    wordCounts.foreach(wordNumberPair => println(wordNumberPair._1 + ":" + wordNumberPair._2))
    //释放资源
    sc.stop()
  }
}

二、导出jar包

  这里注意词频统计程序的包名为test,类名为ScalaSparkDemo。

  

   

  注意这里勾选要打包所依赖的一些文件。当然可以选择把整个工程打包。还要注意这里打包后的文件名为test.jar。

  

  然后上传到Ubuntu中,使用这个命令 bin/spark-submit --class test.ScalaSparkDemo --master local /home/xiaow/test.jar   即可运行。/home/xiaow/test.jar:指明此jar包在主节点上的位置。关于打包到集群的详细命令,可以查阅我的这一篇博客:Spark学习之在集群上运行Spark

   

      

  如此,搞定收工!!!

 

转载于:https://www.cnblogs.com/xiaoyh/p/10822102.html

### 使用 sbt 打包运行 Spark 应用程序 #### 准备工作 为了确保能够顺利使用 sbt 对 Spark 应用程序进行打包,需要先确认 Java 和 Scala 的版本兼容性以及安装必要的工具。 - **检查 JDK 版本** 需要验证当前使用的 JDK 是否与项目需求相匹配。如果遇到 `Missing dependency 'object java.lang.Object in compiler mirror'` 错误,则可能是由于 Java 版本不一致引起的问题[^4]。建议通过命令 `java -version` 来核实所使用的 Java 版本,并确保其路径已正确设置于环境变量中。 - **下载 SBT 工具** 可以访问官方网站 https://www.scala-sbt.org/download.html 下载适合操作系统的最新版 sbt (例如1.3.8),这一步骤对于初次使用者尤为重要[^3]。 #### 创建和配置项目结构 创建一个新的目录用于存放 Spark 应用程序源文件及相关配置: ```bash mkdir ~/sparkapp && cd ~/sparkapp ``` 接着初始化一个简单的构建定义文件 `build.sbt` 并指定所需的库依赖项和其他参数。 #### 编写代码 在项目的 src/main/scala 文件夹下编写实际的应用逻辑代码。这里假设已经有一个完整的 Spark 程序等待被打包。 #### 构建过程 当一切准备就绪之后,在终端窗口进入项目根目录并通过如下指令启动打包流程: ```bash cd ~/sparkapp /usr/local/sbt/sbt package ``` 此过程中会连接互联网来获取缺失的依赖库;首次执行可能会花费较长时间完成整个编译链路建立的工作,但后续重复该动作将会显著加快速度[^1]。 #### 提交作业到集群 一旦成功生成 jar 包后,就可以利用 spark-submit 命令提交至目标计算资源池内执行了。具体语法取决于部署模式(本地测试还是远程 YARN/Mesos/Kubernetes),通常形式如下所示: ```bash $SPARK_HOME/bin/spark-submit \ --class "MainClass" \ --master local[4] \ path/to/application-jar-file.jar \ arg1 arg2 ``` 其中 MainClass 是指定了入口点类名的位置,而后面的参数则是传递给主函数的实际输入值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值