阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Hadoop生态系统的详细介绍

113次阅读
没有评论

共计 6442 个字符,预计需要花费 17 分钟才能阅读完成。

1、Hadoop 生态系统概况

Hadoop 是一个能够对大量数据进行分布式处理的软件框架。具有可靠、高效、可伸缩的特点。

Hadoop 的核心是 HDFS 和 MapReduce,hadoop2.0 还包括 YARN。

下图为 hadoop 的生态系统:

Hadoop 生态系统的详细介绍

2、HDFS(Hadoop 分布式文件系统)

源自于 Google 的 GFS 论文,发表于 2003 年 10 月,HDFS 是 GFS 克隆版。

是 Hadoop 体系中数据存储管理的基础。它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。HDFS 简化了文件的一致性模型,通过流式数据访问,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。

HDFS 这一部分主要有一下几个部分组成:

(1)、Client:切分文件;访问 HDFS;与 NameNode 交互,获取文件位置信息;与 DataNode 交互,读取和写入数据。

(2)、NameNode:Master 节点,在 hadoop1.X 中只有一个,管理 HDFS 的名称空间和数据块映射信息,配置副本策略,处理客户端请求。对于大型的集群来讲,Hadoop1.x 存在两个最大的缺陷:1)对于大型的集群,namenode 的内存成为瓶颈,namenode 的扩展性的问题;2)namenode 的单点故障问题。

针对以上的两个缺陷,Hadoop2.x 以后分别对这两个问题进行了解决。对于缺陷 1)提出了 Federation namenode 来解决,该方案主要是通过多个 namenode 来实现多个命名空间来实现 namenode 的横向扩张。从而减轻单个 namenode 内存问题。

针对缺陷 2),hadoop2.X 提出了实现两个 namenode 实现热备 HA 的方案来解决。其中一个是处于 standby 状态,一个处于 active 状态。

(3)、DataNode:Slave 节点,存储实际的数据,汇报存储信息给 NameNode。

(4)、Secondary NameNode:辅助 NameNode,分担其工作量;定期合并 fsimage 和 edits,推送给 NameNode;紧急情况下,可辅助恢复 NameNode,但 Secondary NameNode 并非 NameNode 的热备。

目前,在硬盘不坏的情况,我们可以通过 secondarynamenode 来实现 namenode 的恢复。

3、Mapreduce(分布式计算框架)

源自于 google 的 MapReduce 论文,发表于 2004 年 12 月,Hadoop MapReduce 是 google MapReduce 克隆版。MapReduce 是一种计算模型,用以进行大数据量的计算。其中 Map 对数据集上的独立元素进行指定的操作,生成键 - 值对形式中间结果。Reduce 则对中间结果中相同“键”的所有“值”进行规约,以得到最终结果。MapReduce 这样的功能划分,非常适合在大量计算机组成的分布式并行环境里进行数据处理。

MapReduce 计算框架发展到现在有两个版本的 MapReduce 的 API,针对 MR1 主要组件有以下几个部分组成:

(1)、JobTracker:Master 节点,只有一个,主要任务是资源的分配和作业的调度及监督管理,管理所有作业,作业 / 任务的监控、错误处理等;将任务分解成一系列任务,并分派给 TaskTracker。

(2)、TaskTracker:Slave 节点,运行 Map Task 和 Reduce Task;并与 JobTracker 交互,汇报任务状态。

(3)、Map Task:解析每条数据记录,传递给用户编写的 map(), 并执行,将输出结果写入本地磁盘。

(4)、Reducer Task:从 Map Task 的执行结果中,远程读取输入数据,对数据进行排序,将数据按照分组传递给用户编写的 reduce 函数执行。

在这个过程中,有一个 shuffle 过程,对于该过程是理解 MapReduce 计算框架是关键。该过程包含 map 函数输出结果到 reduce 函数输入这一个中间过程中所有的操作,称之为 shuffle 过程。在这个过程中,可以分为 map 端和 reduce 端。

Map 端:

1)输入数据进行分片之后,分片的大小跟原始的文件大小、文件块的大小有关。每一个分片对应的一个 map 任务。

2)map 任务在执行的过程中,会将结果存放到内存当中,当内存占用达到一定的阈值(这个阈值是可以设置的)时,map 会将中间的结果写入到本地磁盘上,形成临时文件这个过程叫做溢写。

