1、主要组件及其关系

Hadoop教程二 Hadoop生态系统

 

1.1、HDFS

HDFS ( Hadoop 分布式文件系统〉源自于Goog le 的GFS 论文, 发表于2003 年10月, H D FS 是GFS 的实现版。HDFS 是H adoop 体系中数据存储管理的基础,它是一个高度容错的系统,能检测和应对硬件故障,在低成本的通用硬件上运行。HDFS 简化了文件的一致性模型,通过流式数据访问,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。HDFS 提供一次写入多次读取的机制,数据以块的形式,同时分布存储在集群的不同物理机器上。

 

1.2、MapReduce

MapReduce (分布式计算框架)源自于Google 的MapReduce 论文,发表于2004 年12 月, Hadoop MapReduce 是Google MapReduce 克隆版。MapReduce 是一种分布式计算模型,用以进行海量数据的计算。它屏蔽了分布式计算框架细节,将计算抽象成Map 和Reduce 两部分,其中Map 对数据集上的独立元素进行指定的操作,生成键-值对形式中间结果。Reduce 则对中间结果中相同“键”的所有“值”进行规约,以得到最终结果。MapReduce 非常适合在大量计算机组成的分布式并行环境里进行数据处理。

 

1.3、HBase


HBase (分布式列存数据库)源自Google 的BigTable 论文,发表于20 06 年11 月,HBase 是Google BigTable 的实现。HBase 是一个建立在HDFS 之上,面向结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。HBase 采用了BigTable的数据模型,即增强的稀疏排序映射表( KeyNalue ), 其中,键由行关键字、列关键字和时间戳构成。HBase 提供了对大规模数据的随机、实时读写访问,同时, HBase 中保存的数据可以使用Map Reduce 来处理,它将数据存储和并行计算完美地结合在一起。

 

1.4、zookeeper


ZooKeeper (分布式协作服务)源自Google 的Chubby 论文,发表于2 006 年11 月,Zoo Keeper 是Chubby 实现版。Zoo Keeper 的主要目标是解决分布式环境下的数据管理问题,如统一命名、状态同步、集群管理、配置同步等。Hadoop 的许多组件依赖于Zoo Keeper ,它运行在计算机集群上面,用于管理Hadoop 操作。

 

1.5、Hive


Hive (数据仓库)由Facebook 开源, 最初用于解决海宜结构化的日志数据统计问题。Hive 定义了一种类似SQL 的查询语言C HQL) , 将SQL 转化为MapReduce 任务在Hadoop 上执行,通常用于离线分析。HQL 用于运行存储在Hadoop 上的查询语旬, Hive使不熟悉Map Reduce 开发人员也能编写数据查询语旬,然后这些语句被翻译为Ha doop 上面的Map Reduce 任务。

 

1.6、Pig


