实战Scala & Spark (1)

来源:互联网 发布:网络大屏广告机 编辑:程序博客网 时间:2024/05/17 07:00




本文使用Windows8.1平台。

下载Spark1.4.0hadoop2.2.0支持的prebuild版本和源文件。安装到c:\spark-1.4.0(安装路径可以自己决定)。在c:\spark-1.4.0\bin目录下运行spark-shell命令,正常进入scala>状态,安装就好了。解压下载的sourcec:\spark-1.4.0\src。在src目录下产生如下目录:assembly, bagel, …, repl ...等。

研究Spark-Shell命令:

Spark中最主要的命令是spark-shell。启动后,用户可以在scala>状态输入自己的命令,执行scala语句等。哪spark-shell命令又是运行的什么呢?我们都知道Spark,Scala最后都会编译成Javaclass,通过查看spark-shell命令,在spark-class2.cmd中,我们发现了Java命令调用:

"%RUNNER%"-cp %LAUNCH_CLASSPATH% org.apache.spark.launcher.Main %*> %LAUNCHER_OUTPUT%

于是在脚本中我们打印出LAUNCH_CLASSPATH和找到相应的Main文件。

Classpath:

C:\spark-1.4.0\bin\..\lib\spark-assembly-1.4.0-hadoop2.6.0.jar

org.apache.spark.launcher.Main是在目录:

C:\spark-1.4.0\src\launcher\src\main\java\org\apache\spark\launcher

下的Main.java文件,啊哈!作为Java高手们,下一步我们做什么呢。。。。

c:\spark-1.4.0\src目录下的pom.xml文件中我们找到:

<scala.version>2.10.4</scala.version>

<scala.binary.version>2.10</scala.binary.version>

<java.version>1.6</java.version>


按照上述版本,设置好你的Java版本和scala版本。开始干吧!在spark-class2.cmd脚本中,Main.java运行的结果放到了%LAUNCHER_OUTPUT%文件中。修改Main.java,打印处运行参数,和检查相应的写入%LAUNCHER_OUTPUT%文件中的内容,我们发现运行spark-shell时,Main.java得到的参数是:

org.apache.spark.deploy.SparkSubmit

--class

org.apache.spark.repl.Main

而相应写入%LAUNCHER_OUTPUT%文件中的命令是:

C:\jdk1.8.0_60\bin\java-cp"C:\spark-1.4.0\bin\..\conf\;C:\spark-1.4.0\bin\..\lib\spark-assembly-1.4.0-hadoop2.6.0.jar;C:\spark-1.4.0\bin\..\lib\datanucleus-api-jdo-3.2.6.jar;C:\spark-1.4.0\bin\..\lib\datanucleus-core-3.2.10.jar;C:\spark-1.4.0\bin\..\lib\datanucleus-rdbms-3.2.9.jar""-Dscala.usejavacp=true" -Xms512m -Xmx512morg.apache.spark.deploy.SparkSubmit--class org.apache.spark.repl.Main spark-shell



从上面的研究,我们得到spark-shell最终运行了SparkSubmit和相应的运行参数。为了让Spark运行我们自己的版本,需要修改Main.java使其把spark-assembly-1.4.0-hadoop2.6.0.jar指到到我们自己版本的地方,如:C:\spark-1.4.0\bin\..\lib\classes。而SparkSubmit调用的最重要的类是SparkILoop.scala,位于:

C:\spark-1.4.0\src\repl\scala-2.10\src\main\scala\org\apache\spark\repl

简单修改,编译后,我们得到了自己的Spark运行版本:

15/10/2021:02:07 WARN NativeCodeLoader: Unable to load native-hadoop libraryfo

ryour platform... using builtin-java classes where applicable

Welcometo

____ __

/__/__ ___ _____/ /__

_\\/ _ \/ _ `/ __/ '_/

/___/.__/\_,_/_/ /_/\_\ version 1.4.0

/_/

(o-o)

(Hello,I'm Tony Spark!)



UsingScala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java1.8.0_60)

Typein expressions to have them evaluated.

Type:help for more information.

Sparkcontext available as sc.

15/10/2021:02:25 WARN Connection: BoneCP specified but not present inCLASSPATH

(orone of dependencies)

15/10/2021:02:26 WARN Connection: BoneCP specified but not present inCLASSPATH

(orone of dependencies)

15/10/2021:02:46 WARN ObjectStore: Version information not found inmetastore.

hive.metastore.schema.verificationis not enabled so recording the schema versio

n0.13.1aa

SQLcontext available as sqlContext.



scala>

SparkSubmit.scala

在目录C:\spark-1.4.0\src\core\src\main\scala\org\apache\spark\deploy下。

编译:

C:\spark-1.4.0\src\launcher\src\main\java>javac-classpath C:\spark-1.4.0\lib\classes -d C:\spark-1.4.0\lib\classesorg\apache\spark\launcher\Main.java

C:\spark-1.4.0\src\repl\scala-2.10\src\main\scala>scalac-cp c:\spark-1.4.0\lib\classes -d c:\spark-1.4.0\lib\classesorg\apache\spark\repl\SparkILoopInit.scala


0 0
原创粉丝点击