3)map 在溢写的过程中,会根据指定 reduce 任务个数分别写到对应的分区当中,这就是 partition 过程。每一个分区对应的是一个 reduce 任务。并且在写的过程中,进行相应的排序。在溢写的过程中还可以设置 conbiner 过程,该过程跟 reduce 产生的结果应该是一致的,因此该过程应用存在一定的限制,需要慎用。

4)每一个 map 端最后都只存在一个临时文件作为 reduce 的输入,因此会对中间溢写到磁盘的多个临时文件进行合并 Merge 操作。最后形成一个内部分区的一个临时文件。

Reduce 端:

1)首先要实现数据本地化,需要将远程节点上的 map 输出复制到本地。

2)Merge 过程,这个合并过程主要是对不同的节点上的 map 输出结果进行合并。

3)不断的复制和合并之后,最终形成一个输入文件。Reduce 将最终的计算结果存放在 HDFS 上。

针对 MR2 是新一代的 MR 的 API。其主要是运行在 Yarn 的资源管理框架上。

4、Yarn(资源管理框架)

该框架是 hadoop2.x 以后对 hadoop1.x 之前 JobTracker 和 TaskTracker 模型的优化,而产生出来的,将 JobTracker 的资源分配和作业调度及监督分开。该框架主要有 ResourceManager,Applicationmatser,nodemanager。其主要工作过程如下:其 ResourceManager 主要负责所有的应用程序的资源分配,ApplicationMaster 主要负责每个作业的任务调度,也就是说每一个作业对应一个 ApplicationMaster。Nodemanager 是接收 Resourcemanager 和 ApplicationMaster 的命令来实现资源的分配执行体。

ResourceManager 在接收到 client 的作业提交请求之后,会分配一个 Conbiner,这里需要说明一下的是 Resoucemanager 分配资源是以 Conbiner 为单位分配的。第一个被分配的 Conbiner 会启动 Applicationmaster,它主要负责作业的调度。Applicationmanager 启动之后则会直接跟 NodeManager 通信。

在 YARN 中,资源管理由 ResourceManager 和 NodeManager 共同完成,其中,ResourceManager 中的调度器负责资源的分配,而 NodeManager 则负责资源的供给和隔离。ResourceManager 将某个 NodeManager 上资源分配给任务(这就是所谓的“资源调度”)后,NodeManager 需按照要求为任务提供相应的资源,甚至保证这些资源应具有独占性,为任务运行提供基础的保证,这就是所谓的资源隔离。

在 Yarn 平台上可以运行多个计算框架,如:MR,Tez,Storm,Spark 等计算,框架。

5、Sqoop(数据同步工具)

Sqoop 是 SQL-to-Hadoop 的缩写,主要用于传统数据库和 Hadoop 之间传输数据。数据的导入和导出本质上是 Mapreduce 程序,充分利用了 MR 的并行化和容错性。其中主要利用的是 MP 中的 Map 任务来实现并行导入,导出。Sqoop 发展到现在已经出现了两个版本,一个是 sqoop1.x.x 系列,一个是 sqoop1.99.X 系列。对于 sqoop1 系列中,主要是通过命令行的方式来操作。

sqoop1 import 原理:从传统数据库获取元数据信息 (schema、table、field、field type),把导入功能转换为只有 Map 的 Mapreduce 作业,在 mapreduce 中有很多 map,每个 map 读一片数据,进而并行的完成数据的拷贝。

sqoop1 export 原理:获取导出表的 schema、meta 信息,和 Hadoop 中的字段 match;多个 map only 作业同时运行,完成 hdfs 中数据导出到关系型数据库中。

Sqoop1.99.x 是属于 sqoop2 的产品,该款产品目前功能还不是很完善,处于一个测试阶段,一般并不会应用于商业化产品当中。

Sqoop 工具当中,目前我对它的认识是可能会存在一定的问题是因为当在导入导出的时候,map 任务失败了,此时 Applicationmaster 会重新调度另外一个任务来运行这个失败的任务。但是这可能会存在一个问题就是,在未失败前 Map 任务所导入的数据与重新调度 map 任务产生的结果会存在重复的现象。

6、Mahout(数据挖掘算法库)

Mahout 起源于 2008 年,最初是 Apache Lucent 的子项目,它在极短的时间内取得了长足的发展,现在是 Apache 的顶级项目。相对于传统的 MapReduce 编程方式来实现机器学习的算法时,往往需要话费大量的开发时间,并且周期较长,而 Mahout 的主要目标是创建一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。

