Hadoop简介及组件详解

**Hadoop:**是一个由Apache基金会所开发的分布式系统基础架构。用户可以不需要了解底层情况,进行离线分析 运算和存储(集群为前提)。
历史背景:请点击
发展史:
Lucene是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎。最初是由Doug Cutting编写,并于2000年3月在SourceForge上开源并提供下载的。2001年9月份Lucene作为高质量的Java开源软件产品加入Apache软件基金会的Jakarta家族。2005年Lucene升级成为Apache顶级项目。
Nutch是一个系统的搜索框架,包括爬虫、索引、查询等。
2002年8月由Doug Cutting发起,托管于Sourceforge,之后发布了0.4、0.5、0.6三个版本
2004年9月Oregon State University(俄勒冈州立大学)采用Nutch
2004年9月Creative Commons(知识共享)推出基于Nutch的搜索服务
2005年1月加入Apache的孵化器
2005年6月孵化结束成为Lucene的子项目
区别:LUCENE会应用在本地服务器的网站内部搜索,而Nutch则扩展到整个网络、Internet的检索。
2003-2004年,Google公布了部分GFS和MapReduce思想的细节,受此启发的Doug Cutting等人用2年的业余时间实现了DFS和MapReduce机制,使Nutch性能飙升。然后Yahoo招安Doug Gutting及其项目。
2005年,Hadoop作为Lucene的子项目Nutch的一部分正式引入Apache基金会。
2006 年 3 月份,Map/Reduce 和 Nutch Distributed File System (NDFS) 分别被纳入称为 Hadoop 的项目中。Hadoop 是最受欢迎的在 Internet 上对搜索关键字进行内容分类的工具,但它也可以解决许多要求极大伸缩性的问题。
Hadoop的成长过程
Lucene–>Nutch—>Hadoop
Hadoop起源于Google的三大论文
GFS:Google的分布式文件系统Google File System
MapReduce:Google的MapReduce开源分布式并行计算框架
BigTable:一个大型的分布式数据库(典型代表hbase)用来存储结构化数据(不是关系型数据库)
演变关系
GFS—->HDFS Hadoop file system
Google MapReduce—->Hadoop MapReduce
BigTable—->HBase
hadoop的优点和缺点:
优点:
高可靠性。多副本存储元数据与数据块信息
高扩展性。 存储与计算节点可以动态增添;可以按需替换
高效性。 批处理移动计算,MapReduce核心是并行计算,加快任务处理速度(分块执行)
高容错性。 数据自动备份,副本丢失后自动重新分配
可以构建在廉价机器上;适合大规模数据存储与计算
缺点:
不适合低延迟数据访问(实时性低)。
a) 比如毫秒级 MR计算框架大多中间数据走磁盘
b) 低延迟与高吞吐量 注重吞吐量,牺牲了实时性
无法高效存储大量小文件。
a) 占用NameNode大量内存
b) 寻道时间超过读取时间
不支持多用户写入及任意修改文件。
a) 一个文件只能有一个写
b) 仅支持append
数据不支持随机读,只能从头到尾扫描
hadoop的组成
1: HDFS 主要负责读取(组件)
a)NameDode:master节点,在hadoop1.x中只有一个,管理HDFS的名称空间和数据块映射信息,配置副本策略,处理客户 端请求。记录每个文件中各个块所在的数据节点的位置信息。(周期性的接受心跳和块的状态报告信息 包含该DataNode上所有数据块的列表,若接受到心跳信息,NN认为DN工作正常,如果在10分钟后还接受到不到DN的心跳,那么NN认为DN已经宕机 这时候NN准备要把DN上的数据块进行重新的复制。)
如果namedone挂掉怎末办?
namedone容错机制(两种)
补充说明元数据请点击
元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能
第一种方式是将持久化存储在本地硬盘的文件系统元数据备份。Hadoop可以通过配置来让Namenode将他的持久化状态文件写到不同的文件系统中。这种写操作是同步并且是原子化的。比较常见的配置是在将持久化状态写到本地硬盘的同时,也写入到一个远程挂载的网络文件系统(NFS)。
第二种方式是运行一个辅助的SecondaryNamenode 事实上SecondaryNamenode并不能被用作Namenode它的主要作用是定期的将Namespace镜像与操作日志文件(edit log)合并,以防止操作日志文件(edit log)变得过大。通常,SecondaryNamenode 运行在一个单独的物理机上,因为合并操作需要占用大量的CPU时间以及和Namenode相当的内存。辅助Namenode保存着合并后的Namespace镜像的一个备份,万一哪天Namenode宕机了,这个备份就可以用上了。
但是辅助Namenode总是落后于主Namenode,所以在Namenode宕机时,数据丢失是不可避免的。在这种情况下,一般的,要结合第一种方式中提到的远程挂载的网络文件系统(NFS)中的Namenode的元数据文件来使用,把NFS中的Namenode元数据文件,拷贝到辅助Namenode,并把辅助Namenode作为主Namenode来运行。

