Spark实战:使用spark-submit提交并执行JAR包

1. 实战概述

  • 本次实战基于 Spark RDD 编程模型,使用 Scala 语言开发网站访问日志分析程序,实现对 31 万余条记录中每月访问量的统计与降序输出。通过编写、编译、打包及提交完整流程,成功在 Spark 集群上运行任务,并将结果持久化至 HDFS,完整展示了 Spark 应用从开发到部署的标准化操作。

2. 实战步骤

  • 查看原始数据
    在这里插入图片描述

2.1 编写网站访问量程序

  • 执行命令:vim RDDWebsiteVisits.scala
    在这里插入图片描述

    import org.apache.spark.{SparkConf, SparkContext}
    
    /**
     * 功能:统计网站访问量
     * 作者:华卫
     * 日期:2025年12月20日
     */
    object WebsiteVisits {
      def main(args: Array[String]): Unit = {
        // 创建Spark配置对象
        val conf = new SparkConf()
          .setAppName("SparkRDDWebsiteVisits") // 设置应用名称
        // 基于Spark配置对象创建Spark容器对象
        val sc = new SparkContext(conf)
        // 定义输入路径
        val inputPath = "hdfs://master:9000/websitevisits/input"
        // 定义输出路径
        val outputPath = "hdfs://master:9000/websitevisits/output"
        // 统计每月访问量
        val wt = sc.textFile(inputPath)
          .map(line => line.split(",")(4))
          .map(datetime => datetime.split(" ")(0))
          .map(date => date.split("-"))
          .map(fields => (fields(0) + "-" + fields(1), 1))
          .reduceByKey(_ + _)
          .sortBy(_._2, false)
        // 在控制台输出每月访问量统计结果
        wt.collect.foreach(println)
        // 将每月访问量统计结果写入指定文件
        wt.saveAsTextFile(outputPath)
        // 停止Spark容器,结束任务
        sc.stop
      }
    }	
    

2.2 编译网站访问量程序

2.2.1 构建类路径

  • 执行命令:CP=$(find $SPARK_HOME/jars -name "*.jar" | tr '\n' ':')
    在这里插入图片描述

2.2.2 编译源程序

  • 执行命令:scalac -cp "$CP" RDDWebsiteVisits.scala
    在这里插入图片描述
  • 执行命令:ll Web*
    在这里插入图片描述

2.3 将源程序达成jar包

  • 执行命令:jar cf RDDWebsiteVisits.jar WebsiteVisits*.class
    在这里插入图片描述

2.4 使用 spark-submit 提交作业

  • 执行命令:spark-submit --master spark://master:7077 --class WebsiteVisits RDDWebsiteVisits.jar
    在这里插入图片描述
    在这里插入图片描述

2.5 查看统计结果文件

  • 执行命令:hdfs dfs -ls /websitevisits/output
    在这里插入图片描述
  • 执行命令:hdfs dfs -cat /websitevisits/output/*
    在这里插入图片描述

3. 实战总结

  • 本次实战完整实现了基于 Scala 的 Spark RDD 网站访问量统计任务。通过精准提取日志中的时间字段,构造 (年-月, 1) 键值对,利用 reduceByKey 聚合月度访问次数,并按降序排序输出。关键在于掌握 Spark 应用的编译—打包—提交全流程:使用 find + tr 正确构建 classpath 解决依赖问题,生成 .class 文件后打包为 JAR,再通过 spark-submit 指定主类提交至集群。整个过程体现了 Spark 分布式计算在日志分析场景中的高效性与可靠性,也为后续开发复杂数据处理任务奠定了坚实基础。
先展示下效果 https://pan.quark.cn/s/a4b39357ea24 遗传算法 - 简书 遗传算法的理论是根据达尔文进化论而设计出来的算法: 人类是朝着好的方向(最优解)进化,进化过程中,会自动选择优良基因,淘汰劣等基因。 遗传算法(英语:genetic algorithm (GA) )是计算数学中用于解决最佳化的搜索算法,是进化算法的一种。 进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象括遗传、突变、自然选择、杂交等。 搜索算法的共同特征为: 首先组成一组候选解 依据某些适应性条件测算这些候选解的适应度 根据适应度保留某些候选解,放弃其他候选解 对保留的候选解进行某些操作,生成新的候选解 遗传算法流程 遗传算法的一般步骤 my_fitness函数 评估每条染色体所对应个体的适应度 升序排列适应度评估值,选出 前 parent_number 个 个体作为 待选 parent 种群(适应度函数的值越小越好) 从 待选 parent 种群 中随机选择 2 个个体作为父方和母方。 抽取父母双方的染色体,进行交叉,产生 2 个子代。 (交叉概率) 对子代(parent + 生成的 child)的染色体进行变异。 (变异概率) 重复3,4,5步骤,直到新种群(parentnumber + childnumber)的产生。 循环以上步骤直至找到满意的解。 名词解释 交叉概率:两个个体进行交配的概率。 例如,交配概率为0.8,则80%的“夫妻”会生育后代。 变异概率:所有的基因中发生变异的占总体的比例。 GA函数 适应度函数 适应度函数由解决的问题决定。 举一个平方和的例子。 简单的平方和问题 求函数的最小值,其中每个变量的取值区间都是 [-1, ...
### 使用 spark-submit 命令在 YARN 集群模式下提交 Spark 任务 使用 `spark-submit` 命令以 YARN 集群模式运行 SparkPi 示例时,需要配置一系列参数来指定集群管理器、部署模式以及其他运行选项。以下是详细的步骤和参数说明: #### 1. 基本命令结构 `spark-submit` 的基本命令结构如下: ```bash spark-submit \ --class <main-class> \ --master yarn \ --deploy-mode cluster \ --conf <key>=<value> \ <application-jar> \ [application-arguments] ``` #### 2. 参数详解 以下是对每个参数的详细解释: - **`--class`** 指定应用程序的主类(即含 `main` 方法的类)。对于 SparkPi 示例,主类为 `org.apache.spark.examples.SparkPi`[^1]。 - **`--master yarn`** 指定 Spark 应用程序运行的集群管理器为 YARN[^2]。 - **`--deploy-mode cluster`** 指定部署模式为集群模式(Cluster Mode),在这种模式下,驱动程序运行在集群中的某个工作节点上,而不是客户端机器上[^3]。 - **`--conf`** 用于设置额外的 Spark 配置属性。例如,可以通过 `--conf spark.executor.memory=4g` 来设置每个执行器的内存大小[^4]。 - **`<application-jar>`** 指定含应用程序代码的 JAR 文件路径。对于 SparkPi 示例,通常可以使用 Spark 安装目录下的示例 JAR 文件,如 `$SPARK_HOME/examples/jars/spark-examples_2.12-3.3.0.jar`[^5]。 - **`[application-arguments]`** 指定传递给应用程序的参数。对于 SparkPi 示例,可以传入一个整数参数表示计算的精度[^6]。 #### 3. 示例命令 以下是一个完整的示例命令,用于在 YARN 集群模式下运行 SparkPi 示例: ```bash spark-submit \ --class org.apache.spark.examples.SparkPi \ --master yarn \ --deploy-mode cluster \ --conf spark.executor.instances=4 \ --conf spark.executor.memory=2g \ --conf spark.executor.cores=2 \ $SPARK_HOME/examples/jars/spark-examples_2.12-3.3.0.jar \ 10 ``` - **`--conf spark.executor.instances=4`** 设置执行器的数量为 4[^7]。 - **`--conf spark.executor.memory=2g`** 设置每个执行器的内存为 2GB[^8]。 - **`--conf spark.executor.cores=2`** 设置每个执行器的核心数为 2[^9]。 - **`10`** 指定 SparkPi 示例的精度参数为 10[^10]。 #### 4. 注意事项 - 确保 Hadoop 和 YARN 已正确安装配置,Spark 能够连接到 YARN 集群。 - 如果使用的是 Kerberos 认证,请确保已进行正确的身份验证[^11]。 - 在集群模式下,日志输出不会直接显示在终端中,可以通过 YARN 的 Web 界面或 `yarn logs` 命令查看应用程序的日志信息[^12]。 ```bash yarn logs -applicationId <application-id> ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酒城译痴无心剑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值