Pig ( ad-hoc 脚本)由yahoo 开源, 其设计动机是提供一种基于MapReduce 的ad-hoc(计算在query 时发生〉数据分析工具。Pig 定义了一种数据流语言一- Pig Latin ,它是Map Reduce 编程的复杂性的抽象, Pig 平台包括运行环境和用于分析Ha doop 数据集的脚本语言( Pig Latin )。其编译器将Pig Latin 翻译成MapReduce 程序序列,将脚本转换为Map Reduce 任务在Hadoop 上执行, 通常用于进行离线分析。

 

1.7、Sqoop


Sqoop (数据ETL/ 同步工具)是SQL-to-Hadoop 的缩写, 主要用于传统数据库和Hadoop 之前传输数据。数据的导入和导出本质上是MapReduc e 程序,充分利用了M R 的并行化和容错性。Sqoop 利用数据库技术描述数据架构,用于在关系数据库、数据仓库和Hadoop 之间转移数据。

 

1.8、Flume


Flume (日志收集工具)是Cloudera 开源的日志收集系统,具有分布式、高可靠、高容错、易于定制和扩展的特点。它将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在Flume 中定制数据发送方,从而支持收集各种不同协议数据。同时, F lume 数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。此外, F lume 还具有能够将日志写往各种数据目标(可定制)的能力。总的来说, F lume 是一个可扩展、适合复杂环境的海量日志收集系统,当然也可以用于收集其他类型数据

 

1.9、Mahout


Mahout (数据挖掘算法库〉起源于2 008 年,最初是Apache Lucent 的子项目,它在极短的时间内取得了长足的发展,现在是Apache 的顶级项目。Mahout 的主要目标是创建一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便、快捷地创建智能应用程序。Ma hout 现在己经包含了聚类、分类、推荐引擎(协同过滤)和频繁集挖掘等广泛使用的数据挖掘方法。除了算法, Mahout 还包含数据的输入/输出工具、与其他存储系统(如数据库、M ongoDB 或Cass andra ) 集成的数据挖掘支持架构。

 

1.10、YARN


YARN (分布式资源管理器)是下一代MapReduce ,即MRv2 ,是在第一代Map Reduce 基础上演变而来的,主要是为了解决原始Hadoop 扩展性较差,不支持多计算框架而提出的。YARN 是下一代Hadoop 计算平台,是一个通用的运行时框架,用户可以编写自己的计算框架,在该运行环境中运行。

 

1.11、Mesos


Mesos (分布式资源管理器)是一个诞生于UC Berkeley 的研究项目,现已成为Apache 项目,当前有一些公司使用Mesos 管理集群资源,如Twitter 。与Y成N 类似, Me sos是一个资源统一管理和调度的平台,同样支持诸如扎眼、steaming 等多种运算框架。

 

1.12、Tachyon


Tachyon (意为超光速粒子〉是以内存为中心的分布式文件系统,拥有高性能和容错能力,能够为集群框架(如Spar k 、MapReduce )提供可靠的内存级速度的文件共享服务。Tachyon 诞生于UC Berkeley 的AMPLab 。

 

1.13、Spark


Spark (内存DAG 计算模型)是一个Apache 项目,被标榜为“快如闪电的集群计算”,它拥有一个繁荣的开源社区,并且是目前最活跃的Apache 项目。最早Spark 是UCBerkeley AMP Lab 所开源的类Hadoop MapReduce 的通用并行计算框架, Spark 提供了一个更快、更通用的数据处理平台。和Hadoop 相比, Spark 可以让你的程序在内存中运行时速度提升100 倍,或者在磁盘上运行时速度提升10 倍。

 

1.14、Spark GraphX


Spark GraphX 最先是伯克利AMP Lab 的一个分布式图计算框架项目, 目前整合在Spark 运行框架中,为其提供BSP 大规模并行图计算能力。

 

1.15、Spark MLlib


Spark MLlib 是一个机器学习库, 它提供了各种各样的算法,这些算法用来在集群上针对分类、回归、聚类、协同过滤等。

 

1.16、Kafka


Kafka 是Linkedin 于2010 年12 月开源的消息系统,主要用于处理活跃的流式数据。活跃的流式数据在Web 网站应用中非常常见, 这些数据包括网站的PY ( Page View ) , 用户访问了什么内容,搜索了什么内容等。这些数据通常以日志的形式记录下来,然后每隔一段时间进行一次统计处理。

 

1.17、Apache Phoenix


Apache Phoenix 是HBase 的SQL 驱动C HBase SQL 接口), Phoenix 使得HB ase 支持通过JDBC 的方式进行访问, 并将你的SQL 查询转换成HBase 的扫描和相应的动作。

 

1.18、Apache Arnbari


Apache Arnbari 是安装部署配置管理工具, 其作用就是创建、管理、监视Hadoop 的集群, 是为了让Hadoop 以及相关的大数据软件更容易使用的一个Web 工具。

 

2、数据采集

2.1、结构化数据采集工具

在Hadoop 生态圈, Sqoop 作为Apache 顶级项目,主要用来在Hadoop 和关系数据库中传递数据。

通过Sqoop , 可以方便地将数据从关系数据库导入HDFS 或HBASE 和HIVE 中, 或者将数据从HDFS 导出到关系数据库。

Sqoop 架构非常简单, 它主要通过JDBC 和关系数据库进行交互。理论上讲, 支持JDBC 的数据库都可以使用Sqoop 和HDFS 进行数据交互。


Sqoop 数据导入具有以下特点:

  • 支持文本文件、avrodatafile 、SequenceFiles
  • 支持数据追加,通过apend 指定
  • 支持table 列选取, 支持数据选取( wh ere ),和table 一起使用
  • 支持数据选取,如读入多表join 后的数据,不可以和table 同时使用
  • 支持map 数定制
  • 支持压缩( compress ) 
  • 支持将关系数据库中的数据导入到Hive ( Hive-impo口)、HBase ( hbase-table )

 

Sqoop数据导入导出架构图:

Hadoop教程二 Hadoop生态系统

 

 

2.2、日志文件采集工具与技术

日志收集工具:

目前常用的开源日志收集系统有Apache Flume 、Scribe 等。

Flume 是由Cloudera 开发的一个分布式、可靠和高可用的海量日志聚合系统,支持在系统中定制各类数据发送方,用于收集数据: 同时, Flume 提供对数据进行简单处理,并写入各种数据接收方(可定制)的能力。
Flume 的工作流程是先收集数据源的数据,再将数据发送到接收方。为了保证这个过程的可靠性,在送到接收方之前,会先对数据进行缓存, 等到数据真正到达接收方后,才会删除自己之前缓存的数据。

数据分发工具kafka:

Flume 收集的数据和进行日志处理的系统之间可能存在多对多的关系,为了解祸合保证数据的传输延迟,可以选用Kafka 作为消息中间层进行日志中转分发。

Flume 对于源数据流的发送速度不太稳定,有时快有时慢,而且当F lume 的数据流发送速度过快时(这种情况很常见),会导致下游消费系统来不及处理,这样会使得有一部分数据可能会被丢弃掉。Kafka 在这两者之间可以扮演一个缓存的角色,而且数据是写入到磁盘上的,保证消息数据在系统正常启动/关闭时不会丢失

 

Flume与Kafka区别:

Flume主要是被设计为往HDFS、HBase发送数据,它对HDFS有特殊的优化,并且集成了Hadoop的安全特性

如果数据被设计给Hadoop用,则用Flume;如果数据被多个系统消费,则用Kafka

 

 

3、大数据存储相关技术

 

3.1、NoSQL

列式存储数据库

key-value数据库

文档型数据库

图数据库

 

3.2、分布式文件存储系统

分布式存储与传统的网络存储并不完全一样;

传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,不能满足大规模存储应用的需要;
分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展;
在当前的云计算领域, Goo g le 的GFS 和Hado op 开发的开源系统HD FS 是比较流行的两种云计算分布式存储系统

 

3.2.1、HDFS

Hadoop 的出现解决了传统的单机处理模式受到机器内存、计算能力限制的问题,利用集群的存储和计算能力为海量数据提供可靠的存储和处理。
Hadoop 是由Apache 基金会开发的一个开源的分布式系统基础架构,提供了一系列数据并行处理工具和应用解决方案,并且具有高度可伸缩性,可以根据数据规模和需求动态地增加或删除节点。用户可以在不了解其分布式底层细节的情况下,方便地在普通硬件上架设自己的大规模集群系统,开发分布式程序,从而充分地利用集群系统的能力进行高速运算和存储

 

HDFS 设计思路有以下几点:

  • 硬件错误是常态。在数据中心,硬件异常应被视为常态而非异常状态。在一个大数据环境下, H DFS 集群由大量物理机器构成,每台机器由很多硬件组成,因为某一个组件出错而出错的几率是很高的,因此HDFS 架构的一个核心设计目标就是能够快速检测硬件失效井快速从失效中恢复工作
  • 流式访问要求。在HDFS 集群上运行的应用要求流式访问数据, HDFS 设计为适用于批处理而非交互式处理,因此在架构设计时更加强调高吞吐量而非低延迟
  • 大数据集。假定HDFS 的典型文件大小是GB 甚至TB 大小的, HDFS 设计重点是支持大文件,支持通过机器数量扩展以支持更大的集群,单个集群应提供海量文件数量支持
  • 简单一致性模型。HDFS 提供的访问模型是一次写入多次读取的模型。写入后文件保持原样不动简化了数据一致性模型,并且对应用来说,它能得到更高的吞吐量,支持文件追加
  • 移动计算比移动数据代价更低。HDFS 利用了计算机系统的数据本地化原理,认为数据离CPU 越近,性能更高。HDFS 提供接口让应用感知数据的物理存储位置
  • 异构软硬件平台兼容。HDFS 被设计成能方便地从一个平台迁移到另外一个平台

 

 

 

 

 

3.2.2、分布式内存文件存储Tachyon

 

 

 

 

 

 

 

 

 

 

 

 

相关文章: