Spark大数据处理:技术、应用与性能优化【2.2】
第5章 Spark开发环境配置及流程
通过前⾯的介绍,相信读者已经对Spark的内部机制有了⼀定的了解,本章将介绍如何在Spark中开发应⽤程序,以及如何进⾏程序的编译和调试。在编写Spark应⽤程序之前,需要安装和配置开发环境,⼀般可以选择Intellij或Eclipse进⾏开发和调试,使⽤SBT编译项⽬。
5.1 Spark应⽤开发环境配置
Spark的开发可以通过Intellij或者Eclipse IDE进⾏,在环境配置的开始阶段,还需要安装相应的Scala插件。
5.1.1 使⽤Intellij开发Spark程序
下⾯介绍如何使⽤Intellij IDEA构建Spark开发环境和源码阅读环境。由于Intellij对Scala的⽀持更好,所以⽬前Spark开发团队使⽤Intellij作为开发环境。
1.配置开发环境
(1)安装JDK
⽤户可以⾃⾏安装JDK6、JDK7。官⽹地址为: http://www.oracle.com/technetwork/java/javase/downloads/index.html
下载后,如果在Windows下直接运⾏安装程序,则⾃动配置环境变量,安装成功后,在CMD的命令⾏下输⼊Java,如有Java版本的⽇志信息提⽰,则证明安装成功。
如果在Linux下安装,下载JDK包解压缩后,还需要配置环境变量。
在/etc/profile⽂件中,配置环境变量这样程序就能找到JDK的安装路经:
export JAVA_HOME=/usr/java/jdk1.6.0_27 export JAVA_BIN=/usr/java/jdk1.6.0_27/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME JAVA_BIN PATH CLASSPATH
(2)安装Scala
Spark对Scala的版本有约束,⽤户可以在Spark的官⽅下载界⾯看到相应的Scala版本号。下载指定的Scala包,官⽹地址为: http://www.scala-lang.org/download/。
(3)安装Intellij IDEA
⽤户可以下载安装最新版本的Intellij,官⽹地址为: http://www.jetbrains.com/idea/download/。
⽬前Intellij最新的版本中已经可以⽀持新建sbt⼯程,安装Scala插件可以很好地⽀持Scala开发。
(4)在Intellij中安装Scala插件
在Intellij菜单中选择“Configure”→“Plugins”→“Browse repositories”命令,在弹出的界⾯中输⼊“Scala”搜索插件(⻅图5-1),然后点击相应安装按钮进⾏安装,重启Intellij使配置⽣效。

2.配置Spark应⽤开发环境
1)在Intellij IDEA中创建Scala Project,名称为SparkTest。
2)选择菜单中的“File”→“project structure”→“Libraries”,然后选择“+”,导⼊spark-assembly_2.10-1.0.0-incubating-hadoop2.2.0.jar。
只需导⼊上述Jar包即可,该包可以通过sbt/sbt assembly命令⽣成,这个命令相当于将Spark的所有依赖包和Spark源码打包为⼀个整体。
在assembly/target/scala-2.10.4/⽬录下⽣成spark-assembly-1.0.0- incubating-hadoop2.2.0.jar。
3)如果IDE⽆法识别Scala库,则需要以同样⽅式将Scala库的jar包导⼊,之后可以开始开发Scala程序,如图5-2所⽰。本例将Spark默认的⽰例程序SparkPi复制进⽂件。

3.运⾏Spark程序
(1)本地运⾏
编写完Scala程序后,可以直接在Intellij中以本地(local)模式运⾏(⻅图5-3),⽅法如下。
注意,设置Program arguments中参数为local。

在Intellij中点击Run/Debug Configuration按钮,在其下拉列表选择Edit Configurations选项。在Run输⼊选择界⾯中,如图5-3所⽰,在输⼊框Program arguments中输⼊main函数的输⼊参数local,即为本地单机执⾏Spark应⽤。然后右键选择需要运⾏的类,点击Run运⾏Spark应⽤程序。
(2)在集群上运⾏Spark应⽤Jar包
如果想把程序打成Jar包,通过命令⾏的形式在Spark集群中运⾏,可以按照以下步骤操作。
1)选择“File”→“Project Structure”命令,然后选择“Artifact”,单击“+”按钮,选择“Jar”→“From Modules with dependencies”,如图5-4所⽰。
选择Main函数,在弹出的对话框中选择输出Jar位置,并单击“OK”按钮。
在图5-4中点击From mudules with dependencies后将会出现如图5-5所⽰的输⼊框,在其中的输⼊框中选择需要执⾏的Main函数。
在图5-5所⽰的界⾯中单击OK按钮后,在图5-6所⽰的对话框中通过OutPut layout中的“+”选择依赖的Jar包。



