问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何使用intellij搭建spark开发环境

发布网友 发布时间:2022-04-14 05:11

我来回答

2个回答

懂视网 时间:2022-04-14 09:32

IDEA 全称IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、 创新的GUI设计等方面的功能都非常棒,而且IDEA是目前Scala支持最

IDEA 全称IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、 创新的GUI设计等方面的功能都非常棒,而且IDEA是目前Scala支持最好的IDE。IDEA分ultimate和free edition版,ultimate提供了J2EE等很多非常强力的功能,free edition我觉得已经对于我这样的初学者已经够用了。前面写过一篇配置IntelliJ IDEA 13的SBT和Scala开发环境,本文在这个基础上使用IDEA进行Spark应用的配置和开发。

1. IDEA环境配置

(1). 首先在IntellJ/bin/idea64.exe.vmoptions(对应64位大内存系统),加大IDEA的启动内存:

-Xms512m
-Xmx1024m
-XX:MaxPermSize=512m

(2). 在IDEA中,Project相当于eclipse中的workspace,同一IDEA窗口只能打开一个workspace。而IDEA中的module等同于eclipse中的project,所以通过File – New Module来为当前Project创建一个module。
1
(3). IDEA会生成大量的缓存文件,来于保存配置信息、插件和项目索引文件等。,一般都会有代码的十倍大小左右大小。在Windows下目录为C:UsersTHINKP.IntelliJIdea13,使用File – Invalidate Caches可以校验索引的有效性并在需要的时候重建。IDEA会经常读写这些缓存文件,所以使用SSD来存储缓存文件会提高不少性能。下面是修改缓存文件路径的方法:
a). 关闭IDEA
b). 将cache目录复制到对应的目录下面。
c). 打开IntelliJ IDEA 13.1.3inidea.properties文件,例如将IDEA转移到目录D:Program Files.IntelliJIdea13中,只需要修改
idea.config.path=D:/Program Files/.IntelliJIdea13/config
idea.system.path=D:/Program Files/.IntelliJIdea13/system
(4). 主题和颜色
Settings – IDE Settings – Appearance – Theme:Darcula
然后把下面override font选项勾上,选择Yahei 14号字体。
然后重启IDEA,界面变成了灰黑色风格,瞬间顺眼了很多!
2
编辑器可以设置单独的主题,当前面设置了全局主题时,编辑器的主题也会被修改。接下来,编辑器界面字体有点小,可以在Editor – Colors&Fonts – Fonts另存为一个新的主题,并在这个新主题中修改配置。我的屏幕分辨率有点大,所以设置了15号字体。
3
光标所在行背景颜色
Editor – Colors&Fonts – General – Caret row,选择了蓝色背景,这样就有了较大的色差。
4
(5). 常用快捷键
界面中的Alt+1 project窗口
Alt+7 代码结构图
Alt+2 Favorite
F11打书签,再按一次取消。此时Favorite - Bookmark里就有这一项。
TODO list Alt+6
注释中以TODO开头时,该TODO项就可以在TODO标签页中找到。这样在有一些思路但是来不及做时,可以以TODO的形式写注释
5
同步项目(Detect all externally changed files and reload them from disk)Ctrl+Y
保存(Save all) Ctrl+S
undo Ctrl+Z
redo Ctrl+Shift+Y
剪切 Ctrl+X
复制 Ctrl+C
粘贴 Ctrl+V
查找 Ctrl+F
替换 Ctrl+R
光标的上一个位置(undo navigation) Ctrl+Alt+<-
光标的下一个位置(redo navigation) Ctrl+Alt+->
make Ctrl+F9
(6). 项目文件设定
行分割模式: File - Separators 选择Windows风格(/r/n), UNIX的风格(/n)或者mac风格(/r)等等。
将文件锁定编辑 - File - Make file read only
文件编码设置 Project Settings - File Encodings
推荐YouMeek IDEA教程,我认为是目前详细的IDEA教程之一。
http://www.youmeek.com/category/software-system/my-intellij-idea/

2. 使用IDEA开发Spark程序并运行

首先编辑build.sbt文件,每个配置项都要有一个空格来分割。

