工做以及兴趣所致,开始了spark学习之旅,浏览网上大牛们的博客 文章,而且结合官网docs,刚开始云里雾里,如今也能雾里看到点花了。 html
学习spark,首先咱们知道spark是由scala语言编写而成,至于为什么,总结说来仍是语言的缘由,语言的优点,那么scala就脱颖而出了, 光就我目前所了解所接触,确实不少源码中用scala实现是何等的简洁,反观java,有点点的辛酸。 java
那么要不就先学习scala吧,之后还要靠着这语言来深刻理解spark来 阅读spark源码呢。 git
(1) 开发工具? github
(2) 项目构件工具? apache
(3) 打包部署? windows
开发工具,首先就想到的是 eclipse-scala ide插件,毕竟跟eclipse那么多年的感受了,eclipse每天见。 服务器
项目构件工具,本来也是安装m2eclipse-scala插件,使用最熟悉的maven的,可是一来该插件更新地址目前好像很差使了,并且广大博友也都认为仍是 原生的sbt比较好,那么仍是花点时间来了解下SBT(Simple Build Tool)吧。 网络
SBT是scala语言项目的构建工具,就至关于maven是java项目工程的构建工具。SBT自己也很强大,二者的操做,构建流程都比较相似,因此使用maven的那种思想,去类比sbt便可。可是有一点须要弄清楚,由于目前好像eclipse中并无sbt的工具插件,不像eclipse中有m2e,能够集成maven工具插件,因此在使用的过程当中 sbt的构建过程并非经过eclipse来完成,而是使用sbt和eclipse相互配合完成。这也是在使用过程当中有点不方便的地方。 eclipse
要使用sbt,先安装吧,本章就讲在windows下的安装方法吧 http://www.scala-sbt.org/download.html 下载msi安装包。本文安装使用0.13.9版本。 maven
安装后的目录很是 简洁: /bin /conf 配置好系统环境变量PATH,添加bin目录所在。这样咱们就能够在任意位置执行sbt.bat脚本了。
打开cmd命令窗口,输入sbt 命令。 sbt首次运行的时候须要下载一些依赖包,说到下载依赖包,这里再次插入一个话题拿就是当网络环境中有代理服务器的时候。因为在公司环境下有代理服务器的问题,因此在执行sbt以前必定主要要配置好代理服务器的地址信息。 我就简单粗暴的再环境变量里面分别配置了
http_proxy=http://ip:port
https_proxy=https://ip:port
两个环境变量,这样就能顺利下载依赖包了。
依赖包下载完成以后,就会顺利的进入到了stb的交互式操做控制台。
咱们知道常见maven项目后,在项目目录下会有pom.xml文件,会有相应的.project, .classpath文件,这都是maven工程所特有的工程目录结构,
一样的基于sbt构建的scala项目工程也须要有相应的工程目录结构,咱们想要生成这样的目录结构须要一个 sbt-eclipse插件。 https://github.com/typesafehub/sbteclipse ,
那么如今的问题就是如何将这个插件添加到sbt中去:在安装sbt后,会在操做系统的用户目录下面生成一个目录文件
在上图目录中,建立一个文件夹命名为plugins,在该文件夹中建立一个文本文件,命名为build.sbt
该配置文件就是相对于sbt的一个全局配置。
咱们在该文件中添加,sbteclipse插件。
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.4.0")
在cmd命令行,从新执行sbt命令,sbt会下载sbt-eclipse插件了。
安装完成sbt-eclipse插件之后,那么使用sbt就能够建立 eclipse下的基于sbt构建的项目工程结构了。
在eclipse的工程目录 workspace下新建一个文件夹,文件夹命名为scala-sbt-test。
在cmd命令窗口中定位到scala-sbt-test目录下,执行sbt命令,进入sbt控制台。sbt提供了eclipse命令,来生成基于sbt构建的eclipse工程结构。
生成好了 eclipse下基于sbt构建的工程目录结构,那么接下来就是将项目导入到eclipse
目前为止,基于sbt构建的eclipse工程已经搭建完成。
maven项目的构建须要pom.xml,一样的sbt项目的构建须要build.sbt配置文件,
第三方包的依赖,仓库都配置,sbt相关的配置项都在build.sbt中配置添加。(具体该配置文件中配置什么,怎么配置,本文就详述了,具体可看sbt官网描述。)
注意:每次当build.sbt中相关配置变化后,须要生效的话,都须要执行 sbt eclipse命令来更新应用。
最后说一下 打包实现。
maven中打包须要assembly插件,一样的sbt中也提供了assembly插件。
在全局build.sbt配置文件中,添加assembly插件
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2")
在项目工程下的build.sbt配置文件中,添加对 assembly插件的引用
import AssemblyKeys._
assemblySettings
打包执行:
sbt assembly
命令。
最后把全局build.sbt内容以及项目下build.sbt文件内容分别展现下
全局build.sbt
resolvers += Resolver.url("artifactory", url("http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases"))(Resolver.ivyStylePatterns) resolvers += "Typesafe Repository" at "http://repo.typesafe.com/typesafe/releases/" addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.4.0") addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2")
import AssemblyKeys._ assemblySettings name := "spark-scala-wordcount-network" version := "1.0" scalaVersion := "2.11.7" EclipseKeys.createSrc := EclipseCreateSrc.Default + EclipseCreateSrc.Resource libraryDependencies ++= Seq( "org.apache.spark" % "spark-core_2.10" % "1.3.0" % "provided", "org.apache.spark" % "spark-streaming_2.10" % "1.3.0" % "provided", "log4j" % "log4j" % "1.2.16" ) resolvers ++= Seq( // HTTPS is unavailable for Maven Central "Maven Repository" at "http://repo.maven.apache.org/maven2", "Apache Repository" at "https://repository.apache.org/content/repositories/releases", "JBoss Repository" at "https://repository.jboss.org/nexus/content/repositories/releases/", "MQTT Repository" at "https://repo.eclipse.org/content/repositories/paho-releases/", "Cloudera Repository" at "http://repository.cloudera.com/artifactory/cloudera-repos/", "nexus" at "http://172.16.25.142/nexus/content/repositories/releases/", "nexus snapshot" at "http://172.16.25.142/nexus/content/repositories/snapshots/", Resolver.mavenLocal )总结:花了点时间总算理清楚了 eclipse sbt scala之间的因果关系