大数据无疑是当下最流行的热词和前沿技术之一。本质上,大数据具有三大类特征:快速、海量和复杂,大多数公司都在经历着这三大特征的各种形态组合。目前,这些特征中,还存在很多较难以解决的挑战,诸如处理数据流中的丢失、重复问题,数据质量参差不齐,数据存储成本高,大数据人才缺乏等。在本文中,我们将对“大数据”的问题进行拆分,是什么使大数据充满挑战,以及现在我们如何用最新的方法解决这些问题。
在本文中,我们将对“大数据”的问题进行拆分,是什么使大数据充满挑战,以及现在我们如何解决这些问题。大数据一度成为流行语,但本质上它是指具备这三大类特征的数据:快速,海量和复杂。让我们仔细研究下这些特征,举一些例子,看看如何用最新的方法解决这些难题。
“大数据是描述海量的高速、复杂和多变数据的一个术语,这些数据需要结合先进的技能和技术来实现信息的捕获、存储、分发、管理和分析”( TechAmerica Foundation’s Federal Big Data Commission, 2012 )
高速的数据
高速的数据指什么?高速的数据指在短时间内产生的大量的数据。比如汽车工厂的传感器数据,温度监测器,飞行仪表等产生的数据。
高速数据通常被认为是实时的或是准实时的数据流。数据流本质上是在生成后就发给处理器的数据包(比如天线收到的电视信号或是通过固话传输的语音电话)。实时数据的定义值得深入讨论,但是它本质上可以归结为需要在毫秒内被更新的数据。处理数据流有很多挑战,包括在采集时不丢失数据、处理数据流中的重复记录、流数据与更大的历史数据集集成、以及进行实时分析。
传统的数据流服务比如 Rabbit MQ 和 Active MQ 只在单节点上运行因此收到了服务器能力的限制。Apache Kafka 引入了分布式流服务的概念,使得数据流可以分散到多个节点(服务器)上。这实现了高吞吐的流处理,每秒能达到数百万条。随着服务向云上的迁移,开发者不用再管理底层的硬件。亚马逊的 Kinesis 和谷歌的 Pub/Sub 将后方的服务器完全抽离,使开发者能够更专注于业务逻辑和数据。
ELK 是常用的在流式数据上作实时分析的技术栈。ELK 由多个工具组成,用 Log Stash 将多种数据源的数据传输进 Elastic Search(ES)。在 ES 中存储的数据可以轻松的通过特定的短语和关键词检索到。Kibana 是 ES 最上层的工具,它在数据流入时就能进行实时分析,用户可以通过它来查询数据、为数据创建度量。
海量数据
“大数据”的第二个
特征是数据量足够大。
典型的例如一个包含顶级投资银行 20 年股票交易历史的超大数据集,20 年间所有信用卡的交易记录,或是热门网站(如 buzz feed)的用户交互信息等。通常这些数据都会在 TB 甚至 PB 量级。
处理超大数据集通常会受到存储和处理数据的计算资源的限制。通常一块商用硬盘可以容纳 1TB 的数据量。有些数据集能有好多 PB(相当于上千块硬盘的容量)。这些数据需要在数据中心内跨多个服务器(或传统的 RAID 盘)存储。除此之外,处理这些数据也需要大量的物理内存和 CPU。
Hadoop(一个开源分布式大数据处理生态)的出现一定程度上降低了数据处理的成本。这套系统的核心是 Hive,一种能像数据库一样存储数据的类 SQL 处理系统。数据处理在商用硬件上进行,使用 Map-Reduce 算法(专门为分布式处理设计的算法)。这些服务器通常被存放在数据中心。但是,管理维护数据中心和 Hadoop 套件的成本非常高。
但最近,很多的存储和处理都转移到了云上,比如 Amazon Web Service (AWS) 和 Google Cloud Platform (GCP) 这些主流玩家。AWS 和 GCP 都提供受管理的 map reduce 或 spark 服务(AWS Elastic Map Reduce 以及 GCP Cloud data proc)。他们也提供大规模可扩展的数据库服务(分别是 Google Big Query 和 AWS Redshift),能为 PB 级的数据集提供关系型数据库服务。这些解决方案最大的优点是用户不用管理底层的硬件,可以专注于更重要的任务,如存储 / 移动数据或者是写 SQL。这个生态中的典型玩家是 Snowflake,在 AWS 中提供即买即用的数据处理服务。
复杂数据
“大数据”的第三个特征是复杂。在解释什么造成了数据的复杂性前,我先讲下理想的数据集是什么样的。理想的数据集有预先定义的 schema,每种数据类型(string, number, date)都有定义好的主键,以及完善的数据字典。数据集中没有重复,所有的值都是精准的。
复杂数据的概念和理想数据完全相反。所有数据集都有一定的复杂性,但有一些天生更难处理。通常这些复杂数据集没有定义结构(没有行列结构),经常变化,数据质量很差或没有记录。
比如人工输入的医生的笔记、博客的文字、时刻更新的网页日志以及深嵌套的 XML 或 JSON 文件。
为复杂数据做快速标注时,大多数不好的数据应该在源头就进行识别。数据工程师需要构建足够强壮的系统来快速获取和过滤这些数据集,但是这些数据最终还是要在源头纠正。此外,如果可以,我们建议在数据产生的源头定好 SLA 来减少低质量的数据,使数据更好管理。
处理复杂数据集,让它们能遵从整洁的格式需要下很大的功夫。每种数据质量问题都需要区别处理,比如记录重复、主键缺失、字符 / 字符串的格式错误等。
有很多工具可以用来处理这种数据。通常数据科学家和工程师会用 Jupyter notebook 以及 Pandas 或 Spark 来处理、分析、可视化这些数据集。Jupyter 为开发者提供了交互式的环境使他们能在代码中逐行遍历数据集,从而节省很多时间。Databricks 也提供了非常好的数据处理和分析环境,包含了一个类似 Jupyter notebook 的 UI、独有的 Spark 特性、以及简单易用的节点管理能力。
还有很多第三方的工具,比如 Trifacta,能够自动进行一些数据清洗任务,通过提供 UI 和非常好的功能代替完全手写的数据清洗代码,来加速清洗和分析任务。Google Cloud 在 GCP 中提供了这个工具 cloud Data Prep。
小结
可以看出,这些特征中的任何一个挑战都很难解决。但是,大多数的公司都经历着这三种问题的各种形态组合。挑战变得更庞大了,这需要衡量不同的工具和方法来解决他们特定的问题。
向云服务的转移很大程度上降低了处理和管理大数据的壁垒,公司不再需要建设数据中心并且花大量的预算在专用软件上。但是招聘懂得如何使用正确的工具来处理大数据问题的人才仍然是个难题。
降低大数据使用门槛的下一步是利用机器学习技术来理解数据的结构以及监测数据发生的变化。由于高技能人才将成为处理大数据的瓶颈,未来 5-10 年间产生的下一代工具,很可能会关注这些特征。