视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
windows本地环境Spark开发环境配置
2025-10-05 17:17:11 责编:小OO
文档
Spark开发环境准备

1. 准备环境

准备环境包括:

(1)JDK安装包(exe、zip):http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html

(2)Scala安装包(msi、zip):

http://www.scala-lang.org/download/

(3)IDEA安装包:

https://www.jetbrains.com/idea/

(6)Spark安装包:

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

安装JDK

配置环境变量(1.7以上版本)

JAVA_HOME = C:\\Program Files\\Java\\jdk1.7.0_71

CLASSPATH =.;%JAVA_HOME%\\lib;

PATH +=;%JAVA_HOME%\\bin;%JAVA_HOME%\\jre\\bin;

进入cmd界面测试jdk是否安装成功。

C:\\Users\\admin>java -version

java version "1.7.0_71"

Java(TM) SE Runtime Environment (build 1.7.0_71-b14)

安装Scala

安装完毕配置环境变量,增加PATH变量:

SCALA_HOME = C:\\Program Files\\scala-2.11.8

PATH += %SCALA_HOME%\\bin;

进入cmd界面测试scala是否安装成功。

C:\\Users\\admin>scala

Welcome to Scala 2.11.8 (Java HotSpot(TM) -Bit Server VM, Java 1.7.0_71).

Type in expressions for evaluation. Or try :help.

spark安装

1.解压压缩文件至指定目录

spark-1.6.2-bin-hadoop2.6.tgz

2.配置环境变量

HADOOP_HOME = D:\\spark-1.6.2-bin-hadoop2.6

在path变量中增加;%HADOOP_HOME%\\bin

3.添加winutils.exe(注意32位和位不兼容)

将winutils.exe添加至目录bin中

4.验证

CMD输入:spark-shell

退出输入":quit"

2 构建IntelliJ IDEA开发环境

官方提供了Ultimate版和Community 版可供选择,主要区别:

1)Ultimate版功能齐全的IDE,支持Web和Enterprise,免费试用30天,由官方提供一个专有的开发工具集和架构支持。

2)Community 版支持Java、Groovy、Scala、Android的开发,免费并且开源,由社区进行支持;

本例使用的是ideaIC-2016.2,请选择适合的操作系统进行安装。

提示

如何去安装IntelliJ IDEA?

❒Windows :直接运行.exe文件,按照向导步骤操作即可。

❒Mac OS X:打开.dmg包,并复制IntelliJ IDEA到应用文件夹。

❒Linux:解压.tar.gz压缩包,并运行bin/idea.sh(需要在环境变量PATH中加入IDEA目录,并执行source命令使配置文件生效)

根据实际需求,我们选择Windows 系统的Community 版本,进行Scala程序的开发。步骤包括:安装Scala插件和创建项目并在IDEA中编写Scala代码。

安装Scala插件

①运行IDEA 并安装和配置IDEA 的Scala开发插件,启动程序界面如图3-2所示,此时需要选择“Configure”,然后进入IDEA的配置页面:

图3-2  选择“Configure”

②在IDEA的配置页面选择“Plugins”(见图3-3),进入插件安装界面。

图3-3  选择“Plugins”

③点击安装界面左下角的“Install JetBrains plugin”选项,进入JetBrains插件选择页面,如图3-4所示。

图3-4  JetBrains插件选择页面

