闲扯
好久没写博客了,大概有半年了,最近半年发生了不少事情,自己毕业两年了,本想跳槽离开的,但是貌似习惯了现在公司的工作习惯,其实是工资涨得还算满意,所以就留下了(说得好没追求啊~)。前段时间我们team的负责人跳槽走了,所有很多技术都需要自己钻研,其实也是一个蛋疼但是提高挺快的过程,最近利用工作之余的时间一直在研究spark,在公司申请了4台机器用CDH搭建了一个集群,包括了Spark,版本貌似是1.3.0。接下去就说说我spark的学习介绍吧~
开发工具的选择
之前的开发一直是基于eclipse的,所以刚开始学习spark是用的eclipse,首先安装的是scala的插件,学习了一段时间scala,后来发现intellij比较适合写scala代码,就换了该IDE,这里就不说此IDE有多好用了,反正喜欢他的界面风格,很帅气。
scala的构建工具使用的是sbt,其实跟maven和gradle差不多,用用就习惯了。公司的maven仓库特别旧,不包含scala和spark的jar包,所以build.sbt就需要多加些resolvers,如下:
name := "SparkLearning"
version := "1.0"
scalaVersion := "2.10.4"
resolvers += "maven2" at "http://repo1.maven.org/maven2"
resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases"
resolvers += "public-local" at "http://192.168.88.8:8081/nexus/content/groups/public"
resolvers += "oschina" at "http://maven.oschina.net/content/groups/public"
libraryDependencies ++= Seq(
"org.apache.spark" % "spark-core_2.10" % "1.3.0",
"org.apache.spark" % "spark-streaming_2.10" % "1.3.0",
"org.apache.spark" % "spark-mllib_2.10" % "1.3.0"
)
这里包含了spark一些相关的类库,不做介绍了。
word count
大家都知道wordcount是大数据界等同于hello world的代码,所以我们先从word count来说起。
首先直接上代码:
import org.apache.spark.{SparkConf, SparkContext}
object WordCount {
def main(args: Array[String]) {
if (args.length != 3) {
println("参数不对")
println("参数1: 输入文件位置")
println("参数2: 输出文件位置")
println("参数3: spark执行内存大小")
} else {
val conf = new SparkConf()
.setAppName("word count")
.set("spark.executor.memory", args(2))
val sc = new SparkContext(conf)
val lines = sc.textFile(args(0))
val wordCount = lines.flatMap(_.split("\\s+")).map(x => (x, 1)).reduceByKey(_ + _)
wordCount.saveAsTextFile(args(1))
}
}
}
其实会点简单的scala代码就可以写spark程序了,对于该程序我们做些解释:
1. 首先我们的数据应该是一行一行的英文单词,flatMap将每行的内容按照空格切分成单词,得到的数据如:a b c d
2. map(x => (x, 1))将第一步的数据map成a 1, b 1, c 1, d 1这样的格式
3. reduceByKey(_ + _) 根据key进行分组然后讲value进行sum,这样就得到了结果
4. wordCount.saveAsTextFile(args(1)) 是将rdd save到hdfs上,参数是hdfs的路径
代码如何运行
- 可以先用测试数据在spark-shell中执行
- 在集群上提交:
a. sbt clean package 打成jar包并上传到集群的master节点
b. spark-submit –class xxx.xxx.xxx.WordCount xxx.jar 参数1 参数2 参数3
c. spark-submit的参数有很多,大家可以去网上查查
后续
接下去一段时间将会继续更新spark的学习