Genluo / Precipitation-and-Summary

梳理体系化的知识点&沉淀日常开发和学习
MIT License
16 stars 1 forks source link

《大数据技术》(二)大数据处理架构Hadoop #83

Open Genluo opened 4 years ago

Genluo commented 4 years ago

Hadoop 是一个开源的、可运行于大规模集群上的分布式计算平台,它实现了 MapReduce 计算模型和分布式文件系统 HDFS 等功能,在业内得到了广泛的应用,同时也成为大数据的代名词。借助于 Hadoop,程序员可以轻松地编写分布式并行程序,将其运行于计算机集群上,完成海量数据的存储与处理分析。

概述

简介

Hadoop 是 Apache 软件基金会旗下的一个开源分布式计算平台,为用户提供了系统底层细节 透明的分布式基础架构。Hadoop 是基于 Java 语言开发的,具有很好的跨平台特性,并且可以部 署在廉价的计算机集群中。Hadoop 的核心是分布式文件系统(Hadoop Distributed File System, HDFS)和 MapReduce。HDFS 是针对谷歌文件系统(Google File System,GFS)的开源实现,是 面向普通硬件环境的分布式文件系统,具有较高的读写速度、很好的容错性和可伸缩性,支持大 规模数据的分布式存储,其冗余数据存储的方式很好地保证了数据的安全性。MapReduce 是针对 谷歌 MapReduce 的开源实现,允许用户在不了解分布式系统底层细节的情况下开发并行应用程 序,采用 MapReduce 来整合分布式文件系统上的数据,可保证分析和处理数据的高效性。借助于 Hadoop,程序员可以轻松地编写分布式并行程序,将其运行于廉价计算机集群上,完成海量数据 的存储与计算。

发展历史

Hadoop 最初是由 Apache Lucene 项目的创始人 DougCutting 开发的文本搜索库。Hadoop 源自 2002 年的 Apache Nutch 项目——一个开源的网络搜索引擎并且也是 Lucene 项目的一部分。在 2002 年的时候,Nutch 项目遇到了棘手的难题,该搜索引擎框架无法扩展到拥有数十亿网页的网络。而就在一年以后的 2003 年,谷歌公司发布了分布式文件系统 GFS 方面的论文,可以解决大规模数据存储的问题。 于是,在 2004 年,Nutch 项目也模仿 GFS 开发了自己的分布式文件系统(Nutch Distributed File System,NDFS),也就是 HDFS 的前身。

2004 年,谷歌公司又发表了另一篇具有深远影响的论文,阐述了 MapReduce 分布式编程思 想。2005 年,Nutch 开源实现了谷歌的 MapReduce。到了 2006 年 2 月,Nutch 中的 NDFS 和 MapReduce 开始独立出来,成为 Lucene 项目的一个子项目,称为 Hadoop,同时 Doug Cutting 加盟雅虎。2008 年 1 月,Hadoop 正式成为 Apache 顶级项目,Hadoop 也逐渐开始被雅虎之外的其他公司使用。2008 年 4 月,Hadoop 打破世界纪录,成为最快排序 1 TB 数据的系统,它采用一个由 910 个节点构成 的集群进行运算,排序时间只用了 209s。在 2009 年 5 月,Hadoop 更是把 1 TB 数据排序时间缩 短到 62 s。Hadoop 从此声名大噪,迅速发展成为大数据时代最具影响力的开源分布式开发平台, 并成为事实上的大数据处理标准。

特性

Hadoop 是一个能够对大量数据进行分布式处理的软件框架,并且是以一种可靠、高效、可伸 缩的方式进行处理的,它具有以下几个方面的特性。

版本情况

Apache Hadoop 版本分为两代,第一代 Hadoop 称为 Hadoop 1.0,第二代 Hadoop 称为 Hadoop 2.0。第一代 Hadoop 包含 0.20.x、0.21.x 和 0.22.x 三大版本,其中,0.20.x 最后演化成 1.0.x,变成 了稳定版,而 0.21.x 和 0.22.x 则增加了 HDFS HA 等重要的新特性。第二代 Hadoop 包含 0.23.x 和 2.x 两大版本,它们完全不同于 Hadoop 1.0,是一套全新的架构,均包含 HDFS Federation 和 YARN(Yet Another Resource Negotiator)两个系统

生态系统

image-20190616224645500

