注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

mmicky 的博客

追逐刹那的惊艳

 
 
 

日志

 
 

使用IntelliJ IDEA开发Spark1.0.0应用程序  

2014-05-04 11:30:35|  分类: spark |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
      之所以写本篇是因为后面很多博客需要例程来解析或说明。本篇是Spark1.0.0 开发环境快速搭建中关于客户端IDE部分的内容,将具体描述:
  • 如何安装scala开发插件
  • 如何创建项目和配置项目属性
  • 如何编写源代码
  • 如何将生成的程序包
      至于如何运行程序包,请参见应用程序部署工具spark-submit 。
      注意,客户端和虚拟集群中hadoop、spark、scala的安装目录是一致的,这样开发的spark应用程序的时候不需要打包spark开发包和scala的库文件,减少不必要的网络IO和磁盘IO。当然也可以不一样,不过在使用部署工具spark-submit的时候需要参数指明classpath。

1:IDEA的安装
      官网http://www.jetbrains.com/idea/ 下载IntelliJ IDEA,有Community Editions 和& Ultimate Editions,前者免费,用户可以选择合适的版本使用。
根据安装指导安装IDEA后,需要安装scala插件,有两种途径可以安装scala插件:
  • 启动IDEA -> Welcome to IntelliJ IDEA -> Configure -> Plugins -> Install JetBrains plugin... -> 找到scala后安装。
  • 启动IDEA -> Welcome to IntelliJ IDEA -> Open Project -> File -> Settings -> plugins -> Install JetBrains plugin... -> 找到scala后安装。
如果你想使用那种酷酷的黑底界面,在File -> Settings -> Appearance -> Theme选择Darcula,同时需要修改默认字体,不然菜单中的中文字体不能正常显示。
使用IntelliJ IDEA开发Spark1.0.0应用程序 - mmicky - mmicky 的博客
  
2:建立Spark应用程序
      下面讲述如何建立一个Spark项目week2(使用IntelliJ IDEA开发Spark1.0.0应用程序 - mmicky - mmicky 的博客,正在录制视频),该项目包含3个object:
  • 取自spark examples源码中的SparkPi
  • 计词程序WordCount1
  • 计词排序程序WordCount2
A:建立新项目
  • 创建名为dataguru的project:启动IDEA -> Welcome to IntelliJ IDEA -> Create New Project -> Scala -> Non-SBT -> 创建一个名为week2的project(注意这里选择自己安装的JDK和scala编译器) -> Finish。
  • 设置week2的project structure
    • 增加源码目录:File -> Project Structure -> Medules -> week2,给week2创建源代码目录和资源目录,注意用上面的按钮标注新增加的目录的用途。
使用IntelliJ IDEA开发Spark1.0.0应用程序 - mmicky - mmicky 的博客
    •  增加开发包:File -> Project Structure -> Libraries -> + -> java ->  选择
      • /app/hadoop/spark100/lib/spark-assembly-1.0.0-hadoop2.2.0.jar
      • /app/scala2104/lib/scala-library.jar可能会提示错误,可以根据fix提示进行处理
B:编写代码
      在源代码scala目录下创建1个名为week2的package,并增加3个object(SparkPi、WordCoun1、WordCount2):
使用IntelliJ IDEA开发Spark1.0.0应用程序 - mmicky - mmicky 的博客
  • SparkPi代码

package week2

import scala.math.random
import org.apache.spark._

/** Computes an approximation to pi */
object SparkPi {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("Spark Pi")
val spark = new SparkContext(conf)
val slices = if (args.length > 0) args(0).toInt else 2
val n = 100000 * slices
val count = spark.parallelize(1 to n, slices).map { i =>
val x = random * 2 - 1
val y = random * 2 - 1
if (x*x + y*y < 1) 1 else 0
}.reduce(_ + _)
println("Pi is roughly " + 4.0 * count / n)
spark.stop()
}
}

  • WordCount1代码

package week2

import org.apache.spark.{SparkContext, SparkConf}
import org.apache.spark.SparkContext._

object WordCount1 {
def main(args: Array[String]) {
if (args.length == 0) {
System.err.println("Usage: WordCount1 <file1>")
System.exit(1)
}

val conf = new SparkConf().setAppName("WordCount1")
val sc = new SparkContext(conf)
sc.textFile(args(0)).flatMap(_.split(" ")).map(x => (x, 1)).reduceByKey(_ + _).take(10).foreach(println)
}
}

  • WordCount2代码

package week2

import org.apache.spark.{SparkContext, SparkConf}
import org.apache.spark.SparkContext._

object WordCount2 {
def main(args: Array[String]) {
if (args.length == 0) {
System.err.println("Usage: WordCount2 <file1>")
System.exit(1)
}

val sc = new SparkContext(args(0), "WordCount2", System.getenv("SPARK_HOME"))
sc.textFile(args(0)).flatMap(_.split(" ")).map(x => (x, 1)).reduceByKey(_ + _).map(x=>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1)).take(10).foreach(println)
}
}

C:生成程序包
      生成程序包之前要先建立一个artifacts,File -> Project Structure -> Artifacts  -> + -> Jars -> From moudles with dependencies,然后随便选一个class作为主class。
使用IntelliJ IDEA开发Spark1.0.0应用程序 - mmicky - mmicky 的博客
 按OK后,对artifacts进行配置,修改Name为week2,删除Output Layout中week2.jar中的几个依赖包,只剩week2项目本身。
使用IntelliJ IDEA开发Spark1.0.0应用程序 - mmicky - mmicky 的博客
按OK后, Build -> Build Artifacts -> week2 -> rebuild进行打包,经过编译后,程序包放置在out/artifacts/week2目录下,文件名为week2.jar。

3:Spark应用程序部署
      将生成的程序包week2.jar复制到spark安装目录下,切换到用户hadoop,然后切换到/app/hadoop/spark100目录,进行程序包的部署。具体的部署参见应用程序部署工具spark-submit 。

  评论这张
 
阅读(1291)| 评论(7)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017