Spark 提交第一个项目(WordCount)

WordCount 的具体步骤可参考上一篇:Spark 第一个项目(WordCount)

本篇可作为上一篇的扩展!

上一篇程序:WorkCount

本篇程序:WorkCountApplication

1. WordCount

1.1 修改程序

对上一篇的程序进行修改:

package wcApplication

import org.apache.spark.{SparkConf, SparkContext}

object WorkCountApplication {

    def main(args: Array[String]): Unit = {

        var Path = args(0)
        var savePath = args(1)

        // 配置文件
        val conf = new SparkConf()
        .setAppName("WorkCountApplication")

        // SparkContext
        val sc = new SparkContext(conf)

        // 操作
        sc.textFile(Path)
        .flatMap(_.split("\\s+"))
        .map(_.toLowerCase().replaceAll("\\W",""))
        .map((_, 1))
        .reduceByKey(_+_)
        .sortBy(_._2, false)
        .saveAsTextFile(savePath)

        // 停止任务,关闭连接
        sc.stop()
    }
}

说明:

以上,并没有设置实际的参数,而是利用 main 方法中的 args 来传递参数

args(0)args(1)两个参数分别表示:源文件路径、保存路径

这样在集群上提交任务时,可根据实际情况再传递参数。

⚠️ 注意:这里的 conf 对象没有设置 Master,留到集群提交时再指定,只为避免冲突!

1.2 项目打包

将项目打成 jar 包,并上传至集群。

1️⃣ Step1:在 IDEA 右边栏的 Maven 中打开本项目中 Lifecycleclean,清空一遍之前的编译文件,清理后左侧 target 目录中的编译文件就应该都被删除了(里面有个jar包,因为我打过一遍了,不影响,会一起被删除)。

image-20211209153053035

image-20211209153555420

2️⃣ Step2:在当前程序下,重新编译此项目。由于main方法没有传入参数,会一个Spark的错误(没设置 master URL,因为在上文中被删了),不用管,此时编译文件已经重新生成了。

image-20211209153649503

image-20211209154136546

3️⃣ Step3:双击侧边栏的 package 将程序打包,生成的 jar 包在 target 目录下。

image-20211209154358503

1.3 提交项目

将打包的 jar 包上传至集群(主节点),并通过命令提交该任务(应用)。

1️⃣ Step1:提交命令

提交命令如下:

spark-submit  \
--class wcApplication.WorkCountApplication \
--master spark://node1:7077 \
/opt/spark-3.1.2/SparkApp/HelloWorld-1.0-SNAPSHOT.jar \
hdfs://node1:8020/SparkApp/Harry.txt \
hdfs://node1:8020/SparkApp/Succ6

来解剖下提交命令:

  • spark-submit 用于提交应用
  • --class 代表应用(项目)的主类
  • --master 设定运行模式,这里设置为主节点的 7077 端口,表示连接到 Spark 集群
  • /opt/spark-3.1.2/SparkApp/HelloWorld-1.0-SNAPSHOT.jar 是 jar 包所在的绝对路径
  • hdfs://node1:8020/SparkApp/Harry.txt 第一个参数,即 args[0],表示源文件路径
  • hdfs://node1:8020/SparkApp/Succ6 第二个参数,即 args[1],表示保存的路径

修改为自己的 jar包、参数即可!

image-20211209160354866

2️⃣ Step2:在HDFS、Spark 的 web 端查看该应用结果

image-20211209160525828

image-20211209160641835

🌈 可以试着点进 Spark 应用浏览一番!

2. 扩展

2.1 查看日志

在完成的 Spark 应用中可以找到每个节点的日志,试着看一看。

12092

1️⃣、 日志的最上面一行包含一些提交命令的“铭牌”,其中包含路径信息、-Xmx1024M(内存大小)、主机端口、主机编号、主机IP、核心数、应用ID、Worker的Url(主节点也作为一个Worker)。

2️⃣、主机下面两条高亮的部分,可以看到用途词频统计的预料文件被分成了两份,why,我们没有设置分区数!之前本地的设置的运行模式 local[2] 才设置过两个分区,所以着应该是 Spark 默认给我们设置了。

image-20211209162430901

通过查看源码其实可以发现,在 SparkContext.scala 源码中,可以找到有一个默认的最小分区数,默认为 2

image-20211209163102016

2.2 提交命令

提交命令的参数可以根据实际情况修改。

  • --master :指定 Spark 的运行模式,可配置为 local[n]spark://HOST:PORTmesos://HOST:PORTyarn-clientyarn-cluster
  • --executor-memory nG :指定每个 executor 可使用的内存为 nG
  • --total-executor-cores n 指定所有 executor 使用的 cpu 核数为 n 个
  • --executor-coers :指定每个 executor 使用的 cpu 核数

 


