使用scala开发spark入门总结
使用scala开发spark入门总结
一、spark简单介绍
关于spark的介绍网上有很多,可以自行百度和google,这里只做简单介绍。推荐简单介绍连接:http://blog.jobbole.com/89446/
1、 spark是什么?
Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架。一般配合hadoop使用,可以增强hadoop的计算性能。
2、 Spark的优点有哪些?
Spark拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。
值得注意的是:spark是通过scala这一编程语言开发的。虽然spark的开发语言支持java和python,但是编写spark程序最好还是使用scala编写,一是代码简洁,二是函数式的易读性比较好,最重要的是scala能够帮助我们更好的理解spark的工作过程。
二、Scala和sbt简单介绍
Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala 运行在Java虚拟机上,并兼容现有的Java程序。Scala 源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库。
Scala推荐学习网站:http://www.runoob.com/scala/scala-tutorial.html 如果喜欢看视频教程的话推荐慕课网的scala教程:http://www.imooc.com/learn/613
类似于开发Java程序使用maven管理项目,scala项目的管理工具是sbt。Sbt是Simple Build Tool的缩写,它是对scala或Java语言进行编译的一个工具,它需要JDK1.6或更高的版本支持。
三、安装scala和sbt
具体的安装网上有很多教程,都介绍的很清楚。下面是一些推荐的连接。
Scala官网链接:http://www.scala-lang.org/
Scala安装链接:http://www.runoob.com/scala/scala-install.html (与jdk的安装大同小异)
Sbt安装链接:http://www.importnew.com/4311.html 详细介绍了sbt的优点,项目目录结构,如何常见一个sbt工程等。
值得注意的是:
l sbt安装并不困难,但是安装完成之后再命令窗口第一次运行sbt命令的时候,sbt会默认下载需要用到的包,这个过程非常消耗时间,需要耐心等待,如果遇到一些包很大,很长时间都没有下载完成的话,可以手动下载这个包,并把包放到命令行显示的路径下面。
l sbt的本地仓库尽量修改,默认目录在C盘。
四、使用开发工具
Scala的IDE一般有两个:Scala IDE for Eclipse 和 IntelliJ Idea,对于习惯使用eclipse的用户可以使用scala ide for eclipse,下载链接:http://scala-ide.org/。两个IDE都比较好用。个人感觉,idea对于插件的安装以及win环境下命令窗口的支持要比eclipse好用一点,更推荐使用idea开发。
使用sbt:
真正写起程序和项目来,肯定要使用项目管理工具的。Sbt是编写scala项目的常用管理工具。
- Sbt项目构建
Sbt目前使用的人还不是很多,不能要求像maven那样方便。Sbt项目的结构目录为:
src目录详解
Maven用户对src目录的结构应该不会感到陌生,下面简单介绍各个子目录的作用。
- · src/main/java目录存放Java源代码文件
- · src/main/resources目录存放相应的资源文件
- · src/main/scala目录存放Scala源代码文件
- · src/test/java目录存放Java语言书写的测试代码文件
- · src/test/resources目录存放测试起见使用到的资源文件
- · src/test/scala目录存放scala语言书写的测试代码文件
build.sbt详解
读者可以简单的将build.sbt文件理解为Maven项目的pom.xml文件,它是build定义文件。 SBT运行使用两种形式的build定义文件,一种就是放在项目的根目录下,即build.sbt, 是一种简化形式的build定义; 另一种放在project目录下,采用纯Scala语言编写,形式更加复杂,当然,也更完备,更有表现力。
具体的使用可以参照网上的介绍
推荐链接:http://www.th7.cn/Program/java/201309/149445.shtml
- sbt项目生成
上面介绍的这些目录可以自己创建,然后导入到IDE中。生产相应IDE的工具有:
Sbt Eclipse 插件:
推荐链接:http://www.cnblogs.com/rxingyue/p/4398591.html
有2种配置方式:一种是在 ~/.sbt/0.13/plugins//build.sbt 里配置addPlugin,这种做法是全局的插件,即对本机所有sbt项目均使用。另一种是每个项目不一样的plugins,则是在每个项目跟目录下project/plugins.sbt里进行插件配置。 plugins.sbt里面内容配置,添加插件:addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.4.0")
在根目录的build.sbt里添加EclipseKeys.createSrc := EclipseCreateSrc.Default + EclipseCreateSrc.Resource,再执行sbt eclipse。
这样就可以生成eclipse项目了,直接导入项目就可以使用了。
Sbt Idea 插件:
在项目目录下的project/plugins.sbt中添加插件
addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.6.0")
在命令行输入sbt ,会自动安装插件。
安装完插件之后,在命令行(项目根目录)输入sbt gen-idea可以帮我们生成IntelliJ Idea的相关文件。
以上两个插件还有一个重要作用就是可以帮我们导入build.sbt中用到的依赖,这样我们就可以在开发环境进行一些测试。
- sbt项目打包
使用assembly插件。参照博客:http://www.cnblogs.com/rxingyue/p/4398591.html
Assembly是作为一种插件的,所以要在project下面的plugins.sbt里面配置。
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2")
除了插件的配置之外,还需要配置跟目录下build.sbt,支持assembly,在文件头部加入:
import AssemblyKeys._
assemblySettings
五、一些坑及解决办法
1、 Sbt下载依赖慢
这是很正常的问题,毕竟默认的远程仓库都在国外。可以选择更改库,可以全局更改,也可以针对项目进行更改,在build.sbt里面配置内容:
resolvers ++= Seq(
// HTTPS is unavailable for Maven Central
"Maven Repository" at "http://repo2.maven.apache.org/maven2",
"Apache Repository" at "https://repository.apache.org/content/repositories/releases",
"MQTT Repository" at "https://repo.eclipse.org/content/repositories/paho-releases/",
"Cloudera Repository" at "http://repository.cloudera.com/artifactory/cloudera-repos/",
Resolver.mavenLocal
)
另外的办法:对于一些比较大的包,可以手动下载然后放到相应的目录。(一般把下载的地址给迅雷,下载会快很多,这种办法只针对个别情况)
2、 依赖的版本问题
互相依赖的包之间,可能出现版本的冲突,最好保持版本一致。
形如
libraryDependencies ++= Seq(
"org.json4s" %% "json4s-native" % "3.2.10",
"org.json4s" %% "json4s-jackson" % "3.2.10"
)
中间两个百分号的依赖是不指定版本的,版本有scala的版本确定。
形如
libraryDependencies += "org.apache.kafka" % "kafka_2.10" % "0.10.0.0"
中间有一个百分号的依赖是指定版本的。
3、 Sbt找不到依赖
找不到依赖,可以在引用的依赖后面写一下依赖的地址。例如:
libraryDependencies += "net.sf.json-lib" % "json-lib" % "2.4" from "http://repo1.maven.org/maven2/net/sf/json-lib/json-lib/2.4/json-lib-2.4-jdk15.jar"
六、Spark经典入门示例
1、 WordCount
2、 SparkStreaming读取kafka数据
这些程序都可以在官方网站查看得到。
使用scala开发spark入门总结的更多相关文章
- Spark&Hive:如何使用scala开发spark访问hive作业,如何使用yarn resourcemanager。
背景: 接到任务,需要在一个一天数据量在460亿条记录的hive表中,筛选出某些host为特定的值时才解析该条记录的http_content中的经纬度: 解析规则譬如: 需要解析host: api.m ...
- Spark集群 + Akka + Kafka + Scala 开发(3) : 开发一个Akka + Spark的应用
前言 在Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境中,我们已经部署好了一个Spark的开发环境. 在Spark集群 + Akka + Kafka + S ...
- Spark集群 + Akka + Kafka + Scala 开发(2) : 开发一个Spark应用
前言 在Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境,我们已经部署好了一个Spark的开发环境. 本文的目标是写一个Spark应用,并可以在集群中测试. ...
- Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境
目标 配置一个spark standalone集群 + akka + kafka + scala的开发环境. 创建一个基于spark的scala工程,并在spark standalone的集群环境中运 ...
- 利用Scala语言开发Spark应用程序
Spark内核是由Scala语言开发的,因此使用Scala语言开发Spark应用程序是自然而然的事情.如果你对Scala语言还不太熟悉,可 以阅读网络教程A Scala Tutorial for Ja ...
- Spark集群 + Akka + Kafka + Scala 开发(4) : 开发一个Kafka + Spark的应用
前言 在Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境中,我们已经部署好了一个Spark的开发环境. 在Spark集群 + Akka + Kafka + S ...
- 机器学习的Spark与Scala开发简介
一.机器学习常用开发软件:Spark.Scala 1. Spark简介: MLlib包含的库文件有: 分类 降维 回归 聚类 推荐系统 自然语言处理 在线学习 统计学习方法:偏向理论性,数理统计的方 ...
- 通过IDEA搭建scala开发环境开发spark应用程序
一.idea社区版安装scala插件 因为idea默认不支持scala开发环境,所以当需要使用idea搭建scala开发环境时,首先需要安装scala插件,具体安装办法如下. 1.打开idea,点击c ...
- IDEA搭建scala开发环境开发spark应用程序
通过IDEA搭建scala开发环境开发spark应用程序 一.idea社区版安装scala插件 因为idea默认不支持scala开发环境,所以当需要使用idea搭建scala开发环境时,首先需要安 ...
随机推荐
- IOS开发之--UIScrollView pagingEnabled自定义翻页宽度
用到UIScrollview的翻页效果时,有时需要显示一部分左右的内容,但是UIScrollView的PagingEnabled只能翻过整页,下面几个简单的设置即可实现 技术点: 1. 创建一个继承U ...
- 关于QFTP乱码
// 从FTP接收的内容QString FtpUtil::_FromSpecialEncoding(const QString &InputStr){ #ifdef Q_OS_WIN retu ...
- js,addEventListener参数传递
解决方法 因为i相对匿名函数是外面的变量,就把循环绑定的时候,将i的值传入到匿名函数内,就可以了.因此需要在匿名函数(事件函数)外包裹一个匿名函数, 并立即执行. var elems = docume ...
- Eclipse下的Maven
本文转载自:http://www.cnblogs.com/zlslch/p/5882567.html 当我们无法从本地仓库找到需要的构件的时候,就会从远程仓库下载构件至本地仓库.一般地,对于每个人来说 ...
- 短链(ShortURL)的Java实现
什么叫短链或短址? 就是把长的 URL 转成短的 URL, 现在提供这种服务的有很多公司,我们以google家的 URL shortener 服务: http://goo.gl/ 为例. 任何长网址都 ...
- CodeSmith模板
重复性的工作交给代码生成器就好,这里分享几套模板, 1.从数据库抓取字段,生成Table元素,这个在web开发中很有用 <%-- Name: Author: Description: --%&g ...
- 开发安卓应用之中兴手机与macbook pro 连接设定
目标: 把中兴手机和macbook pro 连接在一起,实现真机调试安卓应用. 工具: 手机型号:zte v956 mac os: OS X 10 Eclipse: Android Developer ...
- 在PHP中调用接口
引用:http://zhidao.baidu.com/question/454935450.html&__bd_tkn__=67bd5d3a742a8b244e09a86fb8b824aa95 ...
- Oracle的exp/imp详解
原文地址:Oracle的exp/imp详解 作者:jxlazzw 备份概述 逻辑备份:备份可分为两类 ,物理备份和逻辑备份 物理备份:该方法实现数据库的完整恢复,但需要极大的外部存储设备,例如磁带库, ...
- Druid 基础使用-操作篇(Imply )
一.Imply Druid 原生的配置较麻烦,在上一篇单机版安装中有所涉及 Imply 基于Druid 进行了一些组件的开发,提供开源社区版本和商业版,简化了部署,开发了一些应用.https:// ...