基于docker的spark分布式与单线程、多线程wordcount的对比实验
1. 分布式环境搭建
1.1 基于docker的spark配置文件
docker-compose.yml
version: '2'
services:
spark:
image: docker.io/bitnami/spark:3
environment:
- SPARK_MODE=master
- SPARK_RPC_AUTHENTICATION_ENABLED=no
- SPARK_RPC_ENCRYPTION_ENABLED=no
- SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
- SPARK_SSL_ENABLED=no
ports:
- '8080:8080'
spark-worker-1:
image: docker.io/bitnami/spark:3
environment:
- SPARK_MODE=worker
- SPARK_MASTER_URL=spark://spark:7077
- SPARK_WORKER_MEMORY=1G
- SPARK_WORKER_CORES=1
- SPARK_RPC_AUTHENTICATION_ENABLED=no
- SPARK_RPC_ENCRYPTION_ENABLED=no
- SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
- SPARK_SSL_ENABLED=no
spark-worker-2:
image: docker.io/bitnami/spark:3
environment:
- SPARK_MODE=worker
- SPARK_MASTER_URL=spark://spark:7077
- SPARK_WORKER_MEMORY=1G
- SPARK_WORKER_CORES=1
- SPARK_RPC_AUTHENTICATION_ENABLED=no
- SPARK_RPC_ENCRYPTION_ENABLED=no
- SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
- SPARK_SSL_ENABLED=no
1.2 安装集群
在cmd中cd到yml所在的目录,执行
docker-compose up
等待安装完成并且启动完成
可在docker-desktop中查看启动的集群

在浏览器中输入localhost:8080访问master 的web UI:

