Scala2.11.8 + Sbt + Maven + IntelliJ Idea + Spark2.0开发环境搭建备忘

已有Hadoop yarn 和 Spark 集群部署、运行在分布式环境中,程序开发编码在PC上,因为逐渐增多Scala编写spark2.0程序,入乡随俗使用sbt和IntelliJ Idea,顺便对PC上的Scala + sbt + maven + IntelliJ Idea一些要注意的开发环境配置细节进行记录,侧重于如今网上比较少总结又可能让人有些困扰的部分,目前这方面总结比较完整的文章好像还比较少(也多是本身看的不够多),有些内容也是google国外和本身摸索的,在此进行记录,一方面方便跟可能有一样需求的程序猿们讨论交流,一方面给作个备忘记录。java

 

总体上主要是如下几个步骤。linux

1. Java JDK 安装与配置web

2. Scala2.11.8 安装与配置sql

3. maven 安装与配置设置文件apache

4. sbt 安装与配置sbt-lauch.jar包网络

5. 集成开发环境IDE IntelliJ Idea 安装与配置插件maven

6. 经过sbt依赖建立 Spark2.0 项目编辑器

 

1. Java JDK 安装与配置分布式

官网下载对应操做系统的安装包,作好环境变量配置,命令行java 相关命令成功执行,网上不少参考文档,很少叙述。ide

 

2. Scala 安装与配置

官网下载对应操做系统的安装包,作好环境变量配置,命令行scala相关命令成功执行,网上不少参考文档,很少叙述。

 

 

3. maven 安装与配置设置文件

maven或sbt等开发管理软件的使用,在开发中可以较为系统的生成开发目录结构,管理依赖关系,帮开发人员节省时间,提升效率,固然具体使用与否仍是看我的实际开发状况选择,没有maven或sbt等管理软件也能够照样开发。

官网下载对应操做系统的安装包,解压到本身设定的目录,成功执行mvn相关命令。

(1)因为国内链接默认maven仓库,网络情况和速度是个老大难问题,能够在maven目录下conf/settings.xml文件配置修改<mirrors></mirrors>部分,查找并增长国内外的当时仍有效的快速maven仓库镜像,好比阿里云的maven仓库镜像。先备份原有settings.xml文件,再以下修改当前settings.xml。

<mirror> 

    <id>nexus-aliyun</id>

    <name>Nexus aliyun</name>

    <url>http://maven.aliyun.com/nexus/content/groups/public</url> 

    <mirrorOf>central</mirrorOf> 

</mirror>

(2)本地下载保存依赖的目录路径,默认是.m2下面(Linux用户家目录里面,Windows C盘用户目录里面),能够改成其余指定目录,修改conf/settings.xml文件,<localRepository>修改成指定路径</localRepository>,以防在用户目录下被误删或受到其余影响。

(3)这时候没有安装IDE,能够经过mvn命令生成maven项目,修改pom.xml,管理项目依赖包,进行代码编写,编辑器自选。

 

4. sbt 安装与配置sbt-lauch.jar包

为了进行scala+spark的开发,入乡随俗使用sbt,官网下载对应操做系统的安装包,解压或安装到本身设定的目录,成功执行sbt相关命令。

(1)一样的,sbt国内链接默认仓库,网速老大难,下载过程极其缓慢,测速可低至0-2KB/S,典型小水管,还有可能中途链接被断开,因此一样须要作更改仓库镜像的尝试。

修改的方法有几种不一样的方式,考虑到最终调用的是sbt路径下的bin/sbt-launch.jar,这里采用了直接修改sbt-launch.jar的方式。

