大数据工程师手册:全面系统的掌握必备知识与工具

作者 | Phoebe Wong

译者 | 陆离

编辑 | Jane

前言

如何才能成为一名真正的“全栈(full-stack)”数据科学家?需要了解哪些知识?掌握哪些技能?

概括来讲,一名全能型选手要把数据科学过程中从数据存储到把预测模型投入正式生产的每一步都能 hold 住。

一般来说,大家在学习过程中更注重机器学习或深度学习技术的理论学习与应用,数据管理方面的知识往往是“事后诸葛亮”;数据科学专业的学生们对如何处理、清洗数据等建模技术关注较多,忽略了如何制作“数据香肠”。

但是在真实工程环境中,有近 80%的工作都在围绕“如何从各种来源获取原始数据”这一步骤,从而为后续搭建模型做准备;此外,企业级的项目通常涉及大量数据,本地计算机并不具备处理这些数据的能力。

因此整个建模过程通常会在云上进行,大多应用和数据库也会托管在其它地方的数据中心服务器上,数据管理则成为数据工程团队非常关心的事情。

NIST大数据分类 (来源:WikiCommons)

由于很多数据科学家对数据存储和基础设施了解甚少,影响了他们在工作中做出正确决策的能力。

而这篇文章就旨在提供一个线路图,从数据库类型、数据存储和处理的位置和方式,到当前的商业选择,给想成为一名数据科学家的开发者们分享必备的数据管理知识。

基于此文涉及面广,系统知识全面,对初级数据科学家、数据科学专业的学生、想转行进入数据科学领域的开发者们都很适合;对从业经验丰富,已深耕此领域的开发者来说,内容偏基础,不过大家可以基于此文进行更深入地研究,欢迎大家互动交流,分享你的观点和意见。

非结构化数据和大数据工具的兴起

IBM 305 RAMAC (来源:WikiCommons)

实际上,数据科学的本质就是数据存储。在进入数字时代之前,数据存储在我们的大脑中、陶片或纸上,这使得数据的收集和分析极其耗时。

1956年,IBM推出了第一台带有磁盘的商用计算机,305 RAMAC。整个单元需要30英尺x 50英尺的物理空间,重量超过一吨,租一个这样的单元,每个月花费 3200 美元,可存储大约5MB的数据。

在随后60年的时间里,DRAM每GB价格从1965年的26.4亿美元大幅下降到2017年的4.9美元。数据存储设备不仅价格极其低廉,而且密度更大、体积更小。

在305 RAMAC的一个磁盘中,每平方英寸存储100 比特的数据,对比之下,今天的一个普通磁盘,每平方英寸存储数据可超过1万亿比特。

数据存储的成本和规模的大幅降低正是现如今让大数据分析成为可能的主要原因。凭借超低的存储成本,建设数据科学基础设施,从海量数据中收集和提取有用的信息,这也成为了企业盈利的途径。

随着不断生产和传输用户数据的物联网(IoT)设备的大量涌现,企业们正在收集越来越多的用户行为数据,并创造大量的高容量、高速度和高多样性的信息资产(或称为“3V大数据”)。

这些行为(如电子邮件、视频、音频、聊天信息、社交媒体帖子)大多产生了非结构化数据,这些数据占当今企业数据总量的近80%,增长速度是在过去十年中结构化数据的两倍。

图中显示了在2017年存储了125 EB的企业数据,80%是非结构化数据 (来源:Credit Suisse)

海量数据的增长极大地改变了数据存储和分析的方式,因为传统的工具和方法不具备处理“3V大数据”的能力。随着新技术的发展,有能力处理不断增长的数据量和数据种类,并且速度更快,成本更低。

这些新的工具还对数据科学家的工作方式产生了深远的影响,使他们能够通过数据分析,以及开发前看起来不可能的应用程序来实现海量数据的变现。下面列举的是我们认为每个数据科学家都应该知道的大数据管理领域的创新方法。

关系数据库和NoSQL

关系数据库管理系统(RDBMS)出现于20世纪70年代,它将数据存储在具有行和列的表里面,使用结构化查询语言(SQL)进行查询和维护数据库。关系数据库基本上就是多个表的集合,每个表中都有一个模式(schema),模式严格定义了所存储数据的属性和类型,以及标识用于访问的特定行或列的键。