build.sbt
name := "sbtTest"
version := "1.0"
scalaVersion := "2.10.4"
libraryDependencies += "org.apache.spark" %% "spark-core_2.10" % "1.0.2"
libraryDependencies += "org.apache.spark" % "spark-bagel_2.10" % "1.0.2"
libraryDependencies += "org.apache.spark" % "spark-mllib_2.10" % "1.0.2"
libraryDependencies += "org.apache.spark" % "spark-graphx_2.10" % "1.0.2"
libraryDependencies += "org.apache.spark" % "spark-streaming_2.10" % "1.0.2"

打开SBT,可以观察到SBT正在downloading dependencies。

...
[info] downloading http://repo1.maven.org/maven2/org/apache/spark/spark-bagel_2.10/1.0.2/spark-bagel_2.10-1.0.2.jar ...
[info] 	[SUCCESSFUL ] org.apache.spark#spark-bagel_2.10;1.0.2!spark-bagel_2.10.jar (5672ms)
[info] downloading http://repo1.maven.org/maven2/org/apache/spark/spark-mllib_2.10/1.0.2/spark-mllib_2.10-1.0.2.jar ...
[info] 	[SUCCESSFUL ] org.apache.spark#spark-mllib_2.10;1.0.2!spark-mllib_2.10.jar (7351ms)
[info] downloading http://repo1.maven.org/maven2/org/apache/spark/spark-graphx_2.10/1.0.2/spark-graphx_2.10-1.0.2.jar ...
[info] 	[SUCCESSFUL ] org.apache.spark#spark-graphx_2.10;1.0.2!spark-graphx_2.10.jar (6349ms)
...
...

编写代码,这段代码用于处理web前端日志,其中第二列是session的ID,输出Session访问次数的排名。

/**
 * Created by Debugo on 2014/8/25.
 */
import org.apache.spark.{SparkContext, SparkConf}
import org.apache.spark.SparkContext._
object LogAnalyzer {
 def main(args:Array[String]): Unit ={
 if(args.length!=2) {
 System.err.println("Usage: LogAnalyzer ")
 System.exit(1)
 }
 val conf = new SparkConf().setAppName("LogAnalyzer")
 val sc = new SparkContext(conf)
 // args(0)=file:///root/access_log/access_log.20080601.decode.filter
 // args(1)=file:///root/access_log/result
 sc.textFile(args(0)).map(_.split("	| ")).filter(_.length==6).
 map(x=>(x(1),1)).reduceByKey(_+_).map(x=>(x._2,x._1)).
 sortByKey(false).map(x=>(x._2,x._1)).saveAsTextFile(args(1))
 sc.stop()
 }
}

在sbt命令行中中compile&package

> compile
[info] Compiling 1 Scala source to C:UsersAdministratorIdeaProjectsSpark0	argetscala-2.10classes...
[success] Total time: 5 s, completed 2014-8-25 16:05:20
> package
[info] Packaging C:UsersAdministratorIdeaProjectsSpark0	argetscala-2.10spark0_2.10-1.0.jar ...
[info] Done packaging.
[success] Total time: 0 s, completed 2014-8-25 16:17:12

将jar上传到配置spark运行库的节点,提交job,spark会创建结果输出的result目录。最终RDD被分割成了5个分区。

spark-submit --master spark://debugo:7077 --class LogAnalyzer --executor-memory=10g /root/spark0_2.10-1.0.jar file:///root/access_log/access_log.20080601.decode.filter file:///root/access_log/result
...
$ ll /root/access_log/result
total 10840
-rw-r--r-- 1 root root 2708325 Aug 25 15:58 part-00000
-rw-r--r-- 1 root root 1114214 Aug 25 15:58 part-00001
-rw-r--r-- 1 root root 2239113 Aug 25 15:58 part-00002
-rw-r--r-- 1 root root 0 Aug 25 15:58 part-00003
-rw-r--r-- 1 root root 5028580 Aug 25 15:58 part-00004
-rw-r--r-- 1 root root 0 Aug 25 15:58 _SUCCESS
$ more part-00000
(11579135515147154,431)
(6383499980790535,385)
(7822241147182134,370)
(900755558064074,335)
(12385969593715146,226)
...

得到了我们想要的按session ID的排名结果。
^^

参考:

Spark Programming Guide
mmicky Spark大数据快速计算平台

