Hadoop
我们知道,互联网近十年的数据增长是呈现爆炸增长的。大型互联网公司每天要处理的数据基本上都是TB级,甚至是PB级的。而为了存储处理这样海量的数据,传统的数据存储策略(关系型数据库)便陷入了瓶颈。不管是数据入库还是查询,使用传统的存储策略都设计到上亿条数据的便利查找操作,显然这使相当考验存储设备的性能的,也是相当耗时的。但我们知道,当代互联网是追求实时性、高用户体验的,这样的等待时间显然是不会被 认可的。
另外,在追求计算机性能的解决方案时,也必然意味着这样的计算机事极其昂贵、无法普及的,就像现在的超算中心一样,只能 是属于少数人的,大规模组织的。不利于小公司的发展,同样也不适应当代互联网的发展趋势。
而且,相比于互联网海量数据的增长速度,这样的一台高性能的机器,是否过不久还适合处理这样不断增长数据,还是一个问题呢。
于是,为适应这样的状况,有人就开始设计出了分布式系统,于是,Hadoop就出现了。
Hadoop是一个分布式计算开源 软件框架。能在有大量廉价的硬件设备组成的集群上运行应用程序,存储处理海量级别数据。
Hadoop的核心组件有两个,分别是分布式存储、分布式文件管理系统HDFS(Hadoop Distributed File System),还有就是分布式计算框架MapReduce。
其实,Hadoop并不是一个原创的软件。因为在Hadoop之前已经有了很多的分布式框架,比如最著名的是Google的GFS、BigTable、MapReduce,Amason的 AWS、微软的 Azure和IBM的蓝云。但是这些软件都是闭源的、商业性的。而这时,Hadoop的创建者Doug Cutting就出现了,应Yahoo!的邀请,他开始在Yahoo!带领团队,开发Apache基金会的顶尖项目Hadoop。应该所Hadoop就是个山寨货,他就是Doug Cutting根据Google的三大论文的思想开发出来的,那个分布式计算框架MapReduce与Google的一模一样,连名字都不带改的。但是这并不妨碍Hadoop成为现如今最有影响力的软件。毕竟,这就是开源的力量。
一、 Hadoop的两大组件
1.1 HDFS
Namenode:名称节点,hdfs的管理程序。控制存储和IO交换。保存元数据
Secondary NameNode :辅助名称节点。与NomeNode通讯,复制并合并元数据(比如文件命名空间镜像、修改日志),合并为一个文件,并检查文件大小,将就得修改存入本地磁盘,防止文件过大。更新到NameNode之中。这个过程可以简称为“快照”。当NameNode崩溃是,可手动切换成NameNode,代替NameNode完成工作。
dataNode:是数据存储节点。
以上便是Hadoop的基本存储架构。
HDFS典型的部署是在一个专门的机器 运行NameNode,集群中的其他机器各运行一个DataNode,当然,也可以在运行NameNode的机器上面运行DataNode,或者一个机器运行多个DataNode。一个集群只能有一个NameNode。
NameNode使用事务日志(EditLog)来记录HDFS元数据的变化,使用映射文件(FSImage)存储文件系统的命名空间,包含文件的映射、文件的属性信息等。事务日志和映射文件都存储在NameNode的本地文件系统之中。NameNode启动时,从磁盘中读取映射文件和事务日志,把事务日志的事务都应用到内存中的映射文件上,然后将新的元数据刷新到本地磁盘的新的映射文件上,这样可以截去旧的事务日志,这个过程称为检查点(CheckPoint)。HDFS还设有Secondary NameNode节点,他辅助NameNode处理映射文件和事务日志。NameNode启动的时候合并映射文件和事务日志,而Secondary NameNode周期性的从NameNode复制映射和事务日志到临时目录里面,合并成新的映射文件后再重新上传给NameNode,NameNode更新映射文件并处理事务日志,使得事务日志的大小始终控制在可配置的限度之下。
JobTracker:运工作监控器。行在主服务器Master节点里面,就近运行。操作切割分配监控task。
管理自己节点上面的task。
<!--[if !supportLists]-->1.2 <!--[endif]-->MapReduce
M/R就是一个编程模型。顾名思义,他就是有Map还有Reduce两个部分组成的 。Map是把一组数据一对一的映射成为另外的一组数据,Reduce是对一组数据进行归约,映射和归约分别有一个函数指定。
二、 实现机理
1、 机柜意识
通常,大型的HDFS集群跨多个安装点(机柜)排列。一个安装点中的不同节点之间的网络流量通常比跨安装点的网络流量更加的高校。一个NameNode尽量将一个块的多个副本放在多个安装点上以提高容错能力。但是,要平衡容错能力与网络流量的话,HDFS就允许管理员决定一个节点属于哪个安装点,于是,每一个节点就都可以知道它的机柜ID,也就是说,具有了机柜意识。
NameNode可以通过DataNode的机柜ID识别它们的位置。
2、 冗余备份
HDFS是一个大集群、跨机器、可靠存储的大型文件系统。每个文件都存储在一个个的数据块之中,默认数据块大小为64MB。同一个文件中除了最后一块以外的所有都是一样大的。文件的数据块通过复制备份来保证容错。当然,文件的数据块的大小和复制因子都是可以进行配置的。
HDFS的文件都是一次性写入的,并且都是严格限制任何时候都是一个写用户。DataNode使用本地文件系统来存储HDFS的数据,但是它对于HDFS的文件是一无所知的,只是使用一个个文件来存储HDFS的数据块。每当DataNode启动的时候,都会先进行一次对于本地文件系统的便利,得到一份关于HDFS数据块与本地额对应关系列表,并把这个列表报告发给NameNode。这表示块报告,块报告包含了DataNode上所有块的列表。
3、 副本存放
HDFS集群一般运行在多个机架之上,不同的机架上机器的通信是通过交换机的。通常,机架内节点之间的带宽比跨机架节点之间的带宽大、更快,而这会影响HDFS的可靠性以及性能。而HDFS会通过机架感知(Rack-aware,NameNode可以确定每个机架的所属的ID)来改进平衡数据可靠性。
一般,当复制因子是3的时候,HDFS的数据块备份策略是,将两个副本放在同一个机架的不同节点上,最后一个副本放在另外的一个机架的节点上。这样就可以防止整个机架失效的时候数据丢失。
4、 HDFS心跳
因为在这样的大型集群里面,宕机是一种常态。所以,NameNode与DataNode之间的连通性,随时有可能会失效。因此,每个DataNode都会主动向NameNode发送定期心跳信息,如果NameNode没有接收到对应的DataNode的心跳信息,就表明连通性丧失。然后,NameNode会将不能响应心跳信息的DataNode标记为“死DataNode”,并不再向他们发送请求,而存储在该DataNode节点上的数据将不再对那个节点的HDFS客户端可用,该节点将被从系统中有效的移除。如果一个DataNode的死导致数据库的复制因子降到最小值以下,NameNode将会启动附加复制,将复制因子带回正常阶段。
5、 安全模式
HDFS启动是时,NameNode会进入一个特殊的模式,安全模式,此时不会出现数据块的复制。NameNode会受到个DataNode的心跳信息以及数据块报告。数据块报告中包含一个DataNode所拥有的数据块列表,每个数据块里面都有指定书目的副本。当某个NameNode登记的数据复制品达到最小数目(<=最小数目)时,数据块会被认为是安全的,安全复制。在一定百分比(可配置)的数据块被NameNode检测确定是安全登记之后,在登记(加上附加的30秒),NameNode会推出安全模式。当检测到副本数不足的数据块时,该数据块会被复制到其他的节点之上,以达到最小副本数。
6、 数据完成性检测
从DataNode中获取的数据块可能会是损坏的。为此,HDSF客户端实现了对于HDFS文件内容的校验和检查(Checksum)。在HDFS文件被创建时,会计算每个数据块的检验和,并将检验和作为一个单独的隐藏文件保存在命名空间里面。当获取这个文件后,会检查各个DataNode取出的数据块和相应的校验和进行匹配。如若不匹配,则会选择其他副本的DataNode去数据块。
7、 空间回收
当文件被删除是,文件会被移动到/trash目录下,只要还在这个目录之下,文件就可以被快速回复。文件在这个目录里面的时间是可以设置的,超过这个时间,系统就会把它从系统的命名空间之中删除。而文件的删除便会引起相应数据块的释放。
8、 元数据磁盘失效
映射文件和事务日志是HDFS的核心数据结构。若果这些文件损坏,将会导致HDFS的不可用。当然,可以设置NameNode支持维护映射文件和事务日志的多个副本,任何映射文件或事务日志的修改都会同步到他的副本上。每次NameNode重启时,都会选择最新的一致性的映射文件和事务日志。
9、 快照
快照支持存储某一个时间点的数据复制。利用这一特性可以将损坏的HDFS回滚到以前的某一个正常的时间点。
以上便是最近的一些心得,还请斧正。
相关推荐
Hadoop 是一个处理、存储和分析海量的分布式、非结构化数据的开源框架。最初由 Yahoo 的工程师 Doug Cutting 和 Mike Cafarella Hadoop 是一个处理、存储和分析海量的分布式、非结构化数据的开源框架。最初由 Yahoo...
在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分布式存储。Hadoop 2.7.3是这个框架的一个稳定版本,它包含了多个改进和优化,以提高性能和稳定性。在这个版本中,Winutils.exe和hadoop.dll是两...
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不...
此文件为hadoop-2.7.7.tar.gz,可在linux下直接进行安装,如在windows上安装,则需要hadooponwindows-master.zip,用windows-master里的文件替换解压好后hadoop的bin和etc即可。Hadoop 2.7.7是一款开源的分布式计算...
Apache Hadoop是一个开源框架,主要用于分布式存储和计算大数据集。Hadoop 3.1.0是这个框架的一个重要版本,提供了许多性能优化和新特性。在Windows环境下安装和使用Hadoop通常比在Linux上更为复杂,因为Hadoop最初...
在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分布式存储。标题"hadop2.7.x_winutils_exe&&hadoop_dll"暗示我们关注的是Hadoop 2.7.x版本在Windows环境下的两个关键组件:`winutils.exe`和`...
在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分布式存储。Hadoop 2.7.3是Hadoop发展中的一个重要版本,它包含了众多的优化和改进,旨在提高性能、稳定性和易用性。在这个版本中,`hadoop.dll`...
在Hadoop生态系统中,Hadoop 2.7.7是一个重要的版本,它为大数据处理提供了稳定性和性能优化。Hadoop通常被用作Linux环境下的分布式计算框架,但有时开发者或学习者在Windows环境下也需要进行Hadoop相关的开发和测试...
在Windows环境下安装Hadoop 3.1.0是学习和使用大数据处理技术的重要步骤。Hadoop是一个开源框架,主要用于分布式存储和处理大规模数据集。在这个过程中,我们将详细讲解Hadoop 3.1.0在Windows上的安装过程以及相关...
标题 "hadoop2.6 hadoop.dll+winutils.exe" 提到的是Hadoop 2.6版本中的两个关键组件:`hadoop.dll` 和 `winutils.exe`,这两个组件对于在Windows环境中配置和运行Hadoop至关重要。Hadoop原本是为Linux环境设计的,...
在Hadoop生态系统中,`hadoop.dll`和`winutils.exe`是两个关键组件,尤其对于Windows用户来说,它们在本地开发和运行Hadoop相关应用时必不可少。`hadoop.dll`是一个动态链接库文件,主要用于在Windows环境中提供...
在windows环境下开发hadoop时,需要配置HADOOP_HOME环境变量,变量值D:\hadoop-common-2.7.3-bin-master,并在Path追加%HADOOP_HOME%\bin,有可能出现如下错误: org.apache.hadoop.io.nativeio.NativeIO$Windows....
在大数据处理领域,Hadoop是一个不可或缺的开源框架,它提供了分布式存储和计算的能力。本文将详细探讨与"Hadoop.dll"和"winutils.exe"相关的知识点,以及它们在Hadoop-2.7.1版本中的作用。 Hadoop.dll是Hadoop在...
在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分布式存储。Hadoop2.6.0是这个框架的一个重要版本,它包含了多项优化和改进,以提高系统的稳定性和性能。在这个压缩包中,我们关注的是与Windows...
在Hadoop生态系统中,`winutils.exe`和`hadoop.dll`是Windows环境下运行Hadoop必备的组件,尤其对于开发和测试环境来说至关重要。这里我们深入探讨这两个组件以及与Eclipse插件的相关性。 首先,`winutils.exe`是...
Hadoop是一个开源的分布式计算框架,由Apache基金会开发,它主要设计用于处理和存储大量数据。在提供的信息中,我们关注的是"Hadoop的dll文件",这是一个动态链接库(DLL)文件,通常在Windows操作系统中使用,用于...
Hadoop源码分析是深入理解Hadoop分布式计算平台原理的起点,通过源码分析,可以更好地掌握Hadoop的工作机制、关键组件的实现方式和内部通信流程。Hadoop项目包括了多个子项目,其中最核心的是HDFS和MapReduce,这两...
在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分析。这个压缩包文件包含的是"Hadoop.dll"和"winutils.exe"两个关键组件,它们对于在Windows环境下配置和运行Hadoop生态系统至关重要。 首先,...
在大数据领域,Hadoop是一个关键的开源框架,用于存储和处理海量数据。Hadoop-3.1.3是Hadoop的稳定版本,提供了许多增强的功能和优化,使其更适合大规模分布式计算环境。在这个针对Linux系统的安装包中,我们将探讨...