Spark全栈:敏捷数据科学之数据处理

来自CloudWiki
跳转至: 导航搜索

我们软件栈的组成部分如下:

● 事件(event)就是日志所代表的东西。我们把发生的记录了特征和时间戳的一次经历称为一个事件。

事件以多种形式出现,比如服务器端的日志、传感器、财务方面的一笔交易,还有用户在应用程序中的行为。为了便于在各种工具和编程语言之间进行数据交换,我们要把事件序列化为约定的通用格式。
在本书中,我们使用JSON行文件(JSON Line)(http://jsonlines.org/)序列化数据
当我们需要考虑性能的时候,我们使用列式存储格式Apache Parquet(https://parquet.apache.org/)。从Parquet文件中读取几行记录要比从压缩的JSON文件中读取快得多。

● 收集器(collector)是用来聚合事件的。它从一个或者多个数据源中收集事件,聚合后记录到批量存储中或者写入实时处理队列等待操作。Kafka是现在主流的使用批量存储的事件聚合解决方案。

● 批量存储(bulk storage)是一种能为许多并发进程并行访问的场景提供高I/O支持的文件系统(想象有很多磁盘或者SSD)。我们将使用S3来替代Hadoop分布式文件系统(HDFS)。HDFS是批量存储的标杆,没有HDFS就没有大数据。对于我们在敏捷数据科学中处理数据所需的高I/O吞吐量和庞大的数据量,用HDFS太贵了。

● 分布式文档存储(distributed document store)是使用文档格式的多节点存储。在敏捷数据科学中,我们用它来发布数据给网络应用和其他服务使用。我们将使用MongoDB作为我们的分布式文档存储系统。许多人不考虑MongoDB,因为他们用了MongoDB的很多功能之后发现它和其他数据库一样有伸缩性方面的问题。

不过,仅仅作为文档存储使用时(读取文档,而不做聚合或者其他种类的查询), MongoDB的伸缩性不输于其他系统。我们避免使用其他那些功能就行了。

● 轻量级的网站应用服务器(application server)让我们以最小的开销,通过可视化客户端获取JSON格式的数据。我们使用Python/Flask,这样读者不用多学一门编程语言。我们还可以用Python的sklearn和xgboost来部署我们的机器学习服务。轻量级的网站开发框架还有Ruby/Sinatra和Node.js等。

● 现在基于浏览器(browser)的应用和手机应用可以让我们把数据以交互式的形式展现给用户,而用户又通过交互和交互所产生的事件为我们提供了数据。在本书中,我们只讨论网络应用程序。