大数据技术原理与应用 - (2). 大数据处理框架 Hadoop
【第一篇】 - 大数据基础, 《大数据技术原理与应用, 林子雨》
本篇介绍大数据 (Big Data) 的基本概念、影响、应用领域等,还介绍了大数据处理框架 Hadoop。
- 第1章 - 大数据概述
- 第2章 - 大数据处理框架 Hadoop
第二章介绍了 Hadoop 特性、应用现状,还介绍了 Hadoop 生态系统及其各个组件。
Hadoop 概述
Hadoop 简介
- Hadoop是Apache软件基金会旗下的一个开源分布式计算平台,为用户提供了系统底层细节透明的分布式基础架构
- Hadoop是基于Java语言开发的,具有很好的跨平台特性,并且可以部署在廉价的计算机集群中
- Hadoop的核心是分布式文件系统HDFS(Hadoop Distributed File System)和MapReduce
Hadoop 特性
- 高可靠性。采用冗余数据存储方式,即使一个副本发生故障,其他副本也可以保证正常对外提供服务。
- 高效性。Hadoop 采用分布式存储和分布式处理两大核心技术,能够高效地处理BP级数据。
- 高可扩展性。Hadoop 的设计目标是可以高效稳定地运行在廉价的计算机集群上,可以扩展到数以千计的计算机节点上。
- 高容错性。采用荣誉存储方式,自动保存数据的多个副本,并且能够自动将失败的任务进行重新分配。
- 成本低。 (硬件上可以采用廉价的机器)
- 运行在Linux平台上。
- 支持多种编程语言
Hadoop 应用现状
- 其中
Mahout
提供了许多 Data Mining 的算法实现。
Hadoop 版本
Hadoop 1.0 到 2.0 的变化:
- 由 HDFS, MapReduce 和 YARN 三个分支构成
- HDFS: NameNode Federation, High Availability (HA)
- MapReduce: 运行在 YARN 上的MR计算框架
Hadoop 1.0 中的问题:
- HDFS:
- NameNode 单点故障,难以应用于在线场景
- NameNode 压力过大,内存受限,影响系统扩展性
- MapReduce:
- JobTracker 访问压力过大,影响系统扩展性
- 难以支持除 MapReduce 外的计算框架,如 Spark, Storm 等
Hadoop 2.0 解决方案:
- HDFS 2.x:
- HDFS HA: 解决单点故障。采用主备 NameNode 策略,如果主 NameNode 发生故障,则切换到备 NameNode 上 (非热备份)。
- NN Federation: 解决内存受限。能够水平扩展,支持多个 NameNode, 每个 NameNode 分管一部分目录,所有 NameNode 共享所有 DataNode 存储的数据。
- MapReduce:
- 2.0后,MapReduce 只负责计算
- 资源调度分离出 YARN 来负责
Hadoop 各个发行版本
选择因素:
- 是否开源 (即是否免费)
- 是否稳定版
- 是否经实践检验
- 是否有强大的社区支持
不同发行版本比较:
厂商名称 | 开放性 | 易用性 |
平台功能 | 性能 |
本地支持 |
总体评价 |
---|---|---|---|---|---|---|
Apache | 完全开源,Hadoop 托管在 Apache 社区里 | 安装: 2 使用: 2 维护: 2 |
Apache 是标准的 Hadoop 平台,其他都是在此基础上改进 | 2 | 无 | 2 |
Cloudera | 与 Apache 功能同步,部分开源 | 安装: 5 使用: 5 维护: 5 |
有自主研发产品,如 impala, navigator 等 | 4.5 | 2014年进入中国, 上海 | 4.5 |
Hortonworks | 与 Apache 功能同步,完全开源 | 安装: 4.5 使用: 5 维护: 5 |
是 Apache Hadoop 平台最大贡献者,如 Tez | 4.5 | 无 | 4.5 |
MapR | 在 Apache 基础上修改 | 安装: 4.5 使用: 5 维护: 5 |
在 Apache 平台上优化了很多,形成自身产品 | 5 | 无 | 3.5 |
星环 | 核心组件与 Apache 同步,底层优化多,完全封闭的平台 | 安装: 5 使用: 4 维护: 4 |
有自主 Hadoop 产品,如 Inceptor, Hyperbase | 4 | 本地厂商 | 4 |
- 通常商业公司的版本性能会更好,也会更好用
- 学生通常使用开源、免费的 Apache Hadoop
- 中国国内公司的可能还需要考虑是否能获得本地支持,例如国内厂商: 星环
Hadoop 项目结构
Hadoop的项目结构不断丰富发展,已经形成一个丰富的Hadoop生态系统。
组件 | 功能 |
---|---|
HDFS | 分布式文件系统 |
MapReduce | 分布式并行编程模型 |
YARN | 资源管理和调度器 |
Tez | 运行在YARN之上的下一代Hadoop查询处理框架 |
Hive | Hadoop上的数据仓库 |
HBase | Hadoop上的非关系型的不是数据库 |
Pig | 一个基于Hadoop的大规模数据分析平台,提供类似SQL的查询语言Pig Latin |
Sqoop | 用于在Hadoop与传统数据库之间进行数据传递 |
Oozie | Hadoop上的工作流管理系统 |
Zookeeper | 提供分布式协调一致性服务 |
Storm | 流计算框架 |
Flume | 一个高可用,高可靠,分布式的海量日志采集、聚合和传输的系统 |
Ambari | Hadoop快速部署工具,支持Apache Hadoop集群的供应、管理和监控 |
Kafka | 一种高吞吐量的根不是发布订阅消息系统,可以处理消费者规模的网络的所有动作流数据 |
Spark | 类似于Hadoop MapReduce的通用并行框架 |
HDFS
Hadoop 分布式文件系统 (Hadoop Distributed File System, HDFS) 是 Hadoop 项目的两大核心之一,是针对谷歌文件系统 (Google File System, GFS) 的开源实现。HDFS 具有处理超大数据、流式处理、可以运行在廉价商用服务器上等优点。
- 容错: HDFS 再设计之初就是考虑再廉价机器上运行,因此设计上把设备故障作为常态来考虑,可以保证部分硬件发生故障的情况下仍然能够保证文件系统的可用。
- 高吞吐率: 为有大量数据访问的应用提供高吞吐量的支持。
- 大文件存储: 支持存储TB-PB级别的数据。
适用场景:
- HDFS适合用于:大文件存储,流失数据访问。
- HDFS不适合用于:大量小文件处理,随机写入,低延迟读写。
HBase
HBase 是一个提供高可靠性、可伸缩、实时读写、分布式的列式数据库,一般采用 HDFS 作为其底层数据存储。HBase 是针对谷歌 BigTable 的开源实现,二者采用相同的数据模型,具有强大的非结构化数据存储能力。
HBase 与传统数据库的区别:
- HBase 是基于列的存储
- 传统关系型数据库通常是基于行的存储
MapReduce
Hadoop MapReduce 是针对谷歌 MapReduce 的开源实现。MapReduce 是一种编程模型,用处大规模数据集(大于1TB)的并行运算,它将并行计算过程高度地抽象到两个函数 —— Map 和 Reduce 上。
核心思想 —— 分而治之
- 把输入的数据集切分为若干独立的数据块,分发给一个主节点管理下的各个分节点来共同并行完成;最后,通过整合各个节点的中间结果得到最终结果。
适用场景:
- MapReduce适合用于:大规模数据离线批处理,子任务相对独立。
- MapReduce不适合用于:实时交互计算,流失计算、实时分析,子任务相互依赖。
Hive
Hive 是一个基于 Hadoop 的数据仓库工具,可以用于对 Hadoop 文件中的数据进行数据整理、特殊查询和分析存储。Hive 提供了类似关系型数据库 SQL 语言的查询语句 —— Hive QL,学习门槛较低。Hive 自身可以将 Hive QL 转换成 MapReduce 任务进行运行,不必开发专门的 MapReduce 应用。
Hive适合数据仓库的统计分析:
- 数据汇总:每天/每周用户点击数,点击排行。
- 非实时分析:日子分析,统计分析。
- 数据挖掘:用户行为分析,兴趣分析、区域展示。
Pig
Pig 是一种数据流语言和运行环境,适合于使用 Hadoop 和 MapReduce 平台来查询大型半结构化数据集。
Pig 包含两部分:
- 用于描述数据流的语言: Pig Latin
- 用于运行 Pig Latin 程序的执行环境 。一个是本地的单 JVM 执行环境,一个就是在 Hadoop 集群上的分布式执行环境。
Pig与Hive的区别?
Pig 与 Hive 作为一种高级数据语言,均运行于 HDFS 之上,是 Hadoop 上层的衍生架构,用于简化 Hadoop 任务,并对 MapReduce 进行一个更高层次的封装。Pig与Hive的区别如下:
- Pig是一种面向过程的数据流语言;Hive是一种数据仓库语言,并提供了完整的sql查询功能。
- Pig更轻量级,执行效率更快,适用于实时分析;Hive适用于离线数据分析。
- Hive查询语言为Hql,支持分区;Pig查询语言为Pig Latin,不支持分区。
- Hive支持JDBC/ODBC;Pig不支持JDBC/ODBC。
- Pig适用于半结构化数据(如:日志文件);Hive适用于结构化数据。
Mahout
Mahout 是 Apache 软件基金会 (Apache Software Foundation, AFS) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法
的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。
- Mahout 是一个算法库,提供了许多算法 api。
- Mahout 包含许多算法实现,包括聚类、分类、推荐过滤、频繁子项挖掘。
- 通过使用 Apache Hadoop 库,Mahout 可以有效地扩展到Hadoop集群。
Zookeeper
Zookeeper 是针对谷歌 Chubby 的一个开源实现。是搞笑和可靠的协同工作系统,提供分布式锁之类的基本服务(如统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等),用于构建分布式应用,减轻分布式应用程序所承担的协调任务。
Flume
Flume 是 Cloudera 提供的一个高可用的、高可靠的、分布式的海量日志采集、聚合和传输的系统。它将大批量的不同数据源的日志数据收集、聚合、移动到数据中心(HDFS)进行存储的系统。即 Flume 是实时采集日志的数据采集引擎。
Flume 特性:
- 可靠性。 当节点出现故障时,日志能够被传送到其他节点上而不会丢失。Flume提供了三种级别的可靠性保障,从强到弱依次分别为:
- End-to-end (收到数据 agent 首先将 event 写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送)
- Store on failure (这也是 scribe 采用的策略,当数据接收方 crash 时,将数据写到本地,待恢复后,继续发送)
- Best effort (数据发送到接收方后,不会进行确认)
- 可扩展性。Flume 采用了三层架构,分别为 agent, collector 和 storage,每一层均可以水平扩展。其中,所有 agent 和 collector 由 master 统一管理,这使得系统容易监控和维护,且 master 允许有多个(使用 ZooKeeper 进行管理和负载均衡),这就避免了单点故障问题。
Flume 的优势:
- 可以高速采集数据,采集的数据能够以想要的文件格式及压缩方式存储在 HDFS 上。
- 事务功能保证了数据在采集的过程中数据不丢失。
- 部分 Source 保证了 Flume 挂了以后重启依旧能够继续在上一次采集点采集数据,真正做到数据零丢失。
Sqoop
Sqoop 是 SQL-to-Hadoop 的缩写,主要用来在 Hadoop 和传统关系型数据库之间交换数据,可以改进数据的互操作性。通过 Sqoop 可以实现关系型数据库(如 MySQL, Oracle, PostgreSQL 等)和 Hadoop 之间数据迁移 (即互相导入、导出)。
Reference
[1] 大数据技术原理与应用 - 林子雨
- Title: 大数据技术原理与应用 - (2). 大数据处理框架 Hadoop
- Author: Zhanhang (Matthew) ZENG
- Link: https://zengzhanhang.com/2020/05/17/intro2BigData2/
- Released Date: 2020-05-17
- Last update: 2020-12-29
- Statement: All articles in this blog, unless otherwise stated, are based on the CC BY-NC-SA 4.0 license.