大数据技术原理与应用 - (2). 大数据处理框架 Hadoop

大数据技术原理与应用 - (2). 大数据处理框架 Hadoop

【第一篇】 - 大数据基础, 《大数据技术原理与应用, 林子雨》

本篇介绍大数据 (Big Data) 的基本概念、影响、应用领域等,还介绍了大数据处理框架 Hadoop。

第二章介绍了 Hadoop 特性、应用现状,还介绍了 Hadoop 生态系统及其各个组件。

Hadoop 概述

Hadoop 简介

  • Hadoop是Apache软件基金会旗下的一个开源分布式计算平台,为用户提供了系统底层细节透明的分布式基础架构
  • Hadoop是基于Java语言开发的,具有很好的跨平台特性,并且可以部署在廉价的计算机集群中
  • Hadoop的核心是分布式文件系统HDFS(Hadoop Distributed File System)和MapReduce

Hadoop 特性

  • 高可靠性。采用冗余数据存储方式,即使一个副本发生故障,其他副本也可以保证正常对外提供服务。
  • 高效性。Hadoop 采用分布式存储分布式处理两大核心技术,能够高效地处理BP级数据。
  • 高可扩展性。Hadoop 的设计目标是可以高效稳定地运行在廉价的计算机集群上,可以扩展到数以千计的计算机节点上。
  • 高容错性。采用荣誉存储方式,自动保存数据的多个副本,并且能够自动将失败的任务进行重新分配。
  • 成本低。 (硬件上可以采用廉价的机器)
  • 运行在Linux平台上。
  • 支持多种编程语言

Hadoop 应用现状


Hadoop在企业中的应用架构
  • 其中 Mahout 提供了许多 Data Mining 的算法实现。

Hadoop 版本


Apache Hadoop 版本分为两代

Hadoop 1.0 vs 2.0

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 各个发行版本

选择因素

  1. 是否开源 (即是否免费)
  2. 是否稳定版
  3. 是否经实践检验
  4. 是否有强大的社区支持

不同发行版本比较

厂商名称 开放性
易用性
平台功能
性能
本地支持
总体评价
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生态系统。


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)的并行运算,它将并行计算过程高度地抽象到两个函数 —— MapReduce 上。

核心思想 —— 分而治之

  • 把输入的数据集切分为若干独立的数据块,分发给一个主节点管理下的各个分节点来共同并行完成;最后,通过整合各个节点的中间结果得到最终结果。

适用场景:

  • 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] 大数据技术原理与应用 - 林子雨


Comments

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×