先复制备份原有sbt-launch.jar文件,再打开当前修改编辑的sbt-launch.jar中的sbt/sbt.boot.properties,这里修改了[repositories]的local部分, maven-central没有改,添加了几个网上找的镜像源,都加上去了,也不必定是最快的,速度目前在我的可接受范围内。

  aliyun-nexus: http://maven.aliyun.com/nexus/content/groups/public/  
  ibiblio-maven: http://maven.ibiblio.org/maven2/
  typesafe-ivy: https://dl.bintray.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
  uk-repository: http://uk.maven.org/maven2/
  jboss-repository: http://repository.jboss.org/nexus/content/groups/public/

(2)sbt使用了ivy,默认将依赖包保存在家目录或C盘用户目录.ivy下面,若是以为默认路径不合适,能够把sbt.boot.properties文件的[boot]和[ivy]目录修改成指定目录,好比ivy-home是cache依赖包路径,打比方能够改成/home/user/.../ivy-home/  或者  F:\...\ivy-home\,而后指定路径下生成的cache目录将具体存储sbt项目依赖包。 

(3)使用sbt命令生成项目模板,能够编写build.sbt,进行依赖管理。

 

5. 集成开发环境IDE IntelliJ Idea 安装与配置插件

上面的开发环境配置完成,已能够进行项目开发,我的以为没有结合IDE使用来的方便,scala、java开发IDE选择见仁见智,IntelliJ Idea比较适合本人口味。

官网下载对应操做系统的安装包,对比免费和付费版本功能,免费的community版通常够用了,解压或安装到指定路径。

(1)打开IntelliJ Idea,在弹出的启动界面中,先进行默认的项目配置(注意是default project配置,之后每一个生成的当前项目current project都会先采用该默认配置),包括插件安装、参数配置等。打开可见目前安装的版本属于2016.2,截图界面中,选择configure中的settings。

(2) 左侧选择plugins,默认已自带maven插件,在browse repositories输入scala,查找并下载安装scala插件,一样完成sbt插件安装。IDE下载这些插件的做用一般是用于链接IDE和对应的软件,好比上面已装好的scala,sbt,maven,经过插件方便在IDE调用已装软件的命令和功能,有效地进行开发。

(3)插件安装完成后,点击左侧Build, Execution, Deployment,在Build Tools里面分别maven和sbt插件进行设置,确保插件调用的不是idea默认下载的maven和sbt软件,而是上述本身手动安装的比较新的maven和sbt。

maven的设置,首先看到界面右上角,确认是有一行小字“For default project”,代表是作默认项目配置,若是项目生成后,一样此处的配置界面,将是"For current project",表示只为当前项目作独立设置。而后对界面上maven home目录进行选择,选取上面本身下载的maven目录;设置文件选择maven下的conf/settings.xml,override打勾替换默认的文件;local 仓库位置选择前面设置好的maven本地仓库路径。

因为maven下载默认仓库依赖时,会下载一个模板文件archetype-catalog.xml,网速慢状况下过于耗时,可能致使下载界面卡住停滞,能够在界面的maven-->runner中设置运行参数,在VM Options写上参数:-DarchetypeCatalog=internal,表示用本地的archetype-catalog.xml,跳过自动网络下载卡住的步骤,而后手动http链接web网页,在maven镜像或中央仓库经过下载路径 org\apache\maven\archetype\archetype-catalog\相应版本号\,下载archetype-catalog.xml,放置在本地maven仓库路径的 org\apache\maven\archetype\archetype-catalog\相应版本号\  的对应目录位置里面。这样maven插件基本设置完了。

相似的,点击sbt插件,在设置界面将sbt软件由idea打包的bundled选项改成custom,选择上面安装sbt软件的已经修改好的bin/sbt-launch.jar。

接下来还须要在设置界面左侧other settings--->SBT中,去掉Use IDE Settings选项,配置使用本身安装的sbt包和参数,包括下方的SBT laucher JAR file,须要明确地选择本身的sbt软件包,sbt插件才能在idea中按照指望正确地工做。

这个时候回到原来启动界面,选择建立生成新项目,maven或sbt项目,或者直接的java、scala项目,一般已经能够正常工做了,过程不作叙述,网上有不少参考。

 