(如果网络不稳定,可以提前下载,然后选择“Install plugin from disk”本地加载插件,下载地址:http://www.jetbrains.net/confluence/display/SCA/Scala+Plugin+for+IntelliJ+IDEA,见安装包文件压缩包:scala-intellij-bin-2016.2.1.zip)

④在左上方的输入框中输入“Scala”来查找Scala插件,此时点击右侧的“Install plugin”按钮,如图3-5所示。

图3-5  安装Scala Plugin

插件安装完毕,重启IDEA。

创建项目并在IDEA中编写Scala代码。

①进入首页(见图3-2),选择“Create New Project”命令,此时选择左侧列表中的“Scala”选项,为了方便以后的开发工作,选择右侧的“SBT”选项,如图3-6所示。

图3-6 建立Scala的SBT项目

②点击“Next”按钮进入下一步,设置Scala工程名称和本地目录(见图3-7),选择SDK、SBT、Scala版本,点击“Finish”按钮完成工程的创建:

图3-7  设置工程名称和本地目录

③由于在前面选择了“SBT”选项,所以此时IDEA智能地构建SBT工具:点击工程名称“HelloSpark”,可以看到SBT自动创建的一些目录,如图3-8所示。

图3-8  SBT自动创建的一些目录

④此时右击src目录的main中的Scala,在弹出的“New”菜单下选择“ScalaClass”,输入文件名“HelloSpark”,把Kinde选择为“Object”,点击“OK”按钮完成如图3-19所示。

图3-9  点击“OK”按钮确认创建Object

⑤编写“HelloSpark”的源代码,点击代码区,出现下拉菜单视图,选择Run “HelloSpark”来运行程序,如图3-10所示:

图3-10  选择运行程序的命令

加入Spark开发包

使用IDEA导入外部Jar包,具体步骤:File-> Project Structure-> Modules -> Dependencies ->+... -> Library... ->Select Library Type(Java)->Select Library Files ->Configure Library,以添加spark-assembly-1.6.2-hadoop2.6.0.jar为例,添加步骤如下:

1点击“File”,选择“Project Structure”,如图3-11所示。

图3-11选择Project Structure菜单

2点击“Modules”,选择“Dependencies”,增加“Library”,如图3-12所示。

图3-12选择添加依赖库

3选择依赖库类型“Java”,如图3-13所示。

图3-13选择依赖库类型(Java)

4通过“Select Library Files”,选择“spark-assembly-*-*.jar”,如图3-14所示。

图3-14选择spark-assembly-1.5.0-hadoop2.3.0.jar

选择完毕进行Spark开发包加载。

JDK路径错误处理

如果SBT出现如图3-15提示,这是由于没有设置Java的JDK路径的原因。

图3-15出现JDK路径错误

请点击最右侧的Project Structure,如图3-16所示,进入视图,并配置项目JDK。

图3-16配置Project Structure

选择最左侧的“Project”选项,并选择“No SDK”的“New”出现如图3-17所示,选择项目JDK为1.7。

图3-17选择JDK

重启IDEA,问题解决。

IDEA生成Jar包

使用IDEA编译成class文件,同时可以将class打包成Jar文件,方法如下:

①选择菜单File->Project Structure,弹出Project Structure的设置对话框。

②选择左边的Artifacts,点击上方的“+”按钮

③在弹出的对话框中选择Jar->from moduls with dependencies

④选择要启动的类,然后确定。

⑤应用之后选择菜单Build->Build Artifacts,选择Build或者Rebuild后即可生成,生成的Jar文件位于工程项目目录的out/artifacts下

1应用程序编程

不同于使用Spark Shell自动初始化SparkContext的例子,应用程序需要初始化一个SparkContext作为程序的一部分,然后将一个包含应用程序信息的SparkConf对象传递给SparkContext构造函数。

接下来编写简单应用程序SimpleApp,并描述一些简单的编码流程。

4.1创建SparkContext对象

编写一个Spark程序,首先创建SparkConf对象,该对象包含应用的信息。SparkConf对象构建完毕,需要创建SparkContext对象,该对象可以访问Spark集群。

//创建SparkConf对象

valconf = new SparkConf().setAppName("Simple Application")

// 创建SparkContext对象

valsc = new SparkContext(conf)

4.2编写简单应用程序

一个常见的Hadoop数据流模式是MapReduce,Spark可以轻易地实现MapReduce数据流,我们通过Spark API创建一个简单的Spark应用程序SimpleApp.scala。

importorg.apache.spark.SparkContext

importorg.apache.spark.SparkContext._

importorg.apache.spark.SparkConf

objectSimpleApp {

def main(args: Array[String]) {

vallogFile = "$YOUR_SPARK_HOME/README.md" // 测试文件

valconf = new SparkConf().setAppName("Simple Application")

valsc = new SparkContext(conf)

vallogData = sc.textFile(logFile, 2).cache()

valnumAs = logData.filter(line =>line.contains("a")).count()

valnumBs = logData.filter(line =>line.contains("b")).count()

println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))

  }

}

这个程序统计了Spark的README.md中含有“a”的行数和含有“b”的行数。实际需要用Spark的安装路径替换YOUR_SPARK_HOME。

4.3编译并提交应用程序到集群运行

可以采用IDEA生成Jar包的方式,也可以采取sbt或者mvn的方式打成Jar包。以sbtpackage为例,创建一个包含应用程序代码的Jar包。

一旦用户的应用程序被打包,就可以使用$SPARK_HOME/bin/spark-submit脚本启动应用程序。spark-submit脚本负责建立Spark的类路径和相关依赖,并支持不同的集群管理(Local、Standalone、YARN)和部署模式(client、cluster),通过提交参数进行区别。

1 使用sbt打成Jar包

使用sbt打成Jar包过程如下。

sbt package

...

[info] Packaging {..}/{..}/target/scala-2.10/simple-project_2.10-1.0.jar

2使用intellij打成Jar包

