一、实验环境
- 虚拟机操作系统:
- Ubuntu 18.04.6
- 虚拟机硬件配置:
- CPU:4
- 内存:4GB
- 磁盘:50GB
- 虚拟机主机名/IP:
- huyu/192.168.253.312
二、Spark配置环境截图
1. Spark若干关键配置文件的截图(Java, Scala, Python)
-
Java成功安装的截图如下:
-
SDKMAN成功安装的截图如下:
-
Scala成功安装的截图如下:
-
Python成功安装的截图如下:
2. Spark成功启动的截图(./spark-shell)
三、GMM执行结果截图
1. 任务提交以后,Spark执行过程的截图
2. 任务完成后,打印结果的截图
四、拓展实验:Scala GMM
1. 打印预测的结果
2. 查看模型相关参数
五、拓展实验:Spark独立部署模式(Standalone)
-
如下图所示,在Master虚拟机上执行jps命令可以看到Jps、Master、Worker三个进程,在Slave虚拟机上可以看到Jps、Worker两个进程,说明Spark集群启动成功。
-
执行结果如下图所示。
六、思考(注:画图说明,并分析原因)
Spark Local模式和Standalone模式执行同一任务时间比较(画图或列表)
模式 节点个数 开始时间 结束时间 执行时间/S 同一任务花费/S
Local 1 03:39:48 03:39:58 10 0.7928
Standalone 2 07:13:19 07:13:34 15 1.5729
理想情况下N台机器的执行时间为单机的1/N倍。对照自己的实验结果,并分析原因。
答:从理论上来讲,N台机器的执行时间为单机的1/N倍,但是从上述的实验结果中来看,Standalone模式下的执行时间反而更长一点。究其原因,是因为Standalone模式在Task调度方面通常比Local模式低效——因为Local模式下所有程序都运行在一个进程里面,因此大部分只涉及到了进程内通信,而Standalone模式下的通信需要借助网络。而且,就本次实验所使用的例子而言,T ask执行时间非常短,因此把Task调度引起的额外开销放大了。从上述分析来看,Standalone模式主要是针对无法在单机处理的大数据来设计的,而简单的程序很可能单机下反而更快。