前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用IDEA开发Spark程序

使用IDEA开发Spark程序

作者头像
码客说
发布2022-04-26 08:31:56
7070
发布2022-04-26 08:31:56
举报
文章被收录于专栏:码客码客

Windows环境

下载地址

链接:https://pan.baidu.com/s/1YczOo5novINV_MimJ9Xpqg 提取码:psvm

版本

名称

版本

Scala

2.12.15

Spark

3.1.3

Hadoop

2.7.7

Scala

下载

https://www.scala-lang.org/download/2.12.15.html

image-20220421183614199
image-20220421183614199

Spark

https://spark.apache.org/downloads.html

image-20220421171049474
image-20220421171049474

下载地址

https://dlcdn.apache.org/spark/spark-3.1.3/spark-3.1.3-bin-hadoop2.7.tgz

设置环境变量

Path中添加

Path

D:\Tools\bigdata\spark-3.1.3-bin-hadoop2.7\bin

SPARK_LOCAL_DIRS

D:\Tools\bigdata\spark-3.1.3-bin-hadoop2.7\temp

如图

image-20220422104639709
image-20220422104639709

其中

SPARK_LOCAL_DIRS 是设置临时文件的存储位置,比如运行一个jar文件,就会先把文件放到这个临时目录中,使用完成后再删除。

运行

代码语言:javascript
复制
spark-shell

运行报错

java.io.IOException: Failed to delete

当我们提交打包好的spark程序时提示如上报错。

在windows环境下本身就存在这样的问题,和我们的程序没有关系。

若是想消除该报错,可以在%SPARK_HOME%/conf下的文件log4j.properties(没有的话可以复制log4j.properties.template文件)

最后面添加如下信息:

代码语言:javascript
复制
log4j.logger.org.apache.spark.util.ShutdownHookManager=OFF
log4j.logger.org.apache.spark.SparkEnv=ERROR

Hadoop

https://archive.apache.org/dist/hadoop/common/hadoop-2.7.7/

配置HADOOP_HOME&Path

HADOOP_HOME

D:\Tools\bigdata\hadoop-2.7.7

Path

D:\Tools\bigdata\hadoop-2.7.7\bin

配置文件

D:\Tools\bigdata\hadoop-2.7.7\etc\hadoop,修改hadoop的4个主要配置文件

修改core-site.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/D:/Tools/bigdata/hadoop-2.7.7/workspace/tmp</value>
    <description>namenode上本地的hadoop临时文件夹</description>
  </property>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
    <description>HDFS的URI,文件系统://namenode标识:端口号</description>
  </property>
</configuration>

修改hdfs-site.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
  <!-- 这个参数设置为1,因为是单机版hadoop -->
  <property>
    <name>dfs.replication</name>
    <value>1</value>
    <description>副本个数,配置默认是3,应小于datanode机器数量</description>
  </property>
  <property>
    <name>dfs.data.dir</name>
    <value>/D:/Tools/bigdata/hadoop-2.7.7/workspace/data</value>
    <description>datanode上数据块的物理存储位置</description>
  </property>
  <property>
    <name>dfs.name.dir</name>
    <value>/D:/Tools/bigdata/hadoop-2.7.7/workspace/name</value>
    <description>namenode上存储hdfs名字空间元数据</description>
  </property>
</configuration>

修改mapred-site.xml(如果不存在就先copy mapred-site.xml.template,再修改文件名为mapred-site.xml)

代码语言:javascript
复制
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
  <property>
    <name>mapred.job.tracker</name>
    <value>hdfs://localhost:9001</value>
  </property>
</configuration>

修改yarn-site.xml

代码语言:javascript
复制
<?xml version="1.0"?>

<configuration>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
</configuration>

winutils

https://gitee.com/nkuhyx/winutils

找到对应的版本把bin里的文件覆盖到hadoop的bin目录下

D:\Tools\bigdata\hadoop-2.7.7\bin

创建项目

创建项目

image-20220421143002437
image-20220421143002437

项目名WordCount

image-20220421143202036
image-20220421143202036

在项目名称WordCount上单击鼠标右键,在弹出的菜单中点击Add Framework Support

image-20220421184711204
image-20220421184711204

java目录上单击鼠标右键,在弹出的菜单中选择Refactor,再在弹出的菜单中选择Rename

然后,在出现的界面中把java目录名称修改为scala

image-20220421143610503
image-20220421143610503

添加类WordCount

image-20220421143726513
image-20220421143726513

在IDEA开发界面中,打开pom.xml,清空里面的内容,输入如下内容:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.psvmc</groupId>
    <artifactId>WordCount</artifactId>
    <version>1.0</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <spark.version>3.1.3</spark.version>
        <scala.version>2.12</scala.version>
    </properties>

    <repositories>
        <repository>
            <id>alimaven</id>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        </repository>
    </repositories>
    <dependencies>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_${scala.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>

    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <version>3.4.6</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

测试

创建测试文件wordcount.txt

D:\spark_study\wordcount.txt

代码语言:javascript
复制
good good study
day day up

然后,再打开WordCount.scala代码文件,清空里面的内容,输入如下内容:

代码语言:javascript
复制
import org.apache.spark.{SparkConf, SparkContext}

object WordCount {
  def main(args: Array[String]): Unit = {
    val inputFile = "file:///D:\\spark_study\\wordcount.txt"
    val conf = new SparkConf().setAppName("WordCount").setMaster("local")
    val sc = new SparkContext(conf)
    val textFile = sc.textFile(inputFile)
    val wordCount = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)
    wordCount.foreach(println)
  }
}

运行就可以看到结果为

(up,1) (day,2) (good,2) (study,1)

打包运行

在IDEA开发界面的右侧,点击Maven图标,会弹出Maven调试界面

在Maven调试界面中点击package,就可以对应用程序进行打包,打包成JAR包。

image-20220421165441710
image-20220421165441710

这时,到IDEA开发界面左侧的项目目录树中,在“target”目录下,就可以看到生成了两个JAR文件,

分别是:WordCount-1.0.jarWordCount-1.0-jar-with-dependencies.jar

image-20220421181248319
image-20220421181248319

然后,打开一个Linux终端,执行如下命令运行JAR包:

代码语言:javascript
复制
spark-submit --class WordCount D:\Project\Spark\WordCount\target\WordCount-1.0-jar-with-dependencies.jar
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Windows环境
    • Scala
      • Spark
        • Hadoop
          • 配置文件
          • winutils
      • 创建项目
      • 测试
      • 打包运行
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档