实验内容
本博客为云计算课程的一个实验记录。
本实验的主要内容包括以下两项:
1、学习在linux上安装和配置Scala和Spark
2、学习使用spark和scala编写WordCount和PageRank程序
实验环境
scala2.10.7,spark1.6
实验过程
1、安装和配置Scala和Spark
这个比较简单,不多赘述了。不过要注意Scala和Spark的兼容问题,在编程过程中出现过版本不兼容导致编译失败的问题。
2、WordCount
理解wordcount的流程【精选】hadoop 之 wordCount流程详解_hadoop wordcount详解_普通网友的博客-CSDN博客(1)新建文件
(2)编写WordCount程序
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object WordCount {
def main(args: Array[String]) {
//创建SparkConf
val conf: SparkConf = new SparkConf()
//创建SparkContext
val sc: SparkContext = new SparkContext(conf)
//从文件中读取数据
val lines: RDD[String] = sc.textFile(args(0))
//按空格切分单词
val words: RDD[String] = lines.flatMap(_.split(" "))
//单词计数,单词每出现一次就计数为1
val wordAndOne: RDD[(String, Int)] = words.map((_, 1))
//聚合,统计每个单词出现的次数
val result: RDD[(String, Int)] = wordAndOne.reduceByKey(_+_)
//排序,按照单词出现的次数排序
val finalResult: RDD[(String, Int)] = result.sortBy(_._2, false)
//将统计结构保存到文件
finalResult.saveAsTextFile(args(1))
//释放资源
sc.stop()
}
}
(3)编译
此处$SPARK_HOME已经在~/.bash_profile中配置,如下:
(4)打包成jar包
echo Main-class: WordCount > manifest.txt
jar cvfm WordCount.jar manifest.txt *
(5)提交运行
输入文件为word.txt,输出文件为result.txt,注意这里的result.txt是个目录(命名的时候,不是很懂)
(6)查看输出
3、PageRank
PageRank原理:PageRank的原理和实现_pagerank算法原理_路__的博客-CSDN博客
(1)创建文件
(2)编写代码
import org.apache.spark.{SparkConf, SparkContext}
object PageRank {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("pagerank").setMaster("local")
val sc = new SparkContext(conf)
val links = sc.parallelize(List(
("A",List("B", "C")),
("B",List("A","C")),
("C",List("A","B","C")),
("D",List("C"))
)).persist()
var ranks = links.mapValues(v => 1.0)
val output = "hdfs://Namenode:9000//output"
for (i <- 0 until 10) {
val contributions = links.join(ranks).flatMap {
case (pageId, (tolinks, rank)) =>
tolinks.map(tolink => (tolink, rank / tolinks.size))
}
ranks = contributions.reduceByKey((x,y) => x + y).mapValues(v => 0.15 + 0.85*v)
}
ranks.saveAsTextFile(output)
}
}
(3)编译、打包成jar包、提交运行、查看输出
与上述wordCount的类似,不再赘述