使用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项目的常用管理工具。

  1. 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

  1. 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中用到的依赖,这样我们就可以在开发环境进行一些测试。

  1. 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数据

这些程序都可以在官方网站查看得到。

时间: 2024-10-14 05:08:41

使用scala开发spark入门总结的相关文章

搭建scala 开发spark程序环境及实例演示

上一篇博文已经介绍了搭建scala的开发环境,现在进入正题.如何开发我们的第一个spark程序. 下载spark安装包,下载地址http://spark.apache.org/downloads.html(因为开发环境需要引用spark的jar包) 我下载的是spark-2.1.0-bin-hadoop2.6.tgz,因为我的scalaIDE版本是scala-SDK-4.5.0-vfinal-2.11-win32.win32.x86_64.zip 最好,IDE版本和spark版本要匹配,否则,开

Spark&Hive:如何使用scala开发spark作业,并访问hive。

背景: 接到任务,需要在一个一天数据量在460亿条记录的hive表中,筛选出某些host为特定的值时才解析该条记录的http_content中的经纬度: 解析规则譬如: 需要解析host: api.map.baidu.com 需要解析的规则:"result":{"location":{"lng":120.25088311933617,"lat":30.310684375444877}, "confidence&quo

底层战详解使用Java开发Spark程序(DT大数据梦工厂)

Scala开发Spark很多,为什么还要用Java开发原因:1.一般Spark作为数据处理引擎,一般会跟IT其它系统配合,现在业界里面处于霸主地位的是Java,有利于团队的组建,易于移交:2.Scala学习角度讲,比Java难.找Scala的高手比Java难,项目的维护和二次开发比较困难:3.很多人员有Java的基础,确保对Scala不是很熟悉的人可以编写课程中的案例预测:2016年Spark取代Map Reduce,拯救HadoopHadoop+Spark = A winning combat

Spark 入门(Python、Scala 版)

本文中,我们将首先讨论如何在本地机器上利用Spark进行简单分析.然后,将在入门级水平探索Spark,了解Spark是什么以及它如何工作(希望可以激发更多探索).最后两节将开始通过命令行与Spark进行交互,然后演示如何用Python写Spark应用,并作为Spark作业提交到集群上.同时也会提供相应的 Scala 版本. 1.设置Spark环境 在本机设置和运行Spark非常简单.你只需要下载一个预构建的包,只要你安装了Java 6+和Python 2.6+,就可以在Windows.Mac O

Spark入门三部曲之第二步Spark开发环境搭建

使用Scala+IntelliJ IDEA+Sbt搭建开发环境 提示 搭建开发环境常遇到的问题: 1.网络问题,导致sbt插件下载失败,解决方法,找到一个好的网络环境, 或者预先从我提供的网盘中下载jar(链接:http://pan.baidu.com/s/1qWFSTze 密码:lszc) 将下载的.ivy2压缩文件,解压后,放到你的用户目录下. 2.版本匹配问题,版本不匹配会遇到各种问题,解决方法,按照如下版本搭建, scala(2.10.3),sbt(0.13),sbt-assembly(

IntelliJ IDEA开发Spark的Maven项目Scala语言

1.Maven管理项目在JavaEE普遍使用,开发Spark项目也不例外,而Scala语言开发Spark项目的首选.因此需要构建Maven-Scala项目来开发Spark项目,本文采用的工具是IntelliJ IDEA 2016,IDEA工具越来越被大家认可,开发java, python ,scala 支持都非常好,安装直接下一步即可. 2.安装scala插件,File->Settings->Editor->Plugins,搜索scala即可安装. 3.创建Maven工程,File-&g

Scala开发入门教程

Scala 语言和其它语言比如Java相比,算是一个比较复杂的语言,它是一个面向对象和面向函数的统一体,使用起来非常灵活,因此也不容易掌握,前面的58篇文章 仅仅是Scala的一个入门教程,有了这些基础知识,你就可以开始编写Scala应用,学习一种语言最好的方法是通过实践来学习.为方便起见,下面列出这 些文章,后面我们就分专题进一步介绍Scala编程. Scala开发教程(1): 开始神奇的Scala编程之旅 Scala开发教程(2): 起步Scala Scala开发教程(3): 进一步Scal

Spark入门实战系列--8.Spark MLlib(上)--机器学习及SparkMLlib简介

[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.机器学习概念 1.1 机器学习的定义 在维基百科上对机器学习提出以下几种定义: l“机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能”. l“机器学习是对能通过经验自动改进的计算机算法的研究”. l“机器学习是用数据或以往的经验,以此优化计算机程序的性能标准.” 一种经常引用的英文定义是:A computer program is said

Spark入门(Python)

Hadoop是对大数据集进行分布式计算的标准工具,这也是为什么当你穿过机场时能看到”大数据(Big Data)”广告的原因.它已经成为大数据的操作系统,提供了包括工具和技巧在内的丰富生态系统,允许使用相对便宜的商业硬件集群进行超级计算机级别的计算.2003和2004年,两个来自Google的观点使Hadoop成为可能:一个分布式存储框架(Google文件系统),在Hadoop中被实现为HDFS:一个分布式计算框架(MapReduce). 这两个观点成为过去十年规模分析(scaling analy