Mahout 现在已经包含了聚类、分类、推荐引擎(协同过滤)和频繁集挖掘等广泛使用的数据挖掘方法。除了算法,Mahout 还包含数据的输入 / 输出工具、与其他存储系统(如数据库、MongoDB 或 Cassandra)集成等数据挖掘支持架构。

mahout 的各个组件下面都会生成相应的 jar 包。此时我们需要明白一个问题:到底如何使用 mahout 呢?

实际上,mahout 只是一个机器学习的算法库,在这个库当中是想了相应的机器学习的算法,如:推荐系统(包括基于用户和基于物品的推荐),聚类和分类算法。并且这些算法有些实现了 MapReduce,spark 从而可以在 hadoop 平台上运行,在实际的开发过程中,只需要将相应的 jar 包即可。

7、Hbase(分布式列存数据库)

源自 Google 的 Bigtable 论文,发表于 2006 年 11 月,传统的关系型数据库是对面向行的数据库。HBase 是 Google Bigtable 克隆版,HBase 是一个针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。和传统关系数据库不同,HBase 采用了 BigTable 的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。HBase 提供了对大规模数据的随机、实时读写访问,同时,HBase 中保存的数据可以使用 MapReduce 来处理,它将数据存储和并行计算完美地结合在一起。

Hbase 表的特点

1)、大:一个表可以有数十亿行,上百万列;

2)、无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列;

3)、面向列:面向列(族)的存储和权限控制,列(族)独立检索;

4)、稀疏:空(null)列并不占用存储空间,表可以设计的非常稀疏;

5)、数据多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳;

6)、数据类型单一:Hbase 中的数据都是字符串,没有类型。

Hbase 物理模型

每个 column family 存储在 HDFS 上的一个单独文件中,空值不会被保存。

Key 和 Version number 在每个 column family 中均有一份;

HBase 为每个值维护了多级索��,即:,其物理存储:

1、Table 中所有行都按照 row key 的字典序排列;

2、Table 在行的方向上分割为多个 Region;

3、Region 按大小分割的,每个表开始只有一个 region,随着数据增多,region 不断增大,当增大到一个阀值的时候,region 就会等分会两个新的 region,之后会有越来越多的 region;

4、Region 是 Hbase 中分布式存储和负载均衡的最小单元,不同 Region 分布到不同 RegionServer 上。、

5、Region 虽然是分布式存储的最小单元,但并不是存储的最小单元。Region 由一个或者多个 Store 组成,每个 store 保存一个 columns family;每个 Strore 又由一个 memStore 和 0 至多个 StoreFile 组成,StoreFile 包含 HFile;memStore 存储在内存中,StoreFile 存储在 HDFS 上。

8、Zookeeper(分布式协作服务)

源自 Google 的 Chubby 论文,发表于 2006 年 11 月,Zookeeper 是 Chubby 克隆版,主要解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。

Zookeeper 的主要实现两步:1)、选举 Leader  2)、同步数据。这个组件在实现 namenode 的 HA 高可用性的时候,需要用到。

9、Pig(基于 Hadoop 的数据流系统)

由 yahoo! 开源,设计动机是提供一种基于 MapReduce 的 ad-hoc(计算在 query 时发生) 数据分析工具

定义了一种数据流语言—Pig Latin,将脚本转换为 MapReduce 任务在 Hadoop 上执行。通常用于进行离线分析。

10、Hive(基于 Hadoop 的数据仓库)

由 facebook 开源,最初用于解决海量结构化的日志数据统计问题。

Hive 定义了一种类似 SQL 的查询语言 (HQL), 将 SQL 转化为 MapReduce 任务在 Hadoop 上执行。通常用于离线分析。

11、Flume(日志收集工具)

Cloudera 开源的日志收集系统,具有分布式、高可靠、高容错、易于定制和扩展的特点。

它将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在 Flume 中定制数据发送方,从而支持收集各种不同协议数据。同时,Flume 数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。此外,Flume 还具有能够将日志写往各种数据目标(可定制)的能力。总的来说,Flume 是一个可扩展、适合复杂环境的海量日志收集系统。

Ubuntu14.04 下 Hadoop2.4.1 单机 / 伪分布式安装配置教程  http://www.linuxidc.com/Linux/2015-02/113487.htm

CentOS 安装和配置 Hadoop2.2.0  http://www.linuxidc.com/Linux/2014-01/94685.htm

Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm

Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm

Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm

Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm

单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm

更多 Hadoop 相关信息见 Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2015-05/117499.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计6442字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中