最近实习需要用到Graphx, 但是之前没有接触过Spark的相关知识,于是开始自学Spark。首先环境搭建就是一道坎,折腾来折腾去花了两天的时间才终于成功基于Scala和Maven 实现了WordCount,也算是Spark中的HelloWorld了吧。
环境搭建
首先我们需要搭建好相关的环境,包括:IntelliJ IDEA(官网上下载最新的就行了)、JDK(1.8)、Scala(2.12.12)、Spark(3.0.1)、Hadoop(2.7.4)Maven(如果你下载的是最新版的IDEA的话就不用下载了,因为IDEA里面已经自带了)(安装完后记得添加环境变量)
这里要注意版本问题,各个包之间的版本是有对应限定的,如果不想麻烦的话都下载和我上面标注好的版本就行了,本人目前使用是没有问题的。除此之外安装的时候还有一些小问题:启动spark的时候还是会提示找不到可执行的hadoop winutils.exe,这个时候要去网上下载好这个文件在hadoop\bin 中替换掉原文件就可以了。
最后我们在IDEA中安装Scala的插件:
在开始页面中的Plugins中找到Scala的插件然后安装就可以了:
项目编辑
首先新建一个项目,并在左边选择Maven, 然后选择 Project SDK(这里下拉框应该会自动生成可以选择的SDK,没有的话就手动选择之前下载的JDK的文件)。点击create from archetype 选择,点击Next。
这里选择要创建项目的路径,然后填写项目的名称,然后点finish.
刚进去的时候我们先设置一下Plugins, 点击左上角的File->Settings->Plugins 看看有没有scala插件,有的话就不管,没有的话就装上去。
然后我们再设置一下各个sdk, Flie->Project Settings->Global Libraries 在这里将之前安装的scala-sdk装入。然后这里还要将Libraries设置一下File->Project Settings->Libraries 这里同样将scala-sdk装入,这些应该点击“+”号后都已经将sdk列出来了,这时点击sdk变蓝后确认就行了。
然后在File->Project Settings->SDKs中将jdk导入。
接下来就到了最关键的一步了,我们需要为这个项目配置依赖,只有配置了依赖,我们才能在项目中import 我们需要的库,配置需要在pom.xml中写出。只要我们在pom中写进了我们需要的一些库,maven会帮我们自动下载的,但是maven 默认的下载源在国外,所以下载经常断,导致无法正确的配置上我们需要的包,因此我建议在写pom 之前我们先设置国内的下载镜像地址。首先我们点击File->Settings->Build,Execution,Deployment->Build Tools->Maven. 这里有两个需要更改的地方:一个是User settings file 一个是Local repository.这里系统会默认两个路径,但是为了便于管理,我们还是把他们更改成我们自定义的路径。其中User settings file 中的.xml文件是我们的设置文件,我们将下述内容写进我们自定义的settings文件中:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>
这样以来我们再下载依赖的包的时候就会默认在国内的镜像上面下载了。
最后再建立一个空的文件夹respository(这里注意这个文件夹的路径一定要和之前填写的Local repository对应,同理我们自己建的.xml文件也要和User settings file中填写的路径相对应)用来存放我们下载下来的依赖包。
到这一步我们终于可以将我们需要的依赖写到我们的项目里了,这里我给出我的pom,直接复制然后覆盖掉原来的pom文件就可以了:
<?xml version="1.0" encoding="UTF-8"?>