Spark初探
摘要
鉴于标题不知道起什么比较好,因此就叫做“Spark初探”。在这篇博客当中,主要介绍什么是Spark,Spark的安装以及管理界面,Spark的应用场景。后续会有关于Python Spark的应用等以及在工作中使用到Spark场景,希望这篇博客能起到抛砖引玉的作用,欢迎各路神仙指导。
Spark
Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎。Spark拥有Hadoop的MapReduce的优点,但不同的是,Spark使用内存运算技术,能在资料尚未写入磁盘,Job中间输出结果可以保存在内存中,从而不需要读写HDFS,因此Spark能够更好地使用与数据挖掘与机器学习等需要MapReduce的算法。
Docker+Spark
平常在工作中已经使用了Docker了,然后突发奇想,能不能在Docker安装Spark,安装一个简单的集群。下图是运行的Spark容器,其中包括一个master节点以及同一个work节点。
访问50070端口:
访问7080端口(即spark的8080端口)
在此顺便汇总一下Spark的几个重要的端口:
50070:HDFSwebUI的端口号
8485:Journalnode默认的端口号
9000:非高可用访问数rpc端口
8020:高可用访问数据rpc
8088:yarn的webUI的端口号
8080:master的webUI,Tomcat的端口号
7077:spark基于standalone的提交任务的端口号
8081:worker的webUI的端口号
18080:historyServer的webUI的端口号
4040:application的webUI的端口号
2181:zookeeper的rpc端口号
9083:hive的metastore的端口号
60010:Hbase的webUI的端口号
6379:Redis的端口号
8080:sparkwebUI的端口号
在此通过docker-compose
命令去编排Spark集群,关于docker-compose
用法可以参考我的另一篇博客:Docker Compose用法。
创建docker-compose.yml
文件,编辑内容如下:
version: "3"
services:
master:
image: singularities/spark
command: start-spark master
hostname: master
ports:
- "6066:6066"
- "7070:7070"
- "8080:8080"
- "50070:50070"
worker:
image: singularities/spark
command: start-spark worker master
environment:
SPARK_WORKER_CORES: 1
SPARK_WORKER_MEMORY: 2g
links:
- master
完成之后可以在docker-compose.yml
当前文件夹下执行:
docker-compose up -d
最后成功安装spark。
应用场景
- Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数较多,所需读取的数据量越大,收益越大;数据量小但是计算密集度较大的场合,收益相对较小。
- 由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。就是对于那种增量修改的应用模型不适合。
- 数据量不是特别大,但是要求实时统计分析需求。
满足以上条件的均可采用Spark技术进行处理,在实际应用中,目前大数据在互联网公司主要应用在广告、报表、推荐系统等业务上,在广告业务方面需要大数据做应用分析、效果分析、定向优化等,在推荐系统方面则需要大数据优化相关排名、个性化推荐以及热点点击分析等。另外在知乎上搜到一个关于Spark不适用的应用场景的问题:有哪些不适合Spark的应用场景
总结
目前对于Spark还是一头雾水,可能因为在工作当中没有遇到具体的能够应用spark的场景。另一方面,要学好spark,还是要从GFS,BigTable以及MapReduce谷歌三大论文入手,然后了解关系型数据库等。在此感觉与目前工作中使用到的深度学习做计算机视觉任务并没有太大的联系,后续慢慢做大数据云计算的知识积累吧。