RDBMS曾经由Oracle和IBM所统治,但现在,出现了许多开源的数据库系统,如MySQL、SQLite和PostgreSQL等等,也同样很受欢迎。

上图显示了RDBMS的受欢迎度排名 (来源:DB-Engines)

由于一些特性非常受欢迎,关系数据库在商业领域中找到了一席之地,而数据完整性是关系数据库中最重要的特性之一。

RDBMS须满足原子性、一致性、隔离性和持久性(ACID)的要求,它利用一些约束来确保所存储数据是可靠的、准确的,这就使它们成为监测和存储一些诸如帐号、订单和付款等数据信息的理想选择。

但是,这些约束也带来了高昂的代价。由于模式和数据类型的限制,RDBMS在存储非结构化或半结构化数据方面的表现非常糟糕。死板的模式也使得RDBMS在创建、维护和升级等方面的成本变得更高。

建立RDBMS需要用户预先拥有特定的用例,对模式的任何更改通常都是非常困难和耗时的。另外,传统的RDBMS被设计用在一个单机上运行,这意味着它们在处理大量数据时的速度要慢得多。

在保证ACID特性的同时,水平扩展RDBMS(分库分表)也是一项非常具有挑战性的任务。所有的这些属性使得传统关系型数据库管理系统无法处理现如今的大数据。

截止到2000年,一些互联网公司开发了大量的非关系型(NoSQL)数据库,因为已有的 RDBMS 可能无法长时间地支撑一个成功的互联网公司(下图是一个关于Facebook在数据量开始增长之后如何应对MySQL限制的例子)。

在当时没有任何已有解决方案的情况下,这些互联网公司创造了新的方法和工具来处理收集到的大量非结构化数据:谷歌发布了GFS、MapReduce和BigTable;亚马逊发布了DynamoDB;雅虎发布了Hadoop;Facebook发布了Cassandra和Hive;LinkedIn发布了Kafka。

其中一些公司开放了他们的源代码,一些公司则发布了他们详细的研究设计论文,这也就促进了各种新数据库与新技术的激增,而NoSQL数据库成为了行业中的一个主要的参与者。

上图显示了自2000年以来各种数据库系统激增的情况。来源:Korflatis et. al (2016)

NoSQL数据库与模式无关,它提供了存储和操作大量非结构化和半结构化数据所需的灵活性。用户不需要知道在创建数据库的时候将存储哪些类型的数据,系统可以适应数据类型和模式的变化。

NoSQL数据库可以跨节点分发数据,它通常具有更高的水平伸缩性和分区容错性。但是,这些性能优势同时也还伴随着成本的开销。NoSQL数据库不符合ACID特性,因而,数据一致性也无法得到保证。

相反,它们提供了“最终一致性”:当旧数据被覆盖时,它们将返回暂时有些出入的结果。

例如,当人们同时搜索同一个词的时候,谷歌的搜索引擎索引不能更新这个词的相关数据,因此它在我们搜索时不会返回给我们最新的数据结果,但它会返回最合适的结果。

虽然这个特性在绝对需要保证数据一致性的情况下(如金融交易)不太适合,但对于那些需要效率而不是精确度的任务的场景,它却非常的适合。

现在,NoSQL分为几个不同的类别,每个类别都有其特定的作用。

键值存储,如Redis、DynamoDB和Cosmos DB,只用于存储键值对,并提供检索与已知键相关联的值的基本功能。当速度因素很重要的时候,它们在简单的数据库模式下执行的效率最高。

宽列存储,如Cassandra、Scylla和HBase,将数据存储在列族或表中,并用来为大型分布式系统管理PB级的数据量。

文档存储,如MongoDB和Couchbase,以XML或JSON格式存储数据,文档名称作为主键,文档内容作为值。文档可以包含许多不同的值类型,并且可以嵌套,使它们特别适用于管理分布式系统的半结构化数据。

图形数据库,如Neo4J和Amazon Neptune等将数据表示为相关联节点或对象的网络,以便于数据的可视化和图形化分析。图形数据库对于分析异构数据点之间的关系特别的有用,例如防欺诈或Facebook的好友关系图。

MongoDB是目前最流行的NoSQL数据库,它为一些一直在使用传统RDBMS方法处理非结构化数据的企业带来了巨大的帮助。

这里有两个行业例子:MetLife花费了多年的时间,试图在一个可以处理其所有保险产品的RDBMS上建立一个集中式的客户数据库,之后,一个Hackathon的人在数小时内就用MongoDB创建了一个数据库,该数据库在不到90天就投入了生产。

YouGov是一家每小时收集5GB数据的市场调查公司,它将所有的数据从RDBMS迁移到了MongoDB,存储空间节省了70%。

数据仓库、数据湖和数据沼泽

随着数据源的不断增多,使用多个数据库进行数据分析的工作变得效率低下、成本高昂。在2000年之后,出现了一种称为数据仓库(Data Warehouse)的解决方案,它能将企业所有数据库中的数据集中起来。

数据仓库通过创建一个来自不同数据源(内部和外部)数据的存储库,支持从操作系统到分析和决策系统的数据流。

在大多数的情况下,数据仓库是一个关系型数据库,它存储了为收集业务信息而优化的已处理数据。

它收集了来自交易系统和业务应用系统的具有预定结构和模式的数据,这些数据通常用于生成经营报告和分析结果。

但是,由于进入数据仓库的数据需要在存储之前就进行处理,还存在着大量的非结构化数据,这可能需要耗费大量的时间和资源。

因此,企业开始维护数据湖(Data Lakes),它能以任何规模存储企业的所有结构化和非结构化的数据。创建一个能存储原始数据的数据湖,无需一开始就定义数据结构和模式。

数据湖允许用户执行分析任务,而无需将数据迁移到单独的分析系统上,从而使企业能够从以前不能用于分析的新数据源中获得信息,例如,通过使用日志文件、访问数据、社交媒体和物联网设备中的数据来创建机器学习模型。

通过随时都可以分析企业所有的数据,数据科学家们可以回答更多的新业务问题,或者用新数据解决旧问题。

上图是数据仓库与数据湖的对比(来源:AWS)

数据湖的体系结构面临的一个常见挑战是,如果没有合适的数据质量和数据治理框架,当数以TB计的结构化和非结构化的数据流入数据湖时,往往很难对其内容进行分类和排序。

数据湖就变成了数据沼泽(Data Swamps),因为它们变得太乱了,无法使用。许多组织现在要求进行更多的数据治理和元数据管理。

分布式和并行计算:Hadoop、 Spark和MPP

虽然企业对数据存储和计算的需求在过去几十年里突飞猛进地增长,但传统硬件的发展还远远跟不上要求。

企业数据不再适合标准存储,处理大多数的大数据分析任务所需要的计算能力可能需要数周、数月,或者根本不可能在普通计算机上完成。

为了解决这一问题,许多新技术已经发展到多台计算机协同工作,将数据库分发给数千台商品服务器来进行处理。

当多个计算机连接起来形成一个网络并共同完成同一任务的时候,这些计算机就形成了一个集群。

一个集群可以看作是一台计算能力强大的计算机,它可以使用普通的硬件,非常低廉的成本,但可以显著地提高性能、可用性和可扩展性。

Apache Hadoop是分布式数据基础设施的一个例子,它利用集群来存储和处理海量的数据,并支持数据湖体系结构。

数据库技术的发展过程(来源:Business Analytic 3.0)

当你想到Hadoop的时候,就想想“数据分发”。Hadoop由三个主要的部分组成:Hadoop分布式文件系统(HDFS),它是一种跨多个(分布式)物理硬盘来存储和监测数据的方式;

MapReduce,是一种跨分布式处理器处理数据的框架;还有另一个是资源协商者(YARN),这是一个集群管理框架,它在分布式系统上协调资源,如CPU的大小、内存的多少和网络带宽分配等等。

Hadoop的处理层是一个特别值得注意的创新:MapReduce使用一种两步计算的方式,用于以一个可靠的、容错的方式处理分布在大型商用集群中的大数据集。

第一步是将数据分发到多台计算机(Map)上,每台计算机对分发的数据片执行并行计算。第二步是以成对的方式合并这些计算结果(Reduce)。

谷歌在2004年发表了一篇关于MapReduce的论文,2006年的时候,在开源Apache环境中实现了MapReduce的一个Yahoo程序员看到了这篇论文,得以为每个企业提供了使用商业硬件来存储前所未有的数据量的能力。

尽管这个想法有很多开源的实现,但Google的MapReduce却一直保持着优势,有点像Jacuzzi或Kleenex。

Hadoop是为迭代计算而设计的,它在一次操作中从磁盘扫描大量的数据,将处理任务分发到多个节点,并将结果返回并存储到磁盘上。

使用Hadoop和HBase,查询ZB级的索引数据可以在10-12秒内完成,而在传统数据仓库环境中运行则需要4个小时。

Hadoop通常用于生成复杂的分析模型或海量数据存储的应用程序,例如回顾性和预测性分析、机器学习和模式匹配、客户细分和客户流失分析,以及活动归档等等。

但是,MapReduce用于处理批量的数据,因此它不适合处理实时数据。Apache Spark是在2012年发布的,可以用来填补这一空白。Spark是一种并行数据处理工具,它通过在内存中处理数据来提高运行速度和效率。

它与MapReduce的原理相同,但通过在内存中完成大部分的计算工作,并且仅在内存已满或计算完成的时候才会写入磁盘,因此,它的运行速度会快得多。

这种内存计算允许Spark“在内存中运行程序比在Hadoop MapReduce中快100倍,比在磁盘上快10倍”。

然而,当数据集太大而导致内存不足(通常是数百GB以上)的时候,Hadoop MapReduce可能比Spark表现的更好。

Spark还拥有一套强大的数据分析库,涵盖了广泛的功能:用于SQL的Spark SQL和结构化数据,用于机器学习的MLib,用于流式计算的Spark Streaming和用于图形分析的GraphX。

由于Spark的重点是计算,所以它没有自带的存储系统,而是运行在各种存储系统之上,如 Amazon S3、Azure Storage和Hadoop’s HDFS。

在MPP系统中,所有的节点都是互连的,数据可以通过网络进行交换(来源:IBM)

Hadoop和Spark并不是唯一利用集群处理海量数据的技术。另一个流行的分布式查询处理方法称为大规模并行处理(Massively Parallel Processing ,MPP)。

类似于MapReduce,MPP跨多个节点分发数据处理任务,并且节点利用更加快速的并行处理方式。

但与Hadoop不同的是,MPP是在RDBMS中使用的,并使用“无共享”式的体系结构,每个节点使用多核处理器处理自己的数据片,使它们比传统的RDBMS快很多倍。

一些MPP数据库,如Pivotal Greenplum,拥有成熟的机器学习库,允许进行库内数据分析。

然而,与传统的RDBMS一样,大多数MPP数据库不支持非结构化数据,甚至结构化数据也需要通过一些处理之后才能适应MPP的基础结构。

因此,为MPP数据库设置数据管道需要花费额外的时间和资源。

由于MPP数据库是支持ACID特性的,并且比传统的RDBMS执行速度要快得多,因此它们通常用于高级企业数据仓库解决方案,如Amazon Redshift、 Pivotal Greenplum和 Snowflake。

作为一个行业案例,纽约证券交易所每天接收4~5TB的数据量,并进行复杂的分析、市场调查、容量规划和监测。

该公司一直在使用一个几乎无法承担数据处理工作的传统数据库系统,它需要数小时才能加载完成,查询速度也非常的差。迁移到MPP数据库后,他们每日的运行数据分析时间减少了8个小时。

云服务

另一个彻底改变的企业大数据分析能力的创新是云服务的兴起。

在云服务出现之前,企业不得不从软件和硬件的供应商那里购买本地数据存储软件、设备和数据分析解决方案,这通常要支付永久性的软件许可费用以及每年的硬件维护费和技术服务费。

除此之外,还有电力、空调、网络安全、容灾保护、IT技术人员等方面的成本,用于建设和维护内部基础设施。

即使在技术上有能力存储和处理大数据的时候,大多数企业也会发现海量数据的存储和处理的成本太高了。

另外,扩展内部基础设施还需要一个设计和采购的过程,这需要很长的时间来实施,并需要大量的资金预算。许多潜在有价值的数据收集和分析可能就因此被放弃了。

云服务的提供商:例如基础设施即服务(IaaS)和存储即服务(SaaS)(来源:IMELGRAT.ME)

当云服务在2000年末被引入的时候,内部自建模式开始迅速地失去了市场份额——在过去十年里,全球云服务市场份额每年增长15%。

云服务平台提供对各种服务(从虚拟计算到存储基础设施再到数据库)的定制,这些服务在线通过用多少付多少的方式提供,为用户灵活快速地访问和低成本的数据存储,以及为虚拟计算资源提供了便利条件。

云服务提供商负责其所有硬件和软件的采购和维护,他们通常拥有庞大的服务器网络和技术支持团队来提供可靠的服务。

许多企业在使用之后发现,他们可以通过云服务显著降低运营成本和提高运营效率,并且能够利用现成的云资源和内置的可伸缩性更快地开发和生产产品。

不仅没有了自建基础设施的巨大成本和周期,云服务还避免了搭建大数据平台的麻烦,并有效地使中小企业的大数据分析工作更加的灵活。

这里有几种云服务模型,其中公有云是最常见的。

在公有云中,所有硬件、软件和其它的支撑基础设施都由云服务提供商自行搭建和管理。用户与其他的“云租户”共享云基础设施,并可以通过Web浏览器访问他们的服务。

而具有特殊安全需求的组织通常会使用私有云,如政府机构和金融机构等。在私有云中,服务和基础设施仅提供给一个组织使用,并在私有网络上进行维护。私有云可以是本地的,也可以由第三方服务提供商托管。

混合云将私有云与公有云结合起来,使组织能够同时获得两者的优势。在混合云中,数据和应用程序可以在私有云和公有云之间进行传输和访问以获得更大的灵活性:例如,公有云可用于高访问量、低安全性的数据,而私有云可用于敏感的、业务关键型的数据,如财务报告、金融数据等等。

多云模型则涉及到多个云平台,每个平台都提供特定的应用服务。多云可以是公有云、私有云和混合云的组合,以实现组织的目标为目的。组织通常选择多云是为了满足一些特定的业务,以及位置和时间上的需求,并避免供应商的局限性。

案例研究:构建端到端的数据科学基础设施

设计一个可行的数据产品,不仅仅是用Scikit-Learn(Scikit-learn是专门面向机器学习的Python开源框架)构建一个机器学习模型,还要对其进行反复优化,并加载到服务器上。

不同数据环境下的机器学习包(来源:Kosyakov (2016))

它需要了解企业生态系统的所有部分是如何协同工作的,从数据流入的位置和方式、数据处理和转换的环境、企业可视化和展现数据的惯例,以及如何将模型输出转换为某些其它的企业应用的输入。

它的主要目标包括创建一个易于维护的过程,在这个过程中,模型可以被迭代,性能是可复制的,模型的输出可以可视化地展现出来并能让老板们轻松地理解,以便他们能做出更加明智的业务决策。

实现这些目标需要选择正确的工具,并了解同行们都正在做什么以及做出了什么成果。接下来,我们用一个场景来加以说明。

假设你刚刚被一家度假推荐App的初创公司聘为首席数据科学家,该公司预计将收集数百GB的关于用户每天的数据,包括结构化的(客户资料、温度、价格和交易记录)和非结构化的(客户的帖子、评论和图片文件)。

你的预测模型需要每周都重新训练新的数据,并根据需要即时提出合理化建议。想让自己的这款 APP 应用能大受欢迎,数据的收集、存储和分析能力必须是可扩展的。

你将如何设计数据处理过程和模型产品化呢?你需要什么样的工具来完成工作呢?既然这是一家初创公司,而你是数据科学家中的首席,或许也是唯一的数据科学家,那么就只能由你来做这些决定。

首先,你必须了解如何设置数据管道,管道接收来自数据源的原始数据,并进行数据处理,然后将处理过的数据写入数据库。

理想化的数据管道具有较低的事件延迟(在收集到数据后能够立即进行数据查询)、可伸缩性(能够在产品扩展时处理海量数据)、交互式查询功能(支持批量查询和较小规模的交互式查询,使数据科学家能够查找表和模式)、版本控制功能(在不关闭管道和丢失数据的情况下对管道进行修改的能力);