❤️ END ❤️
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 创建基于Scala语言的Spark Maven项目: 1. 打开IntelliJ IDEA,点击“Create New Project”。 2. 选择“Maven”作为项目类型,点击“Next”。 3. 输入项目名称和项目路径,点击“Next”。 4. 选择Scala版本和Spark版本,点击“Next”。 5. 选择项目的groupId和artifactId,点击“Next”。 6. 点击“Finish”完成项目创建。 WordCount程序: 1. 在src/main/scala目录下创建一个WordCount.scala文件。 2. 在文件中输入以下代码: ``` import org.apache.spark.{SparkConf, SparkContext} object WordCount { def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName("WordCount").setMaster("local") val sc = new SparkContext(conf) val input = sc.textFile("input.txt") val words = input.flatMap(line => line.split(" ")) val counts = words.map(word => (word, 1)).reduceByKey(_ + _) counts.foreach(println) } } ``` 3. 在项目根目录下创建一个input.txt文件,并输入一些文本内容。 4. 运行WordCount程序,可以在控制台看到单词统计结果。 ### 回答2: 在创建基于Scala语言的Spark Maven项目WordCount应用之前,需要先安装以下软件: 1. Java JDK 2. Scala 3. Apache Maven 4. Apache Spark 接下来,按照以下步骤创建项目: 1. 打开终端并创建一个新目录,用于存储Spark项目。 ``` mkdir spark-project cd spark-project ``` 2. 创建一个新的Maven项目,使用以下命令: ``` mvn archetype:generate -DgroupId=com.sparkproject -DartifactId=wordcount -DarchetypeArtifactId=maven-archetype-quickstart -DscalaVersion=2.11.7 ``` 这个命令会使用Maven的Quickstart模板创建一个基本的Maven项目。在此过程中,你需要输入要创建的组ID、项目ID和Scala版本。 3. 打开pom.xml文件并添加Spark依赖库。 ``` <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.4.5</version> </dependency> ``` 这个依赖库将帮助我们在Maven项目中导入Spark库。 4. 创建一个新的Scala源代码文件WordCount.scala。 ``` package com.sparkproject import org.apache.spark._ import org.apache.spark.SparkContext._ object WordCount { def main(args: Array[String]) { val conf = new SparkConf().setAppName("WordCount") val sc = new SparkContext(conf) val textFile = sc.textFile(args(0)) val counts = textFile.flatMap(line => line.split(" ")) .map(word => (word, 1)) .reduceByKey(_ + _) counts.saveAsTextFile(args(1)) } } ``` 这个代码将使用Spark来计算文本文件中单词的出现次数。它主要使用了Spark的RDD(Resilient Distributed Datasets)API。 5. 使用以下命令将Maven项目打包: ``` mvn package ``` 6. 使用以下命令在Spark集群上运行WordCount应用程序。 ``` ../bin/spark-submit --class "com.sparkproject.WordCount" --master local wordcount-1.0-SNAPSHOT.jar /path/to/input/files /path/to/output/directory ``` 这个命令将使用Spark的`spark-submit`命令启动WordCount应用程序。其中,`/path/to/input/files`是要处理的文本文件路径,`/path/to/output/directory`是将缓存结果输出的目录路径。 总结: 通过上述步骤,我们创建了一个基于Scala语言的Spark Maven项目,并构建了一个WordCount应用程序来演示如何使用Spark来处理文本数据。这个示例代码可用于提供Spark在更复杂数据分析场景下的能力。 ### 回答3: Apache Spark是一个开源的大数据处理框架,它使用分布式计算的方式实现高效的数据处理,支持多种语言,其中Scala是最为常用的语言之一。Maven是一个流行的构建工具,提供了一种简单的方式管理项目的依赖,方便项目管理和部署。在本文中,我们将介绍如何使用Scala和Maven创建一个Spark Maven项目并实现一个简单的WordCount程序。 首先,我们需要安装Scala和Maven。如果您已经安装并配置好了,可以跳过这一步骤。首先安装Scala,可以到Scala的官网下载安装包,也可以使用命令行安装。安装完成后,需要确认是否正确地配置了系统的环境变量。 然后安装Maven。可以从Maven的官网下载安装包,也可以使用命令行安装。安装完成后同样需要确认是否正确地配置了系统的环境变量。 接下来,我们开始创建一个Maven项目。首先打开命令行窗口,使用以下命令创建一个基于ScalaSpark Maven项目: ``` mvn archetype:generate -DgroupId=com.spark.scala -DartifactId=wordcount -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false -DarchetypeCatalog=local ``` 该命令将创建一个名为“wordcount”的Maven项目,在项目的根目录中,有一个包含Java代码的src/main/java目录,和一个包含测试代码的src/test/java目录。 接下来,我们需要在项目的pom.xml文件中添加SparkScala的依赖。在pom.xml文件中,添加以下代码: ``` <dependencies> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.4.5</version> </dependency> <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-library</artifactId> <version>2.11.12</version> </dependency> </dependencies> ``` 此时我们已经创建好了一个基于ScalaSpark Maven项目,接下来我们实现一个简单的WordCount程序。 首先,在src/main/scala目录中创建一个名为“WordCount”的Scala文件,添加以下代码: ``` import org.apache.spark.{SparkConf, SparkContext} object WordCount { def main(args: Array[String]) { val conf = new SparkConf() .setAppName("WordCount") .setMaster("local[2]") val sc = new SparkContext(conf) val input = sc.textFile(args(0)) val words = input.flatMap(line => line.split(" ")) val counts = words.map(word => (word, 1)).reduceByKey(_ + _) counts.saveAsTextFile(args(1)) sc.stop() } } ``` 该程序使用Spark的API,首先创建了一个SparkConf对象和一个SparkContext对象,设置了应用程序的名称和运行模式。然后使用textFile方法从输入文件中读取数据,使用flatMap方法将每一行数据解析成单词,再使用map和reduceByKey方法计算单词的出现频率。最后使用saveAsTextFile方法将结果保存到输出文件中,并关闭SparkContext。 接下来,我们在命令行中运行该程序。首先将文本文件(例如input.txt)复制到项目的根目录中,然后使用以下命令运行程序: ``` mvn exec:java -Dexec.mainClass="WordCount" -Dexec.args="input.txt output" ``` 此时程序将输出结果保存在output目录中。 综上所述,我们使用Scala和Maven创建了一个基于Spark的Maven项目,并实现了一个简单的WordCount程序。这个过程中,对于初学者来说可能存在一些困难,但随着对SparkScala的深入了解,这些问题都可以轻松解决。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JOEL-T99

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

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

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

打赏作者

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

抵扣说明:

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

余额充值