快速搭建你的第一个Spark应用程序

1,042 阅读1分钟

之前的一篇文章快速运行你的第一个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程序就成功地执行了!