热心网友 时间:2022-04-14 06:40

  注意,客户端和虚拟集群中hadoop、spark、scala的安装目录是一致的,这样开发的spark应用程序的时候不需要打包spark开发包和scala的库文件,减少不必要的网络IO和磁盘IO。当然也可以不一样,不过在使用部署工具spark-submit的时候需要参数指明classpath。
  1:IDEA的安装
  官网jetbrains.com下载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,同时需要修改默认字体,不然菜单中的中文字体不能正常显示。
  

  
  2:建立Spark应用程序
  下面讲述如何建立一个Spark项目week2(,正在录制视频),该项目包含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 -> Meles -> week2,给week2创建源代码目录和资源目录,注意用上面的按钮标注新增加的目录的用途。
  

  增加开发包: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):
  

  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
  }.rece(_ + _)
  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)).receByKey(_ + _).take(10).foreach(println)
  sc.stop()
  }
  }
  复制代码

  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 conf = new SparkConf().setAppName("WordCount2")
  val sc = new SparkContext(conf)
  sc.textFile(args(0)).flatMap(_.split(" ")).map(x => (x, 1)).receByKey(_ + _).map(x=>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1)).take(10).foreach(println)
  sc.stop()
  }
  }
  复制代码

  C:生成程序包
  生成程序包之前要先建立一个artifacts,File -> Project Structure -> Artifacts -> + -> Jars -> From moudles with dependencies,然后随便选一个class作为主class。
  

  按OK后,对artifacts进行配置,修改Name为week2,删除Output Layout中week2.jar中的几个依赖包,只剩week2项目本身。
  

  按OK后, Build -> Build Artifacts -> week2 -> rebuild进行打包,经过编译后,程序包放置在out/artifacts/week2目录下,文件名为week2.jar。

  3:Spark应用程序部署
  将生成的程序包week2.jar复制到spark安装目录下,切换到用户hadoop,然后切换到/app/hadoop/spark100目录,进行程序包的部署。具体的部署参见应用程序部署工具spark-submit 。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
会声会影如何裁剪视频画面范围 怎么正确喝酒的方法 真正好的饮用方式 日本清酒獭祭正确喝法 深圳有几家酒店可以真正意义上说是五星级? 深圳富苑皇冠假日套房式酒店酒店周边 深圳富苑皇冠假日套房酒店酒店简介 深圳富苑皇冠假日套房式酒店酒店介绍 金福人生多倍保重疾险怎么样?值不值得买? wpsword文档怎么删除空白页面 wPS删除空白页方法wps怎么删除多余空白页最有效方法 猴牌大红袍是正岩茶吗? 发现土豆上长了几十个冒尖的小芽,这样的土豆可以吃吗? 负离子空气健康仪对血液系统有哪些生理作用? 负离子空气健康仪对呼吸系统有哪些生理作用? 负离子空气健康仪如何消除体内毒物? 负离子保健仪、负离子健康仪、负离子治疗仪有什么区别,对于治疗糖尿病哪个好? 什么是负离子治疗仪 空气负离子有什么功能啊 什么样的负离子产品好?求推荐 安平全一快递电话是多少 衡水安平县的邮政EMS电话号码是什么 负离子康健仪是什么? 河北衡水安平县 韵达快递可以到吗? 空气负离子可以加速细胞修复和再生吗,效果怎么样啊 安平角丘有申通快递吗 原生态负离子康疗椅会杀死身体里的细胞组织吗? 211159903635这个单号是衡水安平那个快递公司的号码 负离子仪器什么牌子好 安平县汇通快递在哪?谁能告诉我? 阿拉善盟各种事业单位或公务员考试信息在哪个网站上可以看到? 有没有奶茶店黑色吧台的设计图 刀剪摆放的风水禁忌,刀剪有哪些摆放风水禁忌 家里菜刀多了是不是不好 菜刀户型风水有哪些禁忌 买菜刀有什么忌讳 我是开封人,老人说菜刀放在盆子里不好,有什么忌讳吗? 为什么纯水牛奶会比纯牛奶甜?而且纯水牛奶都是“部分脱脂灭菌乳”,而不是“灭菌乳”? 请问资产费用率是什么?怎么计算? 水牛奶比普通牛奶更营养吗? 请问信用社的资产利润率和资产费用率如何测算? 什么是农村信用社的总资产???什么是农村信用社的资产??? 财务费用率是什么意思,合理范围是什么? 什么是三项费用率?公式是什么? 财务部每年都该订些什么目标 吉林银行相关数据 管理费用与资产总额的比值含义 求: 09年施工企业财务工作计划书 范文 你认为哪些地方是度蜜月的好去处? 度蜜月有什么好的地方 灵动7自动上水仪怎么接线?