1.3 数据准备
编写利用python脚本生成1KB、1MB、10MB、100MB的文本
def txtwriter(count, file_name):
for i in range(len(count)):
for j in range(count[i]):
with open(file_name[i], mode='a', encoding='utf-8') as file_obj:
file_obj.write('apple peach pear\n')
print(str(i)+" "+str(j)+ file_name[i])
if __name__ == "__main__":
count = [64, 64*1024, 64*1024*10, 64*1024*100] #1KB 1Mb 10MB 100Mb
file_name = ["1KB", "1Mb", "10MB", "100Mb"]
txtwriter(count, file_name)
1.4 脚本准备
编写wordcount以及计时脚本
from pyspark import SparkConf, SparkContext
import sys
import time
import os
def wordcount(file_path):
counts = sc.textFile(file_path)\
.flatMap(lambda line: line.split(' '))\
.map(lambda x: (x, 1))\
.reduceByKey(lambda a, b: a+b)
output = counts.collect()
for(word, count) in output:
print('%s : %i'%(word, count))
# def txtwriter(count, file_name):
# for i in range(len(count)):
# for j in range(count[i]):
# with open(file_name[i], mode='a', encoding='utf-8') as file_obj:
# file_obj.write('apple peach pear\n')
if __name__ == "__main__":
count = [64, 64*1024, 64*1024*10, 64*1024*100] #1KB 1Mb 10MB 100Mb
file_name = ["1KB", "1Mb", "10MB", "100Mb"]
# txtwriter(count, file_name)
for i in range(len(file_name)):
starttime = time.time()
conf = SparkConf()
sc = SparkContext(conf = conf)
wordcount(file_path=file_name[i])
endtime = time.time()
print('time:', endtime-starttime)
with open("time.txt", mode='a', encoding='utf-8') as file_obj:
file_obj.write(str(endtime-starttime) + '\n')
sc.stop()
# for i in range(file_name):
# os.remove(file_name[i])
1.5 数据上传
将数据上传到集群中
docker cp cluster_test.py 8c089a440dd5:/tmp/test
docker cp txtw.py 8c089a440dd5:/tmp/test
......
2. 单线程wordcount
在master主机中执行
spark-submit --master local[1] cluster_test.py
计算结果
| 数据大小 | 1KB | 1MB | 10MB | 100MB |
|---|---|---|---|---|
| 执行时间 | 6.970337629318237 | 2.368252992630005 | 11.44127345085144 | 102.59012055397034 |
3. 多线程wordcount
在master主机中执行
spark-submit --master local[2] cluster_test.py
计算结果
| 数据大小 | 1KB | 1MB | 10MB | 100MB |
|---|---|---|---|---|
| 执行时间 | 7.166856050491333 | 1.9559352397918701 | 6.257161378860474 | 61.2608277797699 |
4. 分布式wordcount
在master主机中执行
spark-submit --master spark://8c089a440dd5:7077 cluster_test.py
计算结果
| 数据大小 | 1KB | 1MB | 10MB | 100MB |
|---|---|---|---|---|
| 执行时间 | 11.847958087921143 | 9.145256996154785 | 13.520023584365845 | 68.8401427268982 |
5. wordcount结果汇总
| 数据大小 | 1KB | 1MB | 10MB | 100MB |
|---|---|---|---|---|
| 单线程(one worker) | 6.970337629318237 | 2.368252992630005 | 11.44127345085144 | 102.59012055397034 |
| 多线程(two workers) | 7.166856050491333 | 1.9559352397918701 | 6.257161378860474 | 61.2608277797699 |
| 分布式(two workers) | 11.847958087921143 | 9.145256996154785 | 13.520023584365845 | 68.8401427268982 |
由表可以看到,分布式在数据量较小时所花时间最长,推测为系统调度消耗时间较多,但数据量大时,分布式的处理时间是显著减少的。单机处理时,数据量较小的时候消耗时间是小于分布式的,并且多线程处理是显著优于单线程的,单机处理的能力毕竟有限,可以推测分布式机器数量增多时,在处理大量数据时能力是优于单机处理的。
基于docker的spark分布式与单线程、多线程wordcount的对比实验的更多相关文章
- 暑假第二弹:基于docker的hadoop分布式集群系统的搭建和测试
早在四月份的时候,就已经开了这篇文章.当时是参加数据挖掘的比赛,在计科院大佬的建议下用TensorFlow搞深度学习,而且要在自己的hadoop分布式集群系统下搞. 当时可把我们牛逼坏了,在没有基础的 ...
- 基于docker的spark-hadoop分布式集群之二: 环境测试
在上一章<环境搭建>基础上,本章对各个模块做个测试 Mysql 测试 1.Mysql节点准备 为方便测试,在mysql节点中,增加点数据 进入主节点 docker exec -it had ...
- 基于Docker Compose部署分布式MinIO集群
一.概述 Minio 是一个基于Go语言的对象存储服务.它实现了大部分亚马逊S3云存储服务接口,可以看做是是S3的开源版本,非常适合于存储大容量非结构化的数据,例如图片.视频.日志文件.备份数据和容器 ...
- 007.基于Docker的Etcd分布式部署
一 环境准备 1.1 基础环境 ntp配置:略 #建议配置ntp服务,保证时间一致性 etcd版本:v3.3.9 防火墙及SELinux:关闭防火墙和SELinux 名称 地址 主机名 备注 etcd ...
- 基于docker的spark-hadoop分布式集群之一: 环境搭建
一.软件准备 1.基础docker镜像:ubuntu,目前最新的版本是18 2.需准备的环境软件包: (1) spark-2.3.0-bin-hadoop2.7.tgz (2) hadoop-2.7. ...
- 搭建基于docker 的redis分布式集群在docker for windows
https://blog.csdn.net/xielinrui123/article/details/85104446 首先在docker中下载使用 docker pull redis:3.0.7do ...
- 喵星之旅-狂奔的兔子-基于docker的redis分布式集群
一.docker安装(略) 二.下载redis安装包(redis-4.0.8.tar.gz) 以任何方式获取都可以.自行官网下载. 三.拉取centos7的docker镜像 命令:docker pul ...
- Python串行运算、并行运算、多线程、多进程对比实验
转自:http://www.redicecn.com/html/Python/20111223/355.html Python发挥不了多核处理器的性能(据说是受限于GIL,被锁住只能用一个CPU核心, ...
- 分布式任务调度系统xxl-job搭建(基于docker)
一.简介 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源代码并接入多家公司线上产品线,开箱即用. 更多介绍,请访问官网: http://w ...
- 基于Docker搭建分布式消息队列Kafka
本文基于Docker搭建一套单节点的Kafka消息队列,Kafka依赖Zookeeper为其管理集群信息,虽然本例不涉及集群,但是该有的组件都还是会有,典型的kafka分布式架构如下图所示.本例搭建的 ...
随机推荐
- Vue中关于数组与对象修改触发页面更新的机制与原理简析
Vue中关于数组与对象修改触发页面更新的机制与原理简析 相关问题 数组 使用索引直接赋值与直接修改数组length时,不会触发页面更新. 例如: <script> export defau ...
- 前端入门 HTTP协议 HTML简介 head内常见标签 body内常见标签 特殊符号 列表标签 表格标签 表单标签
目录 前端和后端的概念 前端前戏之B/S架构 数据交互的协议 HTTP协议 1.四大特性 1. 基于请求响应 2. 基于TCP.IP作用与应用层之上的协议 3. 无状态 4. 无\短连接 2.数据格式 ...
- python-docx操作word文档详解
案例 官网地址: https://python-docx.readthedocs.io/en/latest/ pip install python-docx from docx import Docu ...
- 图书管理系统、聚合函数、分组查询、F与Q查询
目录 图书管理系统 1.表设计 2.首页搭建.展示 书籍的添加 书籍编辑 书籍删除 聚合函数 Max Min Sum Count Avg 分组查询 按照表分组 按照字段分组 F与Q查询 F查询 Q查询 ...
- adb devices出现offline解决方法
出现offline或者error: more than one device/emulator问题: 解决方法: 输入命令: adb kill-server adb start-server adb ...
- Python实验报告(第10章)
实验10:文件及目录操作 一.实验目的和要求 1.掌握基本文件操作(创建.打开.关闭.写入): 2.掌握目录操作的基本操作(创建.删除.遍历): 3.了解高级文件操作(删除文件.获取文件基本信息). ...
- 分享一个项目中在用的图片处理工具类(图片缩放,旋转,画布格式,字节,image,bitmap转换等)
using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Dra ...
- [深度学习] tf.keras入门1-基本函数介绍
目录 构建一个简单的模型 序贯(Sequential)模型 网络层的构造 模型训练和参数评价 模型训练 模型的训练 tf.data的数据集 模型评估和预测 基本模型的建立 网络层模型 模型子类函数构建 ...
- [编程基础] Python谷歌翻译库googletrans总结
1 使用说明 本文介绍python谷歌翻译库接口googletrans的使用.具体见官方文档: https://py-googletrans.readthedocs.io/en/latest/#goo ...
- Pollard_Rho算法
数论 Pollard_Rho算法 1.1作用 Pollard_Rho算法解决大数的质因数分解.又是一个玄学算法.. 2.1 试除法 我们的任务是对一个数字n进行质因数分解.可以发现,n的因数将会对称的 ...