2)在主菜单中选择“Build”→“Build Artifact”命令,编译⽣成Jar包。
3)在集群的主节点,通过下⾯命令执⾏⽣成的Jar包SparkTest.jar。
java -jar SparkTest.jar
5.1.2 使⽤Eclipse开发Spark程序
下⾯介绍如何使⽤Eclipse配置和开发Spark的环境,⽤户可以在Windows或者Linux环境下使⽤Eclipse进⾏开发。
1.环境配置
与Intellij配置环境⼀样,需要⽤户下载安装JDK和Scala。前⽂已详细介绍,这⾥不再赘述。
1)下载Eclipse Scala IDE插件,官⽹地址为http://scalaide.org/download/sdk.html,可在官⽹中⾃⾏下载安装。
2)下载Eclipse[1],官⽹地址为http://www.eclipse.org/downloads/。
2.安装Scala插件
1)将Eclipse Scala IDE插件中的features和plugins两个⽬录下的所有⽂件复制到Eclipse解压后对应的根⽬录中。重启Eclipse,单击Eclipse右上⾓⽅框按钮,如图5-7所⽰,在弹出的Open Perspective对话框中查看是否有“Scala”⼀项,如果有则直接单击打开。

2)在Eclipse中,选择Help按钮,然后点击Install New Software命令,在打开的输⼊框⾥填⼊http://download.scalaide.org/sdk/e38/scala29/stable/site,并按回⻋键,可看到以下内容(⻅图5-8中加框突出部分),选择Scala IDE for Eclipse和Scala IDE for Eclipse development support两项进⾏安装即可,如图5-8所⽰。

3)直接下载Scala IDE,可以在官⽹http://scala-ide.org/下载。现在的ScalaIDE中默认⾃带了Eclipse,⽤户可以直接使⽤。
3.开发Spark程序
1)在安装好Scala插件的Eclipse中,选择File→New→Other命令,在弹出的New窗⼝中选择Scala Wizard→Scala Project命令,创建Scala项⽬,如图5-9所⽰。

2)右击新建⼯程,在快捷菜单中选择Properties命令,在弹出的窗⼝(⻅图5-10)中依次选择Java Build Path→Libraties→Add External JARs即可,导⼊assembly/target/scala-2.9.3/⽬录下的spark-assembly- 1.0.0-incubating-hadoop2.2.0.jar(这个包可以通过sbt/sbt assembly⽣成,也可以在预编译版本的Spark中找到)。

3)在⼯程中创建⼀个Scala对象(Object),命名为WordCount,在Name后的输⼊框填⼊WordCount,如图5-11所⽰。

