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
Spark
https://spark.apache.org/downloads.html
下载地址
https://dlcdn.apache.org/spark/spark-3.1.3/spark-3.1.3-bin-hadoop2.7.tgz
设置环境变量
Path中添加
键 | 值 |
---|---|
Path | D:Toolsbigdataspark-3.1.3-bin-hadoop2.7bin |
SPARK_LOCAL_DIRS | D:Toolsbigdataspark-3.1.3-bin-hadoop2.7temp |
如图
其中
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:Toolsbigdatahadoop-2.7.7 |
Path | D:Toolsbigdatahadoop-2.7.7bin |
配置文件
D:Toolsbigdatahadoop-2.7.7etchadoop,修改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:Toolsbigdatahadoop-2.7.7bin
创建项目
创建项目
项目名WordCount
在项目名称WordCount
上单击鼠标右键,在弹出的菜单中点击Add Framework Support
在java
目录上单击鼠标右键,在弹出的菜单中选择Refactor
,再在弹出的菜单中选择Rename
,
然后,在出现的界面中把java
目录名称修改为scala
。
添加类WordCount
在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_studywordcount.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包。
这时,到IDEA开发界面左侧的项目目录树中,在“target”目录下,就可以看到生成了两个JAR文件,
分别是:WordCount-1.0.jar
和WordCount-1.0-jar-with-dependencies.jar
。
然后,打开一个Linux终端,执行如下命令运行JAR包:
代码语言:javascript复制spark-submit --class WordCount D:ProjectSparkWordCounttargetWordCount-1.0-jar-with-dependencies.jar