Spark全栈:工具集概览

来自CloudWiki
Cloud17讨论 | 贡献2022年7月10日 (日) 09:58的版本
跳转至: 导航搜索

敏捷开发工具栈的要求

对于数据科学技术栈来说,为了实现敏捷性,有那些必需的要求?

一个要求是栈的每一层都要水平可伸缩。往集群中再加一台机器比升级昂贵的专有硬件要好得多。如果要重写预测模型的实现才能重新部署,这就不敏捷了。这就是为什么我们要使用Spark MLlib而不是那些专门为单机设计的工具。

另一个要求是在栈的各层之间上下传递数据必须要能一行代码解决。在今天的配置密集型环境中,这是一个比较高的要求,但是我们可以通过精心挑选工具来满足。

工具集

Python3

由于Spark 2.1.0无法与Python 3.6兼容,所以我们在本书中使用了Python 3.5。本书原版出版后不久Spark 2.1.1就发布了,后续版本已经兼容于Python 3.6。

Anaconda与Miniconda

在本书中,我们使用Anaconda Python 3.5,因为Anaconda已成为数据科学领域领先的Python发行版。Anaconda是Continuum Analytics出品的Python发行版,包含超过400个流行的数据科学库。

尽管我推荐在你们自己的电脑上使用功能齐全的Anaconda,在Vagrant和EC2映像中我使用的是Anaconda的小弟弟Miniconda。这是因为Anaconda太大了,下载会花很长时间(20~30分钟)。而下载Miniconda只要几分钟。Miniconda和Anaconda很像,只是少装了一些包。

Jupyter笔记本

在第7章和第9章中我们会利用IPython/Jupyter笔记本交互式地使用Python,进行数据可视化、训练预测模型并改进。

使用JSON行和Parquet序列化事件

在我们的工具栈中,我们使用的一种序列化系统为JSON行(http://jsonlines.org/) (见图2-10)。你可能听到这种格式被称为换行符分隔的JSON格式,即NDJSON (http://ndjson.org/),不过确切来说JSON行格式不支持空行,而NDJSON支持。JSON使我们可以用一种通用格式通过各种语言和工具访问数据。

Python中的JSON

json模块在Python 2.7和3.x的标准库中(http://bit.ly/1upkGOV)不需要额外安装。要读取和写入JSON行文件,我们只需要短短几行代码。参见ch02/test_json.py

我们后面还会用到这些帮助函数,你可以在utils.py(https://github. com/rjurney/Agile_Data_Code_2/blob/master/lib/util.py)中找到它们以及其他一些全书都会用到的工具函数。就是这样!在Python中使用JSON行几乎不费吹灰之力。

收集数据

除了用于实时作业,Kafka(见图2-11)也成为了进行数据混洗的一种不错的选择。

使用Spark进行数据处理

Spark是领先的分布式通用数据处理平台。Spark把数据处理切分为小任务交给一群廉价的PC,每个任务在单台机器的磁盘和内存上执行。

Spark的任务是协调这些机器为一个整体的计算平台。Spark是一个分布式的平台,这对于支持任意规模的数据至关重要,而且Spark在这一方面做得非常好。它既可以在一台机器上以“本地模式”运行得很好,也可以在数千台机器组成的集群上运行得不错。

Spark也是优秀的黏合剂,它提供了包括Kafka和MongoDB等很多系统的连接器,可以把各种系统整合到一起。

Spark基于HDFS或S3运行,提供了Spark SQL、Spark MLlib和Spark Streaming等组件。

Python2022071001.png