实现 Linux 中 Spark 的安装与应用。
创建文件夹 scala 用于安装 scala,通过 wget 下载 tar 包,然后解包安装 scala。
wget https://downloads.lightbend.com/scala/2.10.7/scala-2.10.7.tgz
tar -zxvf scala-2.10.7.taz
通过修改 .bash_profile 文件来配置 Scala 路径,并使用 source 命令使其生效。
使用 scala -version
命令,若能正常显示,即说明安装配置成功。
类似于 Scala 的下载安装方式,同样使用 wget 下载 tar 包,然后解包,安装 Spark。
因下载时间过长,后面改为导入 tar 包安装。
wget https://archive.apache.org/dist/spark/spark-1.6.1/spark-1.6.1-bin-hadoop2.6.tgz
tar -zvxf spark-1.6.1-bin-hadoop2.6.tgz
通过修改 .bash_profile 文件来配置 Spark 路径,并使用 source 命令使其生效
进入spark 的安装目录,转到 conf 目录中,创建并修改 slaves 文件,默认数据节点改为 DataNode-1
cd conf/
mv slaves.template slaves
vi slaves
mv spark-env.sh.template spark-env.sh
vi spark-env.sh
scp -r /home/spark/spark-1.6.1-bin-hadoop2.6 root@DataNode-1:/home/spark/
scp -r /home/scala/scala-2.10.7 root@DataNode-1:/home/scala/
scp ~/.bash_profile root@DataNode-1:~/.bash_profile
运行 spark 自带的 wordcount 程序进行测试
创建一个 .txt 文件,输入一些字符,传入 HDFS 文件系统作为测试
/home/spark/spark-1.6.1-bin-hadoop2.6/bin/run-exampleorg.apache.spark.examples.JavaWordCount hdfs://NameNode-1:9000/test111.txt
输入pagerank计算程序,如下:
import org.apache.spark.HashPartitioner
val links = sc.parallelize(List(("A",List("B","C")),("B",List("A","C")),("C",List("A","B", "D")),("D",List("C")))).partitionBy(new HashPartitioner(100)).persist()
var ranks=links.mapValues(v=>1.0)
for (i <- 0 until 10) {
val contributions=links.join(ranks).flatMap {
case (pageId,(links,rank)) => links.map(dest=>(dest,rank/links.size))
}
ranks=contributions.reduceByKey((x,y)=>x+y).mapValues(v=>0.15+0.85*v)
}
ranks.sortByKey().collect()
运行程序,查看结果。
即:
(A,0.9850243302878132),
(B,0.9850243302878132),
(C,1.4621033282930214),
(D,0.5678480111313515)
符合预期。
编写一个 .txt 文件作为 WordCount 的输入,传入 hdfs 文件系统中。
同上一步 pagerank 1.1 中,进入 spark-shell 交互式环境。
var input = sc.textFile("/NOTICE.txt")
input.flatMap(x=>x.split(" ")).countByValue()
运行程序,查看结果。
即:world -> 2, a -> 1, java -> 2, b -> 1, python -> 2, c -> 1, hello -> 2, d -> 1
符合预期。