监控功能(数据一旦停止输入管道应促发警报)、可测试性(在不中断的情况下测试管道的能力)。

或许最重要的是它最好不要干扰日常的业务操作,例如,如果你正在测试新的模型,进而导致数据库操作停止,则操作会回滚。

创建和维护数据管道通常是数据工程师的职责(本文对初创公司创建数据管道有一个更详细的概述),但是数据科学家至少也应该熟悉这个过程和它的局限性,以及对处理过的数据进行分析的工具。

接下来,你必须决定企业是要自建基础设施还是使用云服务。对于初创公司来说,首要任务是在不增加有限资源的情况下扩大数据收集量。

如前面所说,自建基础设施需要巨大的前期投入和维护成本,因此云服务往往是初创公司更好的选择。

云服务允许自由扩展来满足需求,并且只需要很少的维护工作,这样你的小团队就可以专注于产品设计和数据分析工作了,而不是对基础设施的管理。

上图显示了一些提供基于Hadoop解决方案的供应商 (来源:WikiCommons)

为了选择一个云服务商,你必须先确定要分析的数据,然后再确定最适合这些数据类型的数据库和基础设施。

由于在数据分析的管道当中既有结构化数据,也有非结构化数据,所以你可能希望同时建立数据仓库和数据湖。

数据科学家需要考虑的一个重要问题是,存储层是否支持构建模型所需要的大数据工具,以及数据库是否提供了有效的库内分析功能。

例如,Spark的MLlib等一些机器学习库不能有效地将数据库作为主要接口使用,必须先从数据库中把数据下载下来,然后才能对其进行操作,这可能会随着数据量的增长而越来越耗时,而当你不得不定期重新训练模型的时候,这就将会成为性能的瓶颈。

对于云端的数据科学,大多数云服务提供商正在努力开发他们的本地机器学习功能,这就允许数据科学家可以使用存储在自己平台上的数据来轻松构建和部署机器学习模型(亚马逊有SageMaker,谷歌有BigQuery ML,微软有 Azure Machine Learning)。

但是这些工具集目前仍然处于开发完善阶段,而且功能上时常不太完整,例如,BigQuery ML目前只支持线性回归、二元逻辑回归和多类逻辑回归、K-means聚类和TensorFlow模型导入。

如果决定使用这些工具,你必须完整地测试一下它们的功能,以确保能完成你的任务。

选择云服务提供商时要考虑的另一个重要问题是产品供应商的选择。如果选择专有的云数据库解决方案,则很可能无法访问本地环境中的应用或数据,而更换供应商则需要迁移到其它的数据库系统,这很可能会产生高昂的成本。

解决这个问题的一个方法是选择支持开源技术的供应商(这里是Netflix解释为什么使用开源软件的理由)。

使用开源技术的另一个优势是,它们往往会吸引更多的用户,这意味着可以更容易地找到熟悉你的基础架构并具有相关工作经验和技能的技术人员。

还有另外一个方法,就是选择一个第三方供应商(如Pivotal Greenplum和Snowflake),他们使用一些主要的云服务提供商作为数据存储端来提供云数据库解决方案,这将允许你把数据同时存储在多个云平台上,如果这适合你的初创公司的需求。

最后,由于你是这家初创公司的首席数据科学家,并且希望公司能够发展壮大,那么你必须建立一个强大的云服务管理机制来保护你的云安全,防止数据的丢失和泄漏,比如管理数据访问权限、保护各种数据接口和API。当然你还希望实现最佳的数据治理效果,以维护数据的质量,并确保数据湖不会变成数据沼泽。

正如我们所看到的那样,在企业数据科学项目中调整的超参数的数量要比在机器学习模型中的多得多。我们希望这个较高水平的概述能让你有兴趣了解更多关于数据管理领域方面的知识,能学到一些东西吸引更多的开发者们成为数据工程师。

https://towardsdatascience.com/everything-a-data-scientist-should-know-about-data-management-6877788c6a42

【END】

热 文推 荐

你点的每个“在看”,我都认真当成了喜欢