1、HDFS

Hadoop 分布式文件系统(Hadoop Distributed File System,HDFS)是 Hadoop 项目的两大核 心之一,是针对谷歌文件系统(Google File System,GFS)的开源实现。HDFS 具有处理超大数 据、流式处理、可以运行在廉价商用服务器上等优点。

2、HBase

HBase 是一个提供高可靠性、高性能、可伸缩、实时读写、分布式的列式数据库,一般采用 HDFS 作为其底层数据存储。HBase 是针对谷歌 BigTable 的开源实现,二者都采用了相同的数据 模型,具有强大的非结构化数据存储能力。HBase 与传统关系数据库的一个重要区别是,前者采 用基于列的存储,而后者采用基于行的存储。HBase 具有良好的横向扩展能力,可以通过不断增 加廉价的商用服务器来增加存储能力。

3、 MapReduce

Hadoop MapReduce 是针对谷歌 MapReduce 的开源实现。MapReduce 是一种编程模型,用于大规模数据集(大于 1 TB)的并行运算,它将复杂的、运行于大规模集群上的并行计算过程高度地抽象到了两个函数——Map 和 Reduce 上,并且允许用户在不了解分布式系统底层细节的情况下开发并行应用程序。MapReduce 的核心思想就是“分而治之”,它把输入的数据集切分为若干独立的数据块,分发给一个主节点管理下的各个分节点来共同并行完成;最后,通过整合各个节点的中间结果得到最终结果。

4、HIve

Hive 是一个基于 Hadoop 的数据仓库工具,可以用于对 Hadoop 文件中的数据集进行数据整 理、特殊查询和分析存储。Hive 的学习门槛较低,因为它提供了类似于关系数据库 SQL 语言的 查询语言——Hive QL,可以通过 Hive QL 语句快速实现简单的 MapReduce 统计,Hive 自身可以 将 Hive QL 语句转换为 MapReduce 任务进行运行,而不必开发专门的 MapReduce 应用,因而十 分适合数据仓库的统计分析。

5、Pig

Pig 是一种数据流语言和运行环境,适合于使用 Hadoop 和 MapReduce 平台来查询大型半结构化数据集,采用 Pig 要比 MapReduce 具有明显的优势,前者只需要编写一个简单的脚本在集群中自动并行处理与分发,而后者则需要编写一个单独的 MapReduce 应用程序。

6、Mahout

Mahout 是 Apache 软件基金会旗下的一个开源项目,提供一些可扩展的机器学习领域经典算 法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout 包含许多实现,包括聚 类、分类、推荐过滤、频繁子项挖掘。此外,通过使用 Apache Hadoop 库,Mahout 可以有效地 扩展到云中。

7、Zookeeper

Zookeeper 是针对谷歌 Chubby 的一个开源实现,是高效和可靠的协同工作系统,提供分布式 锁之类的基本服务(如统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等), 用于构建分布式应用,减轻分布式应用程序所承担的协调任务。Zookeeper 使用 Java 编写,很容 易编程接入,它使用了一个和文件树结构相似的数据模型,可以使用 Java 或者 C 来进行编程接入。

8、Flume

Flume 是 Cloudera 提供的一个高可用的、高可靠的、分布式的海量日志采集、聚合和传输的 系统。Flume 支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume 提供对数据 进行简单处理并写到各种数据接受方的能力。

9、Sqoop

Sqoop 是 SQL-to-Hadoop 的缩写,主要用来在 Hadoop 和关系数据库之间交换数据,可以改进数据的互操作性。通过 Sqoop 可以方便地将数据从 MySQL、Oracle、PostgreSQL 等关系数据库中导入 Hadoop(可以导入 HDFS、HBase 或 Hive),或者将数据从 Hadoop 导出到关系数据库,使得传统关系数据库和 Hadoop 之间的数据迁移变得非常方便。Sqoop 主要通过 JDBC(Java DataBaseConnectivity)和关系数据库进行交互,理论上,支持 JDBC 的关系数据库都可以使 Sqoop 和 Hadoop进行数据交互。Sqoop 是专门为大数据集设计的,支持增量更新,可以将新记录添加到最近一次导出的数据源上,或者指定上次修改的时间戳。

10、Ambari

Apache Ambari 是一种基于 Web 的工具,支持 Apache Hadoop 集群的安装、部署、配置和管理