打包文件:

File-->>ProjectStructure -->点击Artificats-->>点击绿色加号 -->点击JAR-->>选择 From module with dependices 

点击Output Layout  看看是否没有第三方jar包,因为你使用spark集群环境,所以你不需要第三方jar包

重新build:

Build-->>Build Artifcat ..--->>build 或者rebuild

执行后就会在D:\\mygit\\study-scala\\out\\artifacts\\study_scala_jar目录下看到study-scala.jar

2 应用程序提交模板

应用程序提交模板如下:

./bin/spark-submit \

--class \

--master \

--deploy-mode \

  ... # other options

\

[application-arguments]

选项解释说明:

❒--class:应用程序入口位置,如org.apache.spark.examples.SparkPi;

❒--master:集群的master的URL,如spark://xxx.xxx.xxx.xxx:7077;或使用local在本地单线程地运行,或使用local[N]在本地以N个线程运行。你应该由运行local进行测试开始。

❒--deploy-mode:集群部署模式,cluster模式和client模式(默认模式);

❒application-jar:包含应用程序和所有依赖的Jar包的路径。该URL必须是在集群中全局可见的,比如,一个hdfs://路径或者一个在所有Worker节点都出现的file://路径。

❒application-arguments:传递给主类的main函数的参数。

对于Python应用,在的位置传入一个.py文件代替一个Jar包,并且以-py-files的方式在搜索路径下加入Python.zip、.egg或.py文件。

注意

常见的部署策略是从同一物理位置,即同一个网关的服务器上提交你的应用程序。在这种设置中,采用Client模式比较合适。在Client模式中,Driver直接在用户的spark-submit进程中启动,应用程序的输入和输出连接到控制台(console)。因此,这个模式对于涉及REPL(Read-Eval-Print Loop,“读取-求值-输出”循环)的应用程序尤其合适。

另外,如果你的应用程序是从远离Worker机器的某台机器上提交的(如你的笔记本电脑上),一般要用cluster模式,使Drivers和Executors之间的网络延迟最小化。(目前部署模式、Mesos集群模式和Python编写的应用不支持cluster模式。)

传递给Spark的masterURl可以是如表3-1所示的某个格式。

表3-1Spark的master URl格式及说明

Master URL说明
local以单线程在本地运行Spark(完全无并行)

local[K]在本地以K个Worker线程运行Spark(将这个数字设为你机器CPU核的数目比较理想)

local[*]以与你的机器上的逻辑核数目相同的Worker线程运行Spark

spark://HOST:PORT连接到一个给定的Spark模式集群上的Master。该端口必须是配置好、可供使用的,一般默认是7070

yarn-client以Client模式连接到一个YARN集群。该集群的位置可以在HADOOP_CONF_DIR变量中找到

yarn-cluster以Cluster模式连接到一个YARN集群。该集群的位置可以在HADOOP_CONF_DIR变量中找到

3以local模式提交应用程序

以local模式在4个CPU核上运行应用程序,命令如下

$ YOUR_SPARK_HOME/bin/spark-submit \

  --class "com.ucas.bigdata.SimpleApp" \

  --master local[4] \

  target/scala-2.10/simple-project_2.10-1.0.jar

...

4以Standalone模式提交应用程序

以Standalone模式运行应用程序,命令如下

./bin/spark-submit \

  --class "com.ucas.bigdata.SimpleApp " \

  --master spark://*.*.*.*:7077 \

  --executor-memory 2G \

  --total-executor-cores 10 \

target/scala-2.10/simple-project_2.10-1.0.jar

5以YARN模式提交应用程序

以Standalone模式运行应用程序,命令如下

./bin/spark-submit \

  --class "com.ucas.bigdata.SimpleApp " \

  --master yarn-cluster \\ # 也可以是 `yarn-client` 模式

  --executor-memory 2G \

  --num-executors 10 \

target/scala-2.10/simple-project_2.10-1.0.jar

4.3读取配置文件的方式

在scala程序中将有些变化参数以配置文件的方式读入

1.在src目录下建立reference.conf文件格式如下

actionInPath="file:///E:\\\\falco_data\\\\actions.txt"这是从本地读取文件的方式

docInPath="file:///E:\\\\falco_data\\\\document.txt"

dayCliRateOutPath="file:///E:\\\\result\\\\dayCliRate"

dayChannelPath=”file:///E:\\\\result\\\\dayChannel”

2.从配置文件中读取属性

Config conf = ConfigFactory.load() //默认按顺序查看src文件目录下是否有application.confapplication.json  application.properties  reference.conf

val bar1 = conf.getString("actionInPath ")下载本文

显示全文
专题