WordCount是⼀个测试程序,统计输⼊的词频,读者可以参考第6章来了解。
在SparkTest⼯程中,右击WordCount.scala,在弹出的快捷菜单中选择Export命令,然后在弹出的窗⼝中选择Java→JAR File命令,将⽂件命名为WordCount。最后⽣成WordCound.jar的可执⾏Jar包。
或者直接在SparkContext中将第⼀个参数配置为local,然后直接在Eclipse点击run按钮,本地运⾏程序。
提⽰ Java语⾔开发Spark程序。
将Spark开发程序包spark-assembly-1.0.0-incubating-hadoop2.2.0.jar作为第三⽅依赖库。由于Scala也是运⾏在JVM之上,并且可以和Java合编程,所以可以按原有⽅式开发Java程序并调⽤Spark中的API。
[1] 下载的Eclipse版本⼀定要与Eclipse Scala IDE插件版本⼀致。
5.1.3 使⽤SBT构建Spark程序
⽤户也可以直接使⽤SBT构建Spark应⽤。在这个应⽤中,以统计包含“Hello”字符的⾏数为案例。
(1)构建开发环境
1)下载并解压Spark 1.0.0程序包或者通过git clone https://github.com/apache/spark命令将项⽬克隆到Spark根⽬录。
2)运⾏sbt/sbt assembly构建项⽬。
3)为了使⽤SBT成功构建Spark,预先安装SBT。
(2)开发应⽤程序
在构建Spark以后,就可以开始开发应⽤了。
1)创建⽬录mkdir HelloWorld。
2)创建⼀个.sbt⽂件,在⽬录HelloWorld中创建simple.sbt⽂件。
3)在.sbt⽂件中加⼊如下配置项配置应⽤名,版本和依赖等信息。
name := "HelloWorld Project"
version := "1.0"
scalaVersion := "2.10.3"
libraryDependencies += "org.apache.spark" %% "spark-core" % "0.9.1"
resolvers += "Akka Repository" at "http://repo.akka.io/releases/
(3)创建代码⽂件
HelloWorld/src/main/scala/HelloWorld.scala
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
object HelloWorld {
def main(args: Array[String]) {
val logFile = "src/data/sample.txt"
val sc = new SparkContext("local", "Simple App", "/path/to/spark-1.0.0-
incubating",
List("target/scala-2.10/simple-project_2.10-1.0.jar"))
val logData = sc.textFile(logFile, 2).cache()
val numHello = logData.filter(line => line.contains("Hello")).count()
println("Lines with the: %s".format(numHello))
}
}
(4)运⾏程序
1)程序创建后,返回到HelloWorld根⽬录。
2)运⾏sbt package进⾏构建与打包。
3)运⾏sbt run,系统执⾏构建好的程序。
5.1.4 使⽤Spark Shell开发运⾏Spark程序
因为运⾏Spark Shell时,会默认创建⼀个SparkContext,命名为sc,所以不需要在Spark Shell创建新的SparkContext。在运⾏Spark Shell之前,可以设定参数MASTER指定Spark应⽤提交MASTER指向的相应集群或者本地模式执⾏。可以通过参数ADD_JARS将JARS添加到classpath中。
如果希望spakr-shell在本地通过4核的CPU运⾏,需要以如下⽅式启动。
$MASTER=local[4] ./spark-shell
这⾥的4是指启动4个⼯作线程。
如果要添加JARS,可以⽤如下⽅法实现:
$MASTER=local[4] ADD_JARS=code.jar ./spark-shell
在Spark Shell中,输⼊下⾯代码,读取dir⽂件,以输出⽂件中有多少数据项。
scala>val text=sc.textFile("dir") scala>text.count
按回⻋键,即可运⾏Shell中的程序。
5.2 远程调试Spark程序
本地调试Spark程序和传统的调试单机的Java程序基本⼀致,读者可以参照原来的⽅式调试,关于单机调试本书暂不介绍。对于远程调试服务器上的Spark代码,⾸先确保在服务器和本地的Spark版本⼀致。需按前⽂介绍的⽅法预先安装好JDK和git。
1.编译Spark
在服务器端和本地计算机下载Spark项⽬。
通过下⾯命令克隆⼀份Spark源码。
git clone https://github.com/apache/spark
然后针对指定的Hadoop版本进⾏编译。配置代码如下:
SPARK_HADOOP_VERSION=2.3.0 sbt/sbt assembly
2.在服务器端的配置
1)根据相应的Spark配置指定版本的Hadoop并启动Hadoop。
2)对编译好的Spark进⾏配置,在conf/spark-env.sh⽂件中进⾏如下配置。下⾯代码配置了Spark调试所需的Java参数。
export SPARK_JAVA_OPTS=" -agentlib:jdwp=transport=dt_socket,server=y, suspend=y,address=9999"
其中suspend=y表⽰设置为需要挂起的模式。这样,当启动Spark的作业时,程序会⾃动挂起,等待本地的IDE附加(attach)到被调试的应⽤程序上。address后接的是开放等待连接的端⼝号。
3.启动Spark集群和应⽤程序
1)启动Spark集群。
./sbin/start-all.sh
2)启动需要调试的程序,以Spark中⾃带的HdfsWordCount为例。
MASTER=spark://10.10.1.168:7077 ./bin/run-example org.apache.spark.examples.streaming.HdfsWordCount hdfs://localhost: 9000/test/test.txt
执⾏后程序挂起,并等待本地的Intellij进⾏连接,如图5-12所⽰。

4.配置本地IDE
配置并连接服务器端挂起的程序。
在Intellij中点击run→edit configuration,在弹出的Run/Debug Configuration界⾯中选择remote,在默认配置中将端⼝号Port设置为9999,将主机IP地址的Host改为服务器的地址10.10.1.168,同时⽤选择Debugger mode为Attach(附加)⽅式,如图5-13所⽰。
选择附加⽅式后,在程序中设置断点即可进⾏调试。

更多推荐
所有评论(0)