一、What is Big Data(什么是大数据)

大数据是一种数据集合,具有巨大的体量,并且随着时间呈指数级增长。它的规模和复杂性如此之大,以至于任何传统的数据管理工具都无法高效地存储或处理它。大数据依然是数据,但其规模极为庞大。

c3hkTtSp-1.png

1、Examples of Big Data(大数据的例子)

纽约证券交易所(NYSE)

纽约证券交易所是大数据的一个典型例子,每天会产生大约 1 TB(太字节) 的新交易数据。

社交媒体

数据显示,每天有超过 500 TB 的新数据被写入社交媒体网站 Facebook 的数据库中。这些数据主要来自照片和视频上传、消息交流、评论发布等用户行为。

航空旅行

单个喷气发动机在 30 分钟的飞行时间内就可以产生超过 10 TB 的数据。每天有成千上万架航班飞行,所产生的数据总量可达到数个 PB(拍字节)级别。

c3hkTtSp-2.png

2、Types of Big Data(大数据的类型)

  • 结构化数据(Structured)
  • 非结构化数据(Unstructured)
  • 半结构化数据(Semi-structured)

结构化数据(Structured)

任何可以以固定格式存储、访问和处理的数据都被称为“结构化”数据。在过去的时间里,计算机科学领域的人才在处理这类数据(格式在使用前已知)方面取得了显著成果,并能够从中提取价值。然而,如今我们也面临一个问题:当这类数据的规模增长到极其庞大的程度时(典型规模达到数 ZB,即泽字节),传统方法也变得难以应对。

结构化数据的例子

数据库中的“员工”表就是结构化数据的一个典型例子。

c3hkTtSp-3.png

非结构化数据(Unstructured)
任何形式未知或没有固定结构的数据都被归类为非结构化数据。除了数据体量庞大之外,非结构化数据在处理和提取价值的过程中还面临诸多挑战。一个典型的例子是异构数据源,其中包含文本文件、图像、视频等多种类型的数据。目前,各大组织机构掌握着大量的数据资源,但遗憾的是,由于这些数据处于原始或非结构化状态,它们往往不知道该如何有效地从中获取有价值的信息。

非结构化数据的例子

“Google 搜索”返回的结果就是非结构化数据的一个典型例子。

c3hkTtSp-4.png

半结构化数据(Semi-structured)

半结构化数据可以同时包含结构化和非结构化两种形式的数据。我们可以把它看作在形式上是结构化的,但实际上并没有像关系型数据库中的表结构那样被严格定义。例如,以 XML 文件表示的数据就是半结构化数据的典型代表。

半结构化数据的例子

存储在 XML 文件中的个人数据。

c3hkTtSp-5.png

3、Characteristics of Big Data(大数据的特征)

大数据可以通过以下特征来描述:

  • Volume(数据量)
  • Variety(多样性)
  • Velocity(速度)
  • Veracity(真实性)

c3hkTtSp-6.png

Volume(数据量):“Big Data”这个名称本身就与庞大的数据规模密切相关。数据的大小在决定其是否具有价值方面起着至关重要的作用。同时,某组数据是否可以被称为“大数据”,也取决于它的体量。

Variety(多样性):Variety 指的是数据来源的异质性以及数据的多种形式,包括结构化和非结构化数据。早期,大多数应用程序只考虑来自电子表格和数据库的数据。而如今,电子邮件、照片、视频、监控设备、PDF 文件、音频等形式的数据也被纳入分析范畴。这些非结构化数据的多样性给数据的存储、挖掘和分析带来了新的挑战。

Velocity(速度):Velocity 是指数据生成的速度。数据生成和处理的速度是否足以满足需求,决定了数据的真正潜力。大数据中的 Velocity 关注的是数据从各类来源流入的速度,比如业务流程、应用日志、网络、社交媒体、传感器、移动设备等。数据流的特征是庞大且持续不断的。

Veracity(真实性):Veracity 指的是数据内容的质量是否值得分析。高真实性的数据能提供有价值的信息,而低真实性的数据则可能充斥大量空洞、无用的数字,这些通常被称为“噪声”。

4、Advantages Of Big Data Processing(大数据处理的优势)

在数据库管理系统(DBMS)中处理大数据的能力带来了多项优势,例如:

  • 企业在决策时可以利用外部情报

    通过访问来自搜索引擎和像 Facebook、Twitter 等网站的社交数据,企业能够更精准地优化其业务策略。

  • 改善客户服务

    传统的客户反馈系统正逐步被基于大数据技术的新系统所取代。这些新系统使用大数据与自然语言处理技术来读取和评估消费者的反馈信息,从而提升客户体验。

  • 提前识别产品或服务可能存在的风险

    通过对大数据的分析,企业可以更早发现潜在问题,及时做出调整和应对。

  • 提高运营效率

    大数据技术可用于创建一个临时数据区(暂存区)来接收新数据,在决定哪些数据应转移到数据仓库之前进行预处理。此外,将大数据技术与数据仓库集成,有助于企业卸载不常访问的数据,从而提升整体处理效率和资源利用率。

二、Hadoop Ecosystem tools(Hadoop 生态系统工具)

大数据生态系统工具包括 Hadoop、HBase、Zookeeper、Hive、Mahout、Sqoop、Storm 等。

c3hkTtSp-7.png

1、HBASE

HBase 是一个开源的、非关系型分布式数据库,换句话说,它是一个 NoSQL 数据库。它支持所有类型的数据,因此能够处理 Hadoop 生态系统中的各种数据。

它的模型来源于 Google 的 BigTable,后者是为应对大规模数据集而设计的分布式存储系统。

HBase 被设计运行在 HDFS(Hadoop 分布式文件系统)之上,提供类似 BigTable 的功能。它以容错的方式存储稀疏数据,这种数据在大多数大数据应用场景中非常常见。

HBase 是用 Java 编写的,而 HBase 应用程序可以使用 REST、Avro 和 Thrift API 编写。

2、HIVE

Apache Hive 数据仓库软件是构建在 Apache Hadoop 之上的,用于查询和管理大规模分布式数据集。它提供以下功能:

  • Hive 提供一系列工具用于数据的提取 / 转换 / 加载(ETL)。
  • Hive 能够存储、查询和分析存储在 HDFS(或 HBase)中的大规模数据。
  • Hive 会将 SQL 查询转换为 MapReduce 作业,并在 Hadoop 上运行,从而对海量数据进行统计分析与处理。

Hive 定义了一种类似于 SQL 的查询语言,称为 HQL(Hive Query Language)。熟悉 SQL 的用户可以直接使用 Hive 进行数据查询。同时,这种语言也允许熟悉 MapReduce 的开发人员编写自定义的 Mapper 和 Reducer,用于处理那些内置函数无法胜任的复杂分析任务。Hive 还允许用户编写自定义函数(UDF,User-Defined Function)。

Hive 的缺点:

  • Hive 当前不支持事务操作。
  • 无法修改表中数据(无法进行更新、删除和插入操作;只能通过文件追加或重新导入数据)。
  • 查询速度较慢。

3、HADOOP

在传统方式中,所有数据都存储在一个集中的数据库中。随着大数据的兴起,单一数据库已无法胜任如此庞大的数据处理任务。解决方案是采用分布式方式来存储海量信息。数据被拆分并分配到多个独立的数据库中。

HDFS(Hadoop Distributed File System) 是专为在普通硬件上存储海量数据而设计的文件系统,它能够以多种格式将信息存储在不同的机器上。

c3hkTtSp-8.png

4、STORM

Apache Storm 是一个免费开源的分布式实时计算系统,它简化了对流式数据的可靠处理。Storm 拥有众多应用场景,包括实时数据分析、在线学习、持续计算、分布式 RPC、ETL 等。Storm 的处理速度非常快,一项测试显示在单节点上每秒可处理一百万个分组。

Storm 的特点:

  • 易于扩展:随着业务的发展,数据量和计算量可能不断增长,系统需要具备良好的可扩展性。只需添加新机器并修改相应的拓扑配置即可。Storm 使用 Hadoop 的 Zookeeper 进行集群协调,能够充分保障大型集群的稳定运行,同时确保每条数据都能被处理。Storm 的集群管理也非常简单。
  • 容错能力强:一旦拓扑提交,Storm 会持续运行,直到该拓扑被废弃或关闭。如果在执行过程中出现错误,Storm 会重新分配任务,这是分布式系统中常见的问题。节点故障不会影响应用程序的运行。
  • 低延迟:作为一个实时计算系统,Storm 的延迟非常低,适用于对数据处理速度要求极高的场景。

5、Zookeeper

  • Apache Zookeeper 是任何 Hadoop 作业中的协调者,用于管理 Hadoop 生态系统中各种服务的组合。
  • Apache Zookeeper 在分布式环境中与多个服务进行协调

在引入 Zookeeper 之前,协调 Hadoop 生态系统中不同服务之间的关系既困难又耗时。各服务之间在交互过程中常常存在许多问题,比如在同步数据时的通用配置问题。即便服务已经完成配置,但当配置发生变动时,系统的维护会变得复杂且难以管理。而服务之间的分组和命名也曾是一个耗时的过程。

正是由于上述问题,Zookeeper 被引入。它通过执行同步操作、配置维护、分组管理和命名服务,大大节省了时间。虽然 Zookeeper 本身是一个简单的服务,但它可以被用来构建功能强大的解决方案。

6、SQOOP

Sqoop 是 Apache 的顶级项目,它允许用户将关系型数据库中的数据提取到 Hadoop 中进行进一步处理。在获得分析结果后,Sqoop 也可以将分析结果导入回数据库,供其他客户端使用。

导入过程会运行一个 MapReduce 作业,该作业连接到 MySQL 数据库并从表中读取数据。默认情况下,该作业会运行四个 Map 任务以加快导入速度。每个任务将其导入的数据写入一个独立的文件,但这四个文件都保存在同一个目录下。

三、Hadoop History and Version(Hadoop History and Version)

Hadoop 是一个由 Apache 软件基金会管理的开源框架,使用 Java 编写,用于通过商用硬件集群存储和处理大规模数据集。大数据面临两个主要问题:一是如何存储如此庞大的数据,二是如何处理已存储的数据。Hadoop 正是为了解决大数据在存储和处理方面的问题而诞生的,并具备一些额外的能力。

Hadoop 由两个核心组件组成:Hadoop 分布式文件系统(HDFS)YARN(Yet Another Resource Negotiator)

1、Hadoop History(Hadoop 的历史)

Hadoop 是由 Doug Cutting 和 Mike Cafarella 于 2002 年开始开发的。它的起源是 Google 发布的 Google 文件系统论文。接下来,下面是 Hadoop 的发展历史:

c3hkTtSp-9.png

  • 2002 年,Doug Cutting 和 Mike Cafarella 开始开发一个名为 Apache Nutch 的项目,这是一个开源网页爬虫软件项目。在开发 Nutch 的过程中,他们面临着大数据存储的问题。为了存储这些数据,他们需要投入大量成本,这也成为推动新方案出现的重要原因之一,促成了 Hadoop 的诞生。
  • 2003 年,Google 推出了一种名为 GFS(Google File System,谷歌文件系统)的文件系统。这是一种专有的分布式文件系统,旨在高效访问海量数据。
  • 2004 年,Google 发布了关于 MapReduce 的白皮书。这一技术简化了在大型集群上的数据处理过程。
  • 2005 年,Doug Cutting 和 Mike Cafarella 推出了一个新的文件系统,称为 NDFS(Nutch Distributed File System,Nutch 分布式文件系统),该文件系统也引入了 MapReduce 功能。
  • 2006 年,Doug Cutting 离开 Google 加入 Yahoo。在 Nutch 项目的基础上,他提出了一个新项目 Hadoop,并引入了名为 HDFS 的文件系统。同年,Hadoop 的第一个版本 0.1.0 发布。Doug Cutting 将该项目命名为 Hadoop,是取自他儿子的玩具小象的名字。
  • 2007 年,Yahoo 启动了两个包含 1000 台机器的集群运行 Hadoop。
  • 2008 年,Hadoop 成为第一个能在 900 个节点的集群上用 209 秒完成 1TB 数据排序的最快系统。
  • 2013 年,Hadoop 2.2 发布;2017 年,Hadoop 3.0 发布。

四、Hadoop Distributions(Hadoop 发行版)

由于 Hadoop 是开源的,许多公司在其原始开源代码的基础上开发了专有的发行版。因此,Hadoop 存在多种变体,如 Cloudera Hadoop 发行版、Hortonworks Hadoop 发行版、MapR Hadoop 发行版、Pivotal HD 等。

1、Criteria to Evaluate Distribution(评估 Hadoop 发行版的标准)

性能(Performance)

在最初的阶段,Hadoop 主要用于网页爬取和索引,在这种背景下,对性能的敏感性并不高。而如今,越来越多的 Hadoop 项目被要求能够实时或近实时地交付有效结果。因此,Hadoop 对性能的关注也逐步演变:早期主要关注吞吐量,而现在则更加注重低延迟。

当前对低延迟的关注主要集中在 Hadoop 平台的两个关键特性上:

  • 原始性能(Raw performance):包括延迟、MapReduce 的执行速度、系统吸收信息的速度,以及数据是否能立即供实时应用分析使用。
  • 可扩展性(Scalability):即是否可以轻松在各个维度(如节点数、表数量、文件数量等)上扩展,同时不会带来沉重的管理负担、复杂的应用逻辑变更或高昂的成本。

一种更好的技术方案是让 Hadoop 实现一个标准文件接口,从而使应用程序可以像访问传统的网络附加存储(NAS)一样访问 Hadoop 集群。应用服务器就可以直接将数据写入 Hadoop 集群,而无需先将其暂存在本地磁盘。写入 Hadoop 的数据还可以在接收时自动压缩,并通过多条并行连接供应用程序立即随机访问。这些直接交互为基于 Hadoop 的实时决策提供了基础。

例如,一家在线游戏公司依赖 Hadoop 来追踪数百万用户和数十亿个事件。推送虚拟物品的时机非常短暂,因为玩家流动速度很快。实时或近实时地分析流数据有助于及时提供个性化建议,从而提升收益。虽然 Apache Drill 等项目可以加快决策过程,但前提是原始数据必须尽快到达 Hadoop 集群。

可扩展性(Scalability)

希望利用 Hadoop 的 IT 组织常常面临两难选择:一是投入大量资金和管理员时间,配置比以往更多的硬件资源;二是在有限资源下最大限度挖掘价值,但可能错失大数据的全部潜力。一个具备良好可扩展性的 Hadoop 平台可以在满足用户需求与预算之间取得平衡。

需要注意的是,Hadoop 的可扩展性并不是单一维度的概念,而是需要综合考虑多个因素:

  • 文件系统限制:Hadoop 默认架构中包含一个单一的 NameNode,这限制了整个集群的文件数量(通常在 1 到 1.5 亿之间),且受限于可用的内存容量用于文件元数据存储。在小型集群中,每个 DataNode 的块数上限也会进一步限制可存储的文件数。一个更理想的 Hadoop 平台应能避免单点瓶颈,并采用分布式元数据架构,支持数十亿甚至数万亿个文件与表。
  • 节点数量:另一个扩展维度是物理节点的数量。根据处理或存储的需求,Hadoop 实现应能够扩展到 1000 个节点甚至更多。
  • 节点容量/密度:对于以存储为主的场景,需要使用高磁盘密度的节点来扩展,以减少存储同等数据所需的节点总数。

可靠性(Reliability)

互联网和社交媒体的发展极大地推动了商业的增长,企业正在生成并收集大量数据,必须高效处理这些数据才能获得竞争优势。许多知名企业选择使用 Hadoop 来解决数据管理难题。

Apache Hadoop 是一个在大规模集群硬件(服务器)上运行应用的框架,支持从单台服务器扩展到上千台计算机,并具备高度的容错性。

Hadoop 在故障检测和处理方面比普通软件更可靠。即便面对 TB 级数据,Hadoop 也能让分析变得更加高效。

由于 Hadoop 存在数据副本机制,即使机器出现故障,数据也可以在集群中被可靠地保存和恢复。因此,即使某个节点宕机,数据仍能得到安全保障。