b)DataNode:Hadoop 集群包含一个 NameNode 和大量 DataNode。存储实际的数据,汇报存储信息给namenode。(datanode有一个定期的心跳机制反馈namedone)存储节点,真正存放数据的节点,用于保存数据,保存在磁盘上(在HDFS上保存的数据副本数默认是3个,这个副本数量是可以设置的)。基本单位是块(block),默认128M。
Datanode负责处理文件系统客户端的读写请求。在Namenode的统一调度下进行数据块的创建、删除和复制。集群中单一Namenode的结构大大简化了系统的架构。Namenode是所有HDFS元数据的仲裁者和管理者,这样,用户数据永远不会流过Namenode
c)Secondary NameNode辅助NameNode,分担其工作量;定期合并fsimage和fsedits,推送给NameNode;紧急情况下,可辅助恢复NameNode,但Secondary NameNode并非NameNode的热备。
fsimage 是 NameNode 启动时对整个文件系统的快照(:元数据镜像文件);edits 是在 NameNode 启动后对文件系统的改动序列(元数据的操作日志)。
Seconday namenode工作原理:
大佬说的详细

2:MapReduce 主要负责分布式计算
组成部分
JobTracker:Master节点,只有一个,管理所有作业/任务的监控、错误处理等;将任务分解成一系列任务,切割task并分派节点。
TaskTracker:Slave节点,管理jobtask分配的task负责任务的运行 Map Task和Reduce Task;并与JobTracker交互,(通过心跳机制)汇报任务状态。
map task (并行处理数据)

redurce task (数据汇总) )

Mapreduce的缺点
1 JobTracker是集群事务的集中处理点,存在单点故障
2JobTracker需要完成的任务太多,既要维护job的状态又要维护job的task的状态,造成过多的资源消耗
3在taskTracker端,用map/reduce task作为资源的表示过于简单,没有考虑到cpu、内存等资源情况,当把两个需要消耗大内存的task调度到一起,很容易出现OOM。

hadoop2.0后引入yarnhttps://blog.csdn.net/u012117710/article/details/53607942

3:Yarn
核心思想:将MP1中JobTracker的资源管理和作业调度两个功能分开,分别由ResourceManager和ApplicationMaster进程来实现。
1)ResourceManager:负责整个集群的资源管理和调度。
2)ApplicationMaster:负责应用程序相关的事务,比如任务调度、任务监控和容错等。
YARN的出现,使得多个计算框架可以运行在一个集群当中。
1)每个应用程序对应一个ApplicationMaster。
2)可以支持多种计算框架运行在YARN上面比如MapReduce、Storm、Spark、Flink等。
简单介绍yarn的组件

  1. ResourceManager
    ResourceManager是master上的进程,负责整个分布式系统的资源管理和调度。他会处理来自客户端(client)的请求;启动/监控Application Master;监控NodeManager的情况,比如可能挂掉的NodeManager。

  2. NodeManager
    相对应的,NodeManager处在slave(奴隶)节点上的进程,他只负责当前slave节点的资源管理和调度,以及task的运行。他会定期向ResourceManager回报资源/Container(容器)的情况(根据心跳机制);接受来自ResourceManager对于Container的启停命令。

  3. Application Master
    每一个提交到集群的作业都会有一个与之对应的Application Master来负责应用程序的管理。他负责进行数据切分;为当前应用程序向ResourceManager去申请资源,并分配给具体的任务;与NodeManager通信,而任务的监控和容错也是由Application Master来负责的。

  4. Container
    包含了Application Master向ResourceManager申请的计算资源,比如说CPU/内存的大小,以及任务运行所需的环境变量和队任务运行情况的描述。

你可能感兴趣的:(Hadoop简介及组件详解)