IntelliJ IDEA开发Spark案例之WordCount

简介: IntelliJ IDEA开发Spark案例之WordCount

0x00 教程内容


  1. 新建Maven项目
  2. 编写WordCount代码
  3. 校验结果

实验前提:

a. 安装好了windows本地的Scala,直接解压安装包也行

b. 安装好了IDEA的scala插件,教程:IntelliJ IDEA编写Scala代码(安装Scala插件)

c. 安装好了JDK与Maven,直接使用IDEA内置的Maven也可以


0x01 新建Maven项目


1. 新建Maven项目

a. 新建一个Maven项目,选择好JDK,然后其他的默认或者自己决定


2. 项目配置

a. 设置编写scala代码的文件夹

打开src/main,建一个scala文件夹(与java同级)


b. 标记scala文件夹为资源文件夹

右击scala文件夹,选择Mark Directory as,选择第一个Sources Root,然后文件夹变成了蓝色。


c. 将Language level改为8(我使用的JDK为8,所以为8,如果是7则用7)

点击IDEA右上角放大镜左边的按钮(Project Structure),或者快捷键ctrl + shift + alt + S,点击Modules:


image.png


d. 引入Scala的SDK


image.png


3. 引入项目的依赖

a. 在pom.xml文件中添加依赖并Reimport一下:

<dependencies>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId>
        <version>2.2.0</version>
    </dependency>
</dependencies>


0x02 编写WordCount代码


1. 新建包

a. 在scala文件夹建com.shaonaiyi

2. 编写scala代码

a. 右击包名,选择New一个Scala Class(如果没有引入Scala的SDK,是建不了的)

image.png


b. 完整代码:

package com.shaonaiyi
import org.apache.spark.{SparkConf, SparkContext}
/**
  * @Auther: 邵奈一
  * @Date: 2019/03/28 下午 3:16
  * @Description: IntelliJ IDEA开发Spark案例之WordCount
  */
object WordCountLocal {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
    conf.setAppName("WordCountLocal")
    conf.setMaster("local")
    val sparkContext = new SparkContext(conf)
    val textFileRDD = sparkContext.textFile("src/main/resources/word.txt")
    val wordRDD = textFileRDD.flatMap(line => line.split(" "))
    val pairWordRDD = wordRDD.map(word => (word, 1))
    val wordCountRDD = pairWordRDD.reduceByKey((a, b) => a + b)
    wordCountRDD.saveAsTextFile("src/main/resources/wordcount")
  }
}


0x03 本地测试


1. 统计文件准备

a. 新建word.txt文件放于src/main/resources/路径下


shao shao shao

nai yi yi nai

hello hello hi


b. 根据文本内容,如果没有错误的话,结果应该是:


shao=>3次,

nai=>2次,

yi=>2次,

hello=>3次,

hi=>1次,


2. 统计结果

a. 执行,可以看到正确的结果:


image.png


3. 问题解决

在操作的过程中,可能会遇到下面两个报错:

image.png

image.png

原因是因为Windows本地没有运行环境引起的,此时可以参考教程:Windows本地安装Hadoop,搞定之后重新执行即可。当然,如果不想在Windows本地执行,我们可以将此项目打包到集群中运行。


0x04 打包到集群中执行


1. 执行代码的修改

a. 教程中,我复制了一份代码出来,类为:WordCount。

b. 因为我们是要打包到集群中执行,所以需要将执行的方式修改掉,此处注释掉 conf.setMaster("local") 这行代码:

image.png


c. 输入输出路径设置成了以参数的方式传进来,所以修改原本的两句代码为:

...
val textFileRDD = sparkContext.textFile(args(0))
...
wordCountRDD.saveAsTextFile(args(1))


2. 打包相关的修改

a. 添加Maven编译的插件和打包Scala代码的插件,添加在</project>标签里,根据实际情况,要放对位置:


    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <testExcludes>
                        <testExclude>/src/test/**</testExclude>
                    </testExcludes>
                    <encoding>utf-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <version>3.1.6</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>


插件解释:


maven-compiler-plugin 插件可以指定我们源码的版本和编译后的版本,因为集群中使用的是 JDK8,所以这里写1.8,如果是1.7,需要指定为1.7,不然会报错。

scala-maven-plugin 插件是编译、测试、运行Scala代码所需要的,不然Scala代码不会打包进来。goal标签也可以加上:testCompile,指编译测试的代码。

参考教程:maven-compiler-plugin说明


b. 除了加入插件,我们还可以将 Spark 相关的依赖设置成 provided,因为集群上已经有了 Spark 相关的jar包,所以我们是不需要将它们打进我们需要生成的 jar 包的。(这里加上是为了养成好习惯,虽然这里加不加都不影响),然后就可以打包了,直接双击 package 即可:


image.png


3. HDFS数据准备

a. 如果是想要测试服务器本地的文件,需要将文件放到所有机器节点上去。

比如可以这样执行:


spark-submit \
--master spark://master:7077 \
--class com.shaonaiyi.WordCount \
~/jar/spark-wordcount-1.0-SNAPSHOT.jar \
~/datas/word.txt \
~/wc


说明:\ 表示换行的意思,注意\右边不能有空格。如果需要重新跑的话,需要将所有机器节点的输出路径都删除。

b. 此处演示统计 HDFS 上的数据,并且统计结果也是存放到 HDFS ,比如现在我的数据在 HDFS上是 /files/put.txt,内容为:


shao nai yi
nai nai yi yi
shao nai nai


c. 执行:

spark-submit \
--master spark://master:7077 \
--class com.shaonaiyi.WordCount \
~/jar/spark-wordcount-1.0-SNAPSHOT.jar \
hdfs://master:9999/files/put.txt \
hdfs://master:9999/wc


注意:hdfs://master:9999 为 HDFS 的 core-site.xml 文件中配置的端口。

4. 查看执行结果

a. 执行后可以查看到 HDFS 上的统计结果:


image.png


0xFF 总结


  1. 本教程比较简单,实现了Windows本地的WordCount例子,需要学习Scala编程语言
  2. 编写Scala语言,还需要在IDEA里面安装好Scala插件。
相关文章
|
1天前
|
SQL 分布式计算 Java
IDEA 打包 Spark 项目 POM 文件依赖
这是一个 Maven POM 示例,用于构建一个使用 Spark 与 Hive 的项目,目标是将数据从 Hive 导入 ClickHouse。POM 文件设置了 Scala 和 Spark 的依赖,包括 `spark-core_2.12`, `spark-sql_2.12`, 和 `spark-hive_2.12`。`maven-assembly-plugin` 插件用于打包,生成包含依赖的和不含依赖的两种 JAR 包。`scope` 说明了依赖的使用范围,如 `compile`(默认),`provided`,`runtime`,`test` 和 `system`。
|
5天前
|
SQL Java 数据库连接
IDEA开发插件有哪些值得推荐?
这篇文章介绍了IntelliJ IDEA中的一些高效插件,包括RestfulTool(用于快速定位API)、Translation(便捷的代码翻译工具)、Alibaba Java Coding Guidelines(代码规范检查)、Free MyBatis Tool(增强MyBatis开发体验)和Mybatis Log(SQL日志查看)。此外,还提到了Vue.js插件以及可选装的Grep Console(控制台日志分析)、Maven Helper(解决Maven依赖冲突)和Private Notes(源码注释管理)。作者提醒,虽然插件有用,但过多会影响IDE性能,应注重质量而非数量。
|
12天前
|
JSON Java Maven
IDEA开发过程中常用插件必备
本文介绍了提升IntelliJ IDEA开发效率的几个插件:Codota用于强大代码补全;Auto filling Java call arguments自动填充函数参数,节省手动填充时间;GsonFormat能快速将JSON转换为Java实体类;Rainbow Brackets帮助识别括号所属代码块;Maven Helper提供高效查看和分析Maven依赖树功能;Key Promoter X提醒使用快捷键代替鼠标操作;最后还分享了如何设置背景图片以提升编码心情。
|
12天前
IDEA开发中,类的头位置生成作者时间信息
IDEA开发中,类的头位置生成作者时间信息
|
12天前
|
人工智能 自然语言处理 Java
用智谱 GLM-4大模型开发自己的IDEA插件
V 哥建议研究大模型先从研究开放 API 开始,作为程序员的你觉对不是什么难事,通过研究 API 的过程中,可以让你更加了解大模型的原理,当然想要更深入的理解,需要对开源大模型的源码进行研究,根据个人的技术能力,量力而行。研究 API 是第一步,目前热招的岗位中,就有基于大模型开放 API 做应用开发的,大家可以在招聘站点上具体看看职位要求。
用智谱 GLM-4大模型开发自己的IDEA插件
|
12天前
|
Java Maven Kotlin
[AIGC] 请你写一遍博客介绍 “使用idea+kotinlin+springboot+maven 结合开发一个简单的接口“,输出markdown格式,用中文回答,请尽可能详细
[AIGC] 请你写一遍博客介绍 “使用idea+kotinlin+springboot+maven 结合开发一个简单的接口“,输出markdown格式,用中文回答,请尽可能详细
178 0
|
12天前
|
分布式计算 Hadoop Scala
Spark【环境搭建 01】spark-3.0.0-without 单机版(安装+配置+测试案例)
【4月更文挑战第13天】Spark【环境搭建 01】spark-3.0.0-without 单机版(安装+配置+测试案例)
45 0
|
12天前
|
NoSQL 关系型数据库 MySQL
开发者福音:用IDEA和Iedis2加速Redis开发与调试
开发者福音:用IDEA和Iedis2加速Redis开发与调试
50 0
开发者福音:用IDEA和Iedis2加速Redis开发与调试
|
12天前
|
XML Java 数据格式
推荐一款idea中MybatisX 快速开发插件
推荐一款idea中MybatisX 快速开发插件
29 0
|
12天前
|
机器学习/深度学习 人工智能 Java
20款超级好用的idea插件,开发效率翻倍!!!
20款超级好用的idea插件,开发效率翻倍!!!
94 1