大数据工程师手册:全面系统的掌握必备知识与工具
数据湖的体系结构面临的一个常见挑战是,如果没有合适的数据质量和数据治理框架,当数以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%。云服务平台提供对各种服务(从虚拟计算到存储基础设施再到数据库)的定制,这些服务在线通过用多少付多少的方式提供,为用户灵活快速地访问和低成本的数据存储,以及为虚拟计算资源提供了便利条件。 云服务提供商负责其所有硬件和软件的采购和维护,他们通常拥有庞大的服务器网络和技术支持团队来提供可靠的服务。许多企业在使用之后发现,他们可以通过云服务显著降低运营成本和提高运营效率,并且能够利用现成的云资源和内置的可伸缩性更快地开发和生产产品。不仅没有了自建基础设施的巨大成本和周期,云服务还避免了搭建大数据平台的麻烦,并有效地使中小企业的大数据分析工作更加的灵活。 这里有几种云服务模型,其中公有云是最常见的。 案例研究:构建端到端的数据科学基础设施 设计一个可行的数据产品,不仅仅是用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。当然你还希望实现最佳的数据治理效果,以维护数据的质量,并确保数据湖不会变成数据沼泽。 正如我们所看到的那样,在企业数据科学项目中调整的超参数的数量要比在机器学习模型中的多得多。我们希望这个较高水平的概述能让你有兴趣了解更多关于数据管理领域方面的知识,能学到一些东西吸引更多的开发者们成为数据工程师。 原文链接: (*本文为AI科技大本营编译文章,转载请微信联系 1092722531) (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |