Hadoop教程 第二弹 Hadoop概述

1、Hadoop概述

大数据胜于好算法:不论算法多牛,基于小数据的推荐效果往往都不如基于大量可用数据的一般算法的推荐效果。

MapReduce是一个批量查询处理器,能够在合理的时间范围内处理针对整个数据集的动态查询。MapReduce基本上是一个批处理系统,并不适合交互式分析,通常情况下执行查询需要几分钟或更多时间,因此MapReduce更适合那种没有用户在现场等待查询结果的离线使用场景。

HBase提供在线访问,底层使用HDFS存储,HBase不仅提供对单行的在线读写,还提供对数据块读写的批处理。

Hadoop2中的YARN是一个集群资源管理系统,允许任何一个分布式程序(不仅仅是MapReduce)基于Hadoop集群的数据允许,但无论Hadoop上出现了多少不同的处理框架,就批处理而言,MapReduce仍然有一席之地,MapReduce提出的概念更具有通用性(如输入格式、数据集分片等)。

为什么不能用配有大量磁盘的数据库来进行大规模数据分析?为什么需要Hadoop?

  • 计算机硬盘的发展趋势:寻址时间的提升远远不及传输速率的提升。寻址是将磁头移动到特定硬盘位置进行读写的过程,它是导致硬盘操作延迟的主要原因,而传输速度主要取决于硬盘的带宽。如果数据访问模式中包含大量的硬盘寻址,那么读取大量数据集就会发很长时间。
  • 如果只更新一小部分数据,关系型数据库的B树更有优势,如果有大量数据更新,B树的效率明显落后于MapReduce,因为B树为了保持有序需要做许多操作。
关系型数据库与MapReduce的对比
 传统的关系型数据库MapReduce
数据大小GBPB
数据存取交互式和批处理批处理
更新多次读写一次写入,多次读取
事务ACID
结构写时模式读时模式
完整性
横向扩展非线性的线性的

然而,关系型数据库与Hadoop之间的区别又是模糊的。一方面,关系型数据库开始吸收Hadoop的一些思想,另一方面,诸如Hive这样的Hadoop系统不仅变得更具有交互性(从MapReduce中分离出来),而且增加了索引和事务的特性。

Hadoop对非结构化和半结构化数据非常有效,因为它是在处理数据时才对数据进行解释(即读时模式),这种模式在提供灵活性的同时避免了RDBMS数据加载阶段带来的高开销,因为在Hadoop中仅仅是一个文件拷贝操作。

 

2、Hadoop发展历史

1、Hadoop创始人Doug Cutting,为了实现与Google类似的全文搜索功能,他在Lucene框架基础上进行优化升级,查询引擎和索引引擎。

2、2001年年底Lucene成为Apache基金会的一个子项目。

3、对于海量数据的场景,Lucene框架面对与Google同样的困难,存储海量数据困难,检索海量速度慢。

4、学习和模仿Google解决这些问题的办法:微型版Nutch。

5、可以说Google是Hadoop的思想之源(Google在大数据方面的三篇论文)

  • GFS --->HDFS
  • Map-Reduce --->MR
  • BigTable --->HBase

6、2003-2004年,Google公开了部分GFS和MapReduce思想的细节,以此为基础Doug Cutting等人用了2年业余时间实现了DFS和MapReduce机制,使Nutch性能飙升。

7、2005 年Hadoop 作为Lucene的子项目Nutch的一部分正式引入Apache基金会。

8、2006 年3 月份,Map-Reduce和Nutch Distributed File System (NDFS)分别被纳入到Hadoop 项目中,Hadoop就此正式诞生,标志着大数据时代来临。

9、名字来源于Doug Cutting儿子的玩具大象

 

3、Hadoop三大发行版本

Hadoop 三大发行版本:

  • Apache 免费
  • Cloudera 收费,对Hadoop进行了封装,使其集群部署与配置更加方便
  • Hortonworks 收费

Apache 版本最原始(最基础)的版本,对于入门学习最好。
Cloudera 内部集成了很多大数据框架,对应产品CDH。
Hortonworks 文档较好,对应产品HDP。
Hortonworks 现在已经被Cloudera 公司收购,推出新的品牌CDP。

4、Hadoop优势

高可靠性:Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失。
高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点。
高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度。
高容错性:能够自动将失败的任务重新分配。

5、Hadoop组成

在Hadoop1.x 时代,Hadoop中的MapReduce同时处理业务逻辑运算和资源的调度,耦合性较大。
在Hadoop2.x时代,增加了Yarn。Yarn只负责资源的调度,MapReduce 只负责运算。
Hadoop3.x在组成上没有变化。

 

6、HDFS概述

HDFS(Hadoop分布式文件系统)的设计:

  • 超大文件:几百MB、几百GB甚至几百TB;
  • 一次写入多次读取:一次写入、多次读取是最高效的访问模式,数据集通常是由数据源生成或由数据源复制而来,接着长时间在此数据集上进行各种分析,每次分析都涉及到该数据集的大部分数据或全部数据;
  • 高吞吐量:HDFS是为高数据吞吐量优化的,会以提高时间延迟为代价,对于低延迟的访问需求HBase是最好的选择;
  • 大量的小文件:namenode将文件系统的元数据存储在内存中,因此文件系统所能存储的文件数受限于namenode的内存总量;
  • 单用户写入,只追加:只支持单个用户写文件,且写操作只能以追加方式进行,也就是说不支持在文件任意位置进行修改;

 

6.1、数据块

磁盘块一般为512B。HDFS的数据块默认为128MB。HDFS数据块与磁盘块不同的是,HDFS中小于一个块大小的文件不会占据整个块的空间,而磁盘块会。

HDFS数据块为什么这么大?

  • 最小化寻址开销,如果块足够大,传输时间会明显大于寻址时间。

块的大小可以设置,但不宜太大,MapReduce中的map任务通常一次只处理一个块中的数据,因此如果块太少(任务太少),少于集群结点数量,作业的运行速度就会比较慢。

 

使用数据块这种抽象的好处?

  • 一个文件的大小可以大于分布式系统中任一磁盘的容量;
  • 使用块进行存储而不是具体文件,可以简化存储系统的设计,因为块的大小是固定的;
  • 块非常适合做数据备份;

疑问:
是块大还是文件大?

  • 答:文件大,,通常一个文件对应多个块。

如果一个文件大小小于一个块的大小,那么这个文件会占整个块吗?

  • 答:会占整个块,但占整个块不代表消耗整个块的磁盘空间。

为啥设计成块就能减少寻址时间?

 

6.2、namenode和datanode

namenode(nn):

  • 管理节点,管理文件系统的命名空间,没有namenode整个文件系统将无法运行。
  • 存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限)以及每个文件的块列表和块所在的DataNode等。
  • namenode元信息并不包含每个块的位置信息,这些信息会在NameNode启动时从各个DataNode获取并保存在内存中,因为这些信息会在系统启动时由数据节点重建。把块位置信息放在内存中,在读取数据时会减少查询时间,增加读取效率。NameNode也会实时通过心跳机制和datanode进行交互,实时检查文件系统是否运行正常。不过namenode元信息会保存各个块的名称及文件由哪些块组成。
  • 运行NameNode会占用大量内存和IO资源,一般NameNode不会存储用户数据或执行MapReduce任务。

datanode:

  • 工作节点,会通过心跳定期向NameNode发送所存储文件块列表信息。
  • 当对HDFS文件系统进行读写时,NameNode告知客户端每个数据驻留在哪个DataNode,客户端直接与DataNode进行通信,DataNode还会与其他DataNode通信,复制这些块以实现冗余。

secondary namenode(2nn):

  • 每隔一段时间对NameNode元数据备份。

 

namenode元信息的持久化:

  • 在NameNode中存放元信息的文件是fsimage,在系统运行期间所有对元信息的操作都保存在内存中并被持久化到另一个文件edits中,并且edits文件和fsimage文件会被SecondaryNameNode周期性地合并。

为了简化系统的设计,Hadoop只有一个NameNode,这也就导致了Hadoop集群的单点故障问题,Hadoop提供了如下两种机制来解决:

  • 2NN:运行一个SecondaryNameNode,它的作用是与NameNode进行交互,定期通过编辑日志文件合并命名空间镜像。当NameNode发生故障时,它会通过自己合并的命名空间镜像副本来恢复。需要注意的是SecondaryNameNode保存的状态总是滞后于NameNode,所以这种方式难免会丢失部分数据。
  • 将Hadoop元数据写入到本地文件系统的同时再实时同步到一个远程挂载的网络文件系统。

 

7、Yarn概述

ResourceManager(RM):整个集群资源(内存、CPU等)的老大
NodeManager(NM):单个节点服务器资源老大
ApplicationMaster(AM):单个任务运行的老大
Container:容器,相当一台独立的服务器,里面封装了任务运行所需要的资源,如内存、CPU、磁盘、网络等。

说明1:客户端可以有多个
说明2:集群上可以运行多个ApplicationMaster
说明3:每个NodeManager上可以有多个Container

 

8、MapReduce概述

MapReduce 将计算过程分为两个阶段:Map 和Reduce

  • Map 阶段并行处理输入数据
  • Reduce 阶段对Map 结果进行汇总

 

9、HDFS、MapReduce、Yarn三者关系

每个MapTask会检索自己节点的数据,ReduceTask负责汇总检索完的结果,并写入本节点的HDFS中。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

波波老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值