版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37050372/article/details/82499290
我们先从单机运行spark开始,将spark解压之后我们先修改配置文件。
spark-env.sh
export JAVA_HOME=/root/app/jdk1.8.0_171
export SPARK_MASTER_HOST=marshal
slaves
localhost
进入sbin,分别启动Master和Worker
start-master.sh
start-slaves.sh
单机方式启动spark shell
bin/spark-shell --master spark://marshal:7077
启动之后我们尝试的写一个wordcount
我们先写
sc
sc是什么呢?就是spark context,spark的上下文,spark就是用它来创建rdd
sc.textFile()
什么是textFile?就是告诉他从哪里读取数据,然后把任务提交到集群中,他就开始从这里面读数据开始计算。
他不但可以从hdfs读数据,还可以从本地读数据。
虽然这里写WordCount的算子和我们之前用scala写的单机版的wordcount很相似,但是两者不同,现在我们用的底层已经不是scala的方法了,而是spark的方法。
sc.textFile("/root/word.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect
虽然这些算子和scala的的方法相似,但是,这些算子将来会被提交到集群中进行分布式并行计算。
我们还可以在此基础上进行排序,现在我们排序的话,如果像要升序的话为true,如果想要降序就为false。不必像之前一样使用reverse了。
sc.textFile("/root/word.txt").
flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).sortBy(_._2,false).collect
这里写语句的时候我们要注意我们的rdd是lazy的,必须要激励一下才能执行,这里collect就是一种激励,他的意思是,架构结果收集起来在sparkshell中展示。
那如果我们想将结果保存在文件中也可以:
sc.textFile("/root/word.txt").flatMap(_.split(" ")).map((_,1))
.reduceByKey(_+_).sortBy(_._2,false).saveAsFile("/root/outword)