Spark分布式处理实战
上QQ阅读APP看书,第一时间看更新

【任务实施】

1.使用Spark计算圆周率

Spark安装目录的examples目录下面提供了很多基础案例,SparkPi就是其中一个,它实现了计算圆周率的功能。接下来使用spark-submit命令提交任务并进行圆周率的计算。

spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[2] \
./examples/jars/spark-examples_2.12-3.0.0.jar \
10

主要实现步骤如下。

(1)启动集群环境,运行spark-submit命令,如图1-13所示。

图1-13 运行spark-submit命令

(2)查看运行结果,可以查看圆周率的近似值,如图1-14所示。

图1-14 计算圆周率

2.Spark单词统计任务的提交与运行

下面统计文本文件中单词的数量。文本文件的单词之间使用空格进行分隔。通过向Spark提交任务的方式计算所有文本文件中单词的数量。使用spark-shell命令对文本文件中的单词进行统计,主要使用了RDD的转换算子和行动算子。这里只简单介绍RDD算子的使用方法,在后面的内容中会做详细讲解。主要的实现步骤如下。

(1)创建存放文本文件的目录input。

[hadoop@hadoop1 ~]$ cd /opt/module/spark
[hadoop@hadoop1 spark]$ mkdir input

(2)进入input目录,准备创建wc1.txt和wc2.txt两个文本文件。

[hadoop@hadoop1 spark]$ cd input

(3)创建并编辑wc1.txt文件。

[hadoop@hadoop1 input]$ vi wc1.txt

wc1.txt的文件内容如下。

hello world
hello spark

(4)创建并编辑wc2.txt文件。

[hadoop@hadoop1 input]$ vi wc2.txt

wc2.txt的文件内容如下。

hello scala
hello bigdata

(5)提交任务。

启动Spark Shell。Spark Shell是一个基于Scala的命令的运行环境,在其中可以直接编写Scala代码,如图1-15所示。

[hadoop@hadoop1 input]$ spark-shell

图1-15 启动Spark Shell

使用RDD的转换算子和行动算子实现单词统计功能。提交运行并查看运行结果,结果是以数组的形式进行展示,以二元组的形式输出单词的数量,如图1-16所示。

sc.textFile("/opt/module/spark/input").flatMap(_.split(" ")).map((_,1)).reduceByKey (_+_).collect

图1-16 单词统计结果

在完成主要的操作步骤以后,为方便读者理解单词统计任务,下面对RDD的算子进行简要说明。

textFile:转换算子,参数是文件路径,读取文件夹下面的文本文件并转换为RDD。

flatMap:转换算子,针对RDD中的每一行文本进行扁平化映射操作,将每行文本按照空格进行分隔,转换为单词形式。

map:转换算子,进行映射操作,将单词转换为二元组的形式,如将hello转换为(hello,1)的形式。

reduceByKey:转换算子,以单词作为主键进行聚合操作,简单来说,就是将相同的单词进行数量加和操作,如将(hello,1)和(hello,1)进行聚合操作,转换为(hello,2)。

collect:结果收集,将结果以数组的形式进行展示。