之前的一篇文章快速运行你的第一个Hadoop程序!通过Hadoop的环境搭建到WordCount程序案例简单的展示了一个大数据入门案例,这篇文章将介绍另外一个计算引擎框架Spark的程序环境搭建到代码编写及运行,通过简单的案例WordCount来展示Spark程序的构建和运行
Spark环境搭建
一、搭建环境
前提:JDK已经安装(这个最后安装1.8版本,因为大部分公司现在用的还是jdk1.8版本),我电脑已经安装了,这里不多说
工欲善其事,必先利其器,环境这一步很重要!!!因为你的代码正常写完之后跑不起来,大概率就是因为环境的问题(版本不匹配等),因此环境安装显得格外重要,本次的安装软件版本号分别是scala2.12和spark3.0.0,一定要跟我这个版本号一样,不然可能出现未知错误。
1、安装scala2.12.11
第一步:查看brew中可安装的scala版本
brew search scala
第二步:安装指定版本的scala
brew install scala@2.12
安装完路径:
/usr/local/Cellar/scala@2.12/2.12.12
第三步:配置scala环境变量,执行以下命令:
echo 'export PATH="/usr/local/opt/scala@2.12/bin:$PATH"' >> /Users/zxb/.bash_profile
source ~/.bash_profile // 让上面的配置生效
注意:其中 /Users/zxb/.bash_profile 为你的环境变量配置文件的绝对路径,根据自己的电脑配置即可
- 检验scala
上面安装scala完成之后,在终端执行scala检验scala是否安装成功
出现以上画面表示scala2.12就安装配置完成了!
2、安装spark
第一步:下载spark3.0.0安装包,我这里有下载链接,直接下载即可
链接: pan.baidu.com/s/1Qhlmw8Yj… 密码: s2j7
第二步:解压spark安装包到指定的目录下(建议把大数据相关的软件安装同一个目录下,方便管理)
第三步:运行spark-shell检验安装
进入安装主目录的bin目录下
cd /Users/Bigdata/spark-3.0.0-bin-hadoop3.2/bin
执行spark-shell
出现以上画面,说明spark已经安装成功!
3、配置idea环境
-
安装scala插件
打开idea,打开插件安装位置Plugins,在插件市场搜索scala安装即可,安装速度比较慢
也可以选择离线安装,下面是离线安装包
链接: pan.baidu.com/s/12A5FY6xL… 密码: pfgb
二、本机执行
1、执行wordcount
进入到spark文件目录的bin目录下创建input目录并在里面创建inputword文本文件,里面写入一些数据,然后进入执行spark-shell命令
可以看到,结果已经显示出来了,计算出了每个单词的出现的次数。
2、官方例子
注意:这种使用jar包来通过命令提交的方式执行
进入到spark文件目录的bin目录下执行以下命令
spark-submit --class org.apache.spark.examples.SparkPi --master local[2] ../examples/jars/spark-examples_2.12-3.0.0.jar 10
结果:
3、IDEA中执行Spark程序
上面都是通过终端spark控制台执行的,但是我们平时开发基本上都是使用专业的IDE进行开发,主流的就是idea这款软件,接下来演示一下如何使用idea开发spark程序,我们还是开发一个简单的WordCount程序来进行演示。
3.1、idea项目创建和配置
- 创建一个普通的maven项目,点击next
然后编辑好项目信息即可
- 构建module
方便以后对代码进行管理,这里通过构建module来完成分类
首先删除掉默认的src目录,然后new->Module,之后就跟上面一样,选择maven,填写好信息即可
- 添加scala SDK
File->Project Structure ->Global Libraries,点击上方的“+” ,选择本地安装scala即可
- 添加框架支持
右键项目->Add FrameworkSupport->Scala,如果上面scala sdk已经导入了,那么这里面就可以显示刚才配置的scala jdk
3.2、开发spark程序
package com.dongci777.bigdata.spark.core.wc
import org.apache.spark.{SparkConf, SparkContext}
/**
* @Author: zxb
* @Date : 2020/12/20 1:45 上午
*/
object WordCount3 {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setMaster("local").setAppName("WordCount")
val sc = new SparkContext(conf)
sc.setLogLevel("WARN")
val lines = sc.textFile("datas/wordcount")
val words = lines.flatMap(_.split(" "))
val wordToOne = words.map(word => (word, 1))
val wordCount = wordToOne.reduceByKey(_ + _)
val array = wordCount.collect()
array.foreach(println)
}
}
在编写完代码运行程序之前,我们配置一下log4j.properties文件,方便我们查看结果,屏蔽一些不必要的日志打印
- log4j.properties配置
在resource文件目录下新建一个file,命名为log4j.properties,编辑文件内容如下:
log4j.rootCategory=ERROR, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd
HH:mm:ss} %p %c{1}: %m%n
# Set the default spark-shell log level to ERROR. When running the spark-shell,
the
# log level for this class is used to overwrite the root logger's log level, so
that
# the user can have different defaults for the shell and regular Spark apps.
log4j.logger.org.apache.spark.repl.Main=ERROR
# Settings to quiet third party logs that are too verbose
log4j.logger.org.spark_project.jetty=ERROR
log4j.logger.org.spark_project.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=ERROR
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=ERROR
log4j.logger.org.apache.parquet=ERROR
log4j.logger.parquet=ERROR
# SPARK-9183: Settings to avoid annoying messages when looking up nonexistent
UDFs in SparkSQL with Hive support
log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL
log4j.logger.org.apache.hadoop.hive.ql.exec.FunctionRegistry=ERROR
然后运行程序,查看输出结果:
结果打印出来了,说明spark程序就成功地执行了!