构建一个Spark project(Spark 开发入门)

一、写在前面

由于Spark 的速度,API 的易用性,Spark在行业中的使用越来越广泛。
Hbase 在2.0 alpha 版之后也加入对Spark的支持;
ElasticSearch也找加入对Spark的支持;
Spark天然的分布式内存计算的优势基本上能向程序猿们完全隐藏分布式编程技术的细节。对于大数据量的计算 约等于 写SQL。未来Spark 将更会流行。那么如何构建Spark开发环境呢?

二、开发套件

  1. IDE: IntelJ IDEA
  2. 依赖管理:SBT
  3. 版本控制:Git
  4. 操作系统:Mac/Linux/windows

因为大量的测试工具需要上传Jar到集群环境,shell的支持是必须的。
首选类Unix系统,windows 也可,最好能选用win10(支持Shell的版本)

三、环境搭建

应按照下来步骤按照
1.JDK 1.8
2.Scala 2.11 以上版本
3.SBT: 0.13 以上(推荐0.13.8)
4.Git
5.IntelJ IDEA

tips:

  1. 在 Mac/linux 下可通过 homebrew 命令按照 git 和sbt。在windows 下载 msi 文件默认安装。最好不要改变安装路径,否则会造成git 命令无法识别
  2. 高级玩家强烈推荐命令行。oh my zsh 这一类的工具,简直不能再强大。

四、创建工程

目前SBT并未集成打包工具,需在全局的SBT依赖路径中配置打包工具的依赖包。
在~/.sbt/0.13/plugins 下的build.sbt 文件中增加:

resolvers += "Sonatype snapshots" at "https://oss.sonatype.org/content/repositories/snapshots/"

addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.7.0-SNAPSHOT")

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2")

完成上述工作之后,
1.创建一个测试的SBT 工程。特别注意SBT版本(0.13.8),JDK 1.8 , scala 2.11.x

  1. 配置build.sbt 依赖
    依赖库一般在http://mvnrepository.com 中搜索,如果无法满足,可在GitHub上找开源代码。
    注意选择SBT的依赖路径,同时注意依赖的版本
    如果发生冲突,需解决冲突。刷新依赖,即可编写代码。
    一个可用的build.sbt 配置如下:
// 以下要求sbt 版本必须是0.13,否则无法找到依赖包
import _root_.sbtassembly.Plugin.AssemblyKeys
import sbt._
import Keys._
import sbtassembly.Plugin._
import AssemblyKeys._

assemblySettings
name := "SparkAppExamples"
version := "0.1"
scalaVersion := "2.11.8"

// Resolvers
resolvers += "SnowPlow Repo" at "http://maven.snplow.com/releases/"
resolvers += "Twitter Maven Repo" at "http://maven.twttr.com/"

libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-core" % "2.0.0" % "provided",
  "org.apache.spark" %% "spark-sql" % "2.0.0" % "provided",
  "org.apache.spark" %% "spark-hive" % "2.0.0" % "provided",
  "org.apache.spark" %% "spark-streaming" % "2.0.0" % "provided",
  "org.apache.spark" %% "spark-graphx" % "2.0.0" % "provided",
  "org.apache.spark" %% "spark-mllib" % "2.0.0" % "provided",
  "com.snowplowanalytics"  %% "scala-maxmind-iplookups"  % "0.2.0"
)

// 冲突处理
mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) => {
  case "META-INF/MANIFEST.MF" => MergeStrategy.discard
  case "META-INF/io.netty.versions.properties" => MergeStrategy.last
  case PathList(ps@_*) if ps.last endsWith "eclipse.inf" => MergeStrategy.last
  case PathList(ps@_*) if ps.last endsWith "pom.xml" => MergeStrategy.last
  case PathList(ps@_*) if ps.last endsWith "pom.properties" => MergeStrategy.last
  case PathList("com", "sun", xs@_*) => MergeStrategy.last
  case PathList("javax", xs@_*) => MergeStrategy.last
  case PathList("org", "apache", xs@_*) => MergeStrategy.last
  case PathList("org", "aopalliance", xs@_*) => MergeStrategy.last
  case PathList("org", "w3c", xs@_*) => MergeStrategy.last
  case "overview.html" => MergeStrategy.last
  case x => old(x)
}
}

五、提高效率

  1. 使用Shell
  • 版本控制使用Shell
  • 版本控制命令编辑成 alias
  • 文件上传脚本化
  • 测试执行脚本化
# git 命令别名
alias gl="git pull"
alias gh="git push"
alias gc="git commit -m"
alias ga="git add ."

#免密上传jar包, 需研究ssh-gen-key 或spwan命令
scp /../xx.jar  10.120.1.1:/home/spark/hhl/lib/

#spark submit 脚本化
#!/bin/sh
CLASS="要运行对应的路径"
/opt/spark-2.1.1-bin-spark-2.1.1-hadoop2.6.4/bin/spark-submit \
# 运行参数配置,核数,内存
--master yarn \
--queue xx  \
--deploy-mode cluster \
--num-executors 12 \
--executor-cores 5 \
--executor-memory 30G \
--conf spark.driver.maxResultSize=2G \
--conf spark.driver.memory=30G \
# 优化选项 GC策略
--conf spark.executor.extraJavaOptions=-XX:+UseParallelGC \
--conf spark.executor.extraJavaOptions=-XX:ParallelGCThreads=8 \
--conf spark.driver.extraJavaOptions="-XX:+UseParNewGC -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSInitiatingOccupancyOnly" \
--class $CLASS \
--files hdfs://namenodeha/user/processuser/hive-site.xml \ #需要上传的配置文件
/home/spark/hhl/lib/  #jar 包位置
  1. 充分利用Github 上的源码,不要自己造轮子
  2. 保护好颈椎,身体是革命的本钱!!!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容