6. 经过sbt依赖建立Spark2.0项目

首先在建立的sbt项目中,修改build.sbt,下载spark2.0依赖包,scala编写spark程序,生成jar包放到spark2.0研发的分布式集群运行测试

(1) 在建立新项目界面中,选择scala--->sbt,在生成的界面中设置项目名称和保存位置,程序根目录。

(2)选择finish,sbt插件将自动调用上述本地安装sbt软件,下载默认依赖包,生成sbt项目结构目录,这里第一次建立须要耐心等待一段时间,等待项目依赖包都下好,sbt代码木结构才能生成。

(3)在生成的sbt项目中,编辑build.sbt,在scalaVersion后面添加spark依赖,注意格式要求,每行之间还要空一行。spark依赖有两种编写方式。

一种是不明确指定spark库的版本,在依赖包的组织部分 "org.apache.spark" 后面加两个%号,让sbt本身去仓库源里面根据scala版本匹配,例如


libraryDependencies += "org.apache.spark" %% "spark-core" % "2.0.0" 。


另外一种是明确指明spark库版本,依赖包组织部分 "org.apache.spark" 后面只加一个%号,例如

 

libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.0.0"

libraryDependencies += "org.apache.spark" % "spark-mllib_2.11" % "2.0.0"

libraryDependencies += "org.apache.spark" % "spark-streaming_2.11" % "2.0.0"

libraryDependencies += "org.apache.spark" % "spark-sql_2.11" % "2.0.0"

libraryDependencies += "org.apache.spark" % "spark-graphx_2.11" % "2.0.0"

编写好build.sbt,保存刷新,将下载spark依赖,正常状况下等待下载完,依赖添加成功,能够经过spark API编写程序。

 

可是有时候因为与源仓库的网速太慢等缘由,依赖库的下载未必顺利,致使build.sbt文件老是显示unresolved dependencies,就是指下载库没有下载完整,或配置文件没有记录完整, 好比网络慢致使spark的某些包没下下来,也没什么好办法,只能在idea sbt插件窗口继续刷新下载,若是刷新后sbt下载不正常工做,能够将sbt配置的本地下载库路径cache里相关依赖包目录删除,好比org.apache.spark,而后将本地下载库路径下面与cache目录平行的几个生成配置文件删除(作了测试,有时候spark依赖包已所有下载完成,但不知什么缘由,这几个配置文件可能没有相应更新,致使idea中sbt插件仍然显示unresolved dependencies,删除配置文件后再刷新sbt,再也不显示错误,添加成功),从新刷新和下载,正常状况下能够完成依赖,build.sbt文件不会报错unresolved dependencies。

 

若是更换了硬盘或重装了系统,原来Idea仍可以使用,若是build.sbt添加库之后依赖解析报错,相似invalid ivy2 cache找不到,能够在Idea的Build下SBT配置 JVM Options,原来的VM Parameters为-XX:MaxPermSize=384M,继续添加-Dsbt.ivy.home=.../ivy-home,-Dsbt.boot.directory=.../sbt-dir/boot,指明cache库所在路径,该路径应与使用的sbt插件中相关路径一致。

 

(4)接下来能够写个简单的hello spark程序,import spark的一些基础包,试试是否能够正常经过sbt编译和打包,放到集群运行。因为程序很简单,只是打印了sparkcontext的类名,setMaster使用local参数,表示让Spark运行在单机单线程上而不用链接到spark集群,能够直接在idea里面run一下直接查看结果。若是有条件,spark程序开发,建议打包在研发测试集群上运行,分布式程序编写环境和运行环境尽可能分开,若是有问题,在运行集群里面去查看日志,对比程序,查找定位问题,不用什么都在IDE里完成,我的认为IDE做用是有利于方便编写代码这个步骤。在研发集群多方面测试经过,再部署到生产环境集群当中。

相关文章
相关标签/搜索