《Hadoop基本原理与入门实践.ppt》由会员分享,可在线阅读,更多相关《Hadoop基本原理与入门实践.ppt(119页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Hadoop基本原理与入门实践网络文化与数字传播中心北京市重点实验室讲述内容u干货奉上干货奉上u第第1 1章章 Hadoop Hadoop 的起源的起源u第第2 2章章 hadoop hadoop 环境配置环境配置u第第3 3章章 Hadoop Hadoop 实战实战(wordcount(wordcount与倒排索引与倒排索引)u更多内容更多内容u第第4 4章章 Hadoop Hadoop 细节细节什么是大数据u一个交易系统中的大数据是什么u看看现在公司核心业务是什么;并由此产生了多少数据,又有多少数据是公司要处理的。u但是一个传统平台并没有这么高的成本效益来处理大数据;企业需要一个很好的平台
2、能够搜集所有有效的数据:有效地处理大量数据,与系统进行交互和通信这就是Hadoop。u那么小型数据平台和大型数据平台又有什么区别?首先水平扩展性,这是一个很有挑战性的问题;必须能够方便的使用并且能够非常灵活在一些不同的应用中使用,也能在虚拟的云计算中使用的平台。这就是企业所期待的平台大数据平台。hadoop的起源uHadoop开始时时nutch的一个子项目,而nutch又是ApacheLucene的子项目。这三个项目都是由DoungCutting创立,每个项目都是上一个项目的演进。uLucene是搜索引擎开发工具包,提供了一个纯Java的高性能全文检索,他可以方便嵌入实际应用中实现全文搜索、索
3、引功能。uNutch项目始于2002年,是以Lucene为基础的实现的搜索引擎应用。Lucene为nutch提供了文本搜索和索引API,Nutch不光有搜索功能,还有数据抓取功能。u很快,DougCutting和Mike(Hadoop和Nutch的另一位创始人)就意识到,他们的架构无法扩展支持数以十亿的网页。这时候,Google的研究人员在2003ACM会议上发表描述了谷歌的分布式文件系统,即GFS的论文,即时为他们提供了帮助,解决了网络抓取和索引过程中产生大量文件存储的需求,于是,他们开始写GFS的一个开源实现,即Nutch的分布式文件系统,NDFS。u2004年u2004年,google发
4、表论文介绍了他们的MapReduce系统。u2005年,Nutch开发人员在Nutch上实现了第一个MapReduce系统,并在年中实现了算法完全移植。这样,Nutch的NDFS和MapReduce实现不只是适用于搜索领域。u2006年2月,开发人员将NDFS和MapReduce移出了Nutch形成了Lucene的一个子项目,称为Hadoop。与此同时,创始人Doung加入了yahoo,yahoo将Hadoop发展成一个能够处理Web数据的系统。u2008年2月,Yahoo!宣布其搜索引擎使用的索引是在一个拥有1万个内核的Hadoop集群上构建的。u2008年1月,Hadoop称为Apache
5、的顶级项目。至今,除了Yahoo!外,还有Facebook等其他公司使用Hadoop架构。u2008年4月,Hadoop打破世界纪录,成为最快的TB级别排序系统。通过一个910个节点的集群,Hadoop在209秒内完成对1TB的数据的排序。u2008年11月,Google的报告中声称,它的MapReduce对1TB排序只用了68秒。u2009年5月,Yahoo!的团队排序用了62秒。什么是hadoop?它能干什么?诞生背景:谷歌面对的数据和计算难题1.大量的网页怎么存储?2.搜索算法什么是hadoop?Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层
6、细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量
7、的数据提供了存储,则MapReduce为海量的数据提供了计算。Hadoop 体系结构HDFSHDFS(Hadoop Distributed File SystemHadoop Distributed File System)和MapreduceMapreduce是hadoop的两大核心HDFS(文件系统)实现分布式存储的底层支持Mapreduce(编程模型)实现分布式并行任务处理的程序支持Hadoop 子项目家族Hadoop HDFSHDFS:采用Master/Slave结构模型MasterNameNodeJobTrackerDataNodeTaskTrackerDataNodeTaskTra
8、ckerDataNodeTaskTrackerDataNodeTaskTrackerSecondaryNameNodeHDFS术语HDFS主要组件的功能NameNode DataNode存储元数据 存储文件内容元数据保存在内存中 文件内容保存在磁盘Hadoop MapReduce 也采用了 Master/Slave(M/S)架构MapReduce术语MapReduce第二章 hadoop环境配置u 孩儿们操练起来!实验环境u1.PC:linux环境:vmware虚拟机下unbuntu 14.042u 或windows环境:windows+Cygwinu 2.java环境:java versio
9、n 1.7.0_75u4.SSH:windows下可以使用SecureCRT或putty等ssh client程序,作用是用来远程连接linux服务器,linux下可以直接使用ssh命令下载Hadoop Hadoop目录结构为什么要配环境变量 u1.告诉计算机Hadoop来了:例如输命令调用Hadoop时告诉计算机hadoop的位置,配置PATH路径。u2.告诉Hadoop计算机的信息:将Hadoop部署到计算机上,并用hadoop完成一项工作时需要计算机的一些资源,例如登陆HDFS时需要用到计算机端口。u3.Hadoop工作时需要按需求配置一些参数,例如告诉Hadoop做分布式运算时有多少个
10、节点。演出开始 Hadoop三种运行模式单机模式:只有一个JVM进程,没有分布式,不使用HDFS伪分布式模式:只有一台机器,每个Hadoop守护进程都是一个独立的JVM进程,通常用于调试。完全分布式模式:运行于多台机器上,真实环境。Hadoop三种运行模式u1.单机模式:安装简单,几乎不用作任何配置,但仅限于调试用途u2.伪分布模式:在单节点上同时启动namenode、datanode、jobtracker、tasktracker、secondary namenode等5个进程,模拟分布式运行的各个节点u3.完全分布式模式:正常的Hadoop集群,由多个各司其职的节点构成Hadoop配置有关文
11、件uHadoop伪分布环境搭建u步骤:1.配置系统环境变量:/etc/profileu 2.配置hadoop环境变量:修改hadoop目录以下文件u hadoop-env.sh、mapred-site.xml、core-site.xmlu hdfs-site.xml、yarn-site.xmlu 3.SSH免密码登陆uHadoop伪分布环境搭建u1.配置 etc/profileu添加:uexport CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/libuexport PATH=$PATH:$JAVA_HOME/bin;$PATH:$HAD
12、OOP_HOME/binu2.配置 hadoop-env.shu添加:u3.修改hadoop-2.6.0文件权限为用户权限:u默认没有mapred-site.xml文件,复制mapred-site.xml.template一份,并把名字改为mapred-site.xmlu4.配置下面4个重要文件:u mapred-site.xmlucore-site.xmluhdfs-site.xmluyarn-site.xmlu mapred-site.xmluu mapred.job.trackeru Master.hadoop:9001u Host or IP and port of JobTracke
13、r.uucore-site.xmluuu hadoop.tmp.diru/home/flamingo/hadoop-2.6.0/tmpuAbase for other temporary directories.uuufs.default.nameuhdfs:/Master.hadoop:9000u uuhdfs-site.xmluu u dfs.replicationu 1 u u u dfs.name.diru /home/flamingo/hadoop-2.6.0/dfs/name u u u dfs.data.diru /home/flamingo/hadoop-2.6.0/dfs/d
14、ata uuuyarn-site.xml:uuuu yarn.nodemanager.aux.servicesu mapreduce_shuffle uuuSSH免密码登陆u1、安装SSH:sudo apt-get install sshu 生成公钥与私钥:ssh-keygen-t rsa u2.ls-al/home/flamingo看是否创建好.ssh目录u3.创建.ssh目录:mkdir/home/flamingo/.sshu4.将公钥加入到用于认证的公钥文件中:u进入.ssh目录:cd.sshucp id_rsa.pub authorized_keysu5.免密码登陆:ssh local
15、hostu配置完成!u登陆HDFSu格式化NameNode:bin/hadoop namenode-formatu启动HDFS:start-dfs.sh ,start-yarn.sh 或者直接 sbin/start-all.shu查看web页面信息:localhost:50070Eclipse下搭建Hadoop2.6.0开发环境u1.安装eclipseu2.下载hadoop对应版本的eclipse插件。u3.把插件放到eclipse/plugins目录下u4.重启eclipse,打开WindowsPreferences后,在窗口左侧会有HadoopMap/Reduce选项,点击此选项,在窗口右
16、侧设置Hadoop安装路径。u5.配置Map/ReduceLocations。u在Window-ShowView中打开Map/ReduceLocations.在Map/ReduceLocations中新建一个HadoopLocation。在这个View中,右键-NewHadoopLocation。在弹出的对话框中你需要配置Locationname,如Hadoop,还有Map/ReduceMaster和DFSMaster。这里面的Host、Port分别为你在mapred-site.xml、core-site.xml中配置的地址及端口。第三章 Hadoop 实战(wordcount)u先来说说ma
17、preduce编程模型u 从 MapReduce 自 身 的 命 名 特 点 可 以 看 出,u MapReduce由 两 个 阶 段 组 成:Map 和Reduce。用户u只需编写 map()和 reduce()两个函数,即可完成简单的分u布式程序的设计。u map()函数以 key/value 对作为输入,产生另外一系列u key/value 对作为中间输出写入本地磁盘。MapReduce 框u架会自动将这些中间数据按照 key 值进行聚集,且 key 值u相同(用户可设定聚集策略,默认情况下是对 key 值进行u哈希取模)的数据被统一交给 reduce()函数处理。u reduce()函
18、数以 key 及对应的 value 列表作为输入,u 经合并 key 相同的 value值后,产生另外一系列 key/valueu 对作为最终输出写入 HDFS。MapReduce核心功能uMapreduce版“HelloWorld”WordCountu功能:统计输入文件中的每个单词出现的次数u在mapreduce中,可以这样编写(伪代码):HDFS的上传和下载u通过ecplipseu通过命令行ubin/hadoopfs-put/本地路径/hdfs路径ubin/hadoopfs-get/hdfs路径/本地路径Mapreduce能处理哪些问题?uMapReduce能够解决的问题有一个共同特点:u
19、任务可以被分解为多个子问题,且这些子问题相对独立,u彼此之间不会有牵制,待并行处理完这些子问题后,任u务便被解决。u谷歌在论文中提到了MapReduce的一些典型应用u包括分布式grep、URL访问频率统计、Web连接图反转、u倒排索引构建、分布式排序等,稍微复杂一些如K-meansu聚类、朴素贝叶斯分类问题,都可以用mapreduce的模型建u立分布式运算来解决。Mapreduce不能处理哪些问题?u不能划分为多个任务的问题,如:u1.Fibonacci数值计算:Fibonacci数值计算时,下一个结果需要依赖于前面的计算结果,也就是说,无法将该问题划分成若干个互不相干的子问题,因而不能用M
20、apReduce解决。u2.层次聚类法。层次聚类法是应用最广泛的聚类算法之一。其主要思想是,开始时,将每个对象归为一类,然后不断迭代,直到所有对象合并成一个大类(或者达到某个终止条件);在每轮迭代时,需计算两两对象间的距离,并合并距离最近的两个对象为一类。该算法需要计算两两对象间的距离,也就是说每个对象和其他对象均有关联,因而该问题不能被分解成若干个子问题,进而不能用MapReduce解决。倒排索引u1.现有一批电话清单,记录了用户A拨打给用户B的记录u2.需要做一个倒排索引,记录拨打给B用户所有A的用户23123321312120523525353441008610086丨丨52352535
21、3441326420398丨12023123321312丨丨输出格式:算法思路源文件分割原始数据以被叫作为key以主叫作为value拥有相同被叫的主叫号码们把主叫号码汇总输出倒排索引输出到HDFS1008652352535344231233213121201008613264203981202312332131210086丨丨523525353441326420398丨12023123321312丨丨u第四章关于hadoop的更多细节Hadoop名字的起源uHadoop这个名字不是一个缩写,它是一个虚构的名字。该项目的创建者DougCutting如下解释Hadoop这一名称的来历:u这个名字是
22、我的孩子给一头吃饱了的棕黄色大象取的。我的命名标准是简短,容易发音和拼写,没有太多的含义,并且不会被用于别处。小孩子是这方面的高手。Googol就是小孩子起的名字。Hadoop 子项目家族Hadoop 子项目家族u Hadoop家族成员介绍uHadoop Common uHadoop体系最底层的一个模块,为Hadoop各子项目提供各种工具,如:配置文件和日志操作等。uAvro uAvro是dougcutting主持的RPC项目,有点类似Google的protobuf和Facebook的thrift。avro用来做以后hadoop的RPC,使hadoop的RPC模块通信速度更快、数据结构更紧凑。
23、(RPC:RemoteProcedureCallProtocol远程过程调用协议)uChukwa uChukwa是基于Hadoop的大集群监控系统,由yahoo贡献。uHBase u基于HadoopDistributedFileSystem,是一个开源的,基于列存储模型的分布式数据库。uHive uhive类似CloudBase,也是基于hadoop分布式计算平台上的提供datawarehouse的sql功能的一套软件。使得存储在hadoop里面的海量数据的汇总,即席查询简单化。hive提供了一套QL的查询语言,以sql为基础,使用起来很方便。(数据库是面向事务的设计,数据仓库是面向主题设计的
24、。)uTip:还记得数据仓库和数据库的区别吗?u传统数据库主要是为应用程序进行数据处理,未必按照同一主题存储数据;数据仓库侧重于数据分析工作,是按照主题存储的。这一点,类似于传统农贸市场与超市的区别市场里面,白菜、萝卜、香菜会在一个摊位上,如果它们是一个小贩卖的;而超市里,白菜、萝卜、香菜则各自一块。也就是说,市场里的菜(数据)是按照小贩(应用程序)归堆(存储)的,超市里面则是按照菜的类型(同主题)归堆的。uPig uPig是SQL-like语言,是在MapReduce上构建的一种高级查询语言,把一些运算编译进MapReduce模型的Map和Reduce中,并且用户可以定义自己的功能。Yaho
25、o网格运算部门开发的又一个克隆Google的项目Sawzall。uZooKeeper uZookeeper是Google的Chubby一个开源的实现。它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。现实应用中的Hadoop现在互联网、世界500强、中小创新企业都在某些地方、某些程度上或者在适应平台上都会用到Hadoop,而且会跨越多个不同纵向的层面。现在通过ETL(ExtractTransformandLoad)可以从其他的新闻中搜集
26、数据进行处理,把它放在系统上。挖掘数据,这是一个非常普遍的用途。其关注点是,探究数据;用观测数据找到未来的形式,丰富数据的使用。这点经常用于Web应用程序,也是雅虎经常用到的特性。现在Hadoop在4.2多万个电脑上使用了。Hadoop平台的特点u特点可扩展性;其次,可控制性;第三是可靠性。uHadoop在整个的空间不间断的运行,可以存储各种各样的数据 尤其对于大多数的数据特别是很多公司投资的新数据(非传统传统结构的数 据),而且它必须具有经济效益 这更是不能低估和忽视的一点。在此需要强调一下,大数据意味着高成本,特别是平台扩展和维护时产生的花费。u如果想有效的缩减成本,就需要关注Hadoop
27、的应用和部署。以交易系统为例,包括了网站、网址、数据系统和与客户的交流,下面还有业务情报和分析,这里会用到很多这样的系统。这样的系统在成千上万的公司中都会用到,价值非常之高,也需要用Hadoop(角色)。这其中会用到一些新技术,而由此产生的数据与传统的数据结构不会很匹配,这样会影响到其他的应用上的空间或性能和容量,所以就需要Hadoop来高效地把数据搜集起来对它进行处理和精炼。云计算主要特点是数据密集型计算方式,同时还具有移动计算的特点,即移动计算到数据,而不是移动数据到计算,因为将CPU移动到数据的代价更小。关键技术虚拟化技术、并行计算、分布式存储、分布式数据管理Hdoop源于GoogleG
28、FS(Google File System):是一个分布式文件系统,隐藏下层负载均衡、冗余复制等细节,对上层程序提供一个同一的分布式文件系统文件系统APIAPI接口接口。MapReduce:通过把大部分的分布式运算抽象为Map Reduce操作,Map是把输入分解为中间的Key/Value对,Reduce是把Key/Value合并最终输出Output,这两个函数有程序员提供个系统,下层设置把Map和Reduce操作分布在集群上运行,并把结果存储在GFS上。BigTable:是一个大型的分布式数据库,这个数据库不是关系型数据库,而是一个巨大的表格,来存储结构化数据。GFS设计上主要有八个特点大文
29、件和大数据块:数据文件的大小普遍在GB级别,而且其每个数据块默认大小为64MB,这样做的好处是减少了元数据的大小,能使Master节点能够非常方便地将元数据放置在内存中以提升访问效率。操作以添加为主:因为文件很少被删减或者覆盖,通常只是进行添加或者读取操作,这样能充分考虑到硬盘线性吞吐量大和随机读写慢的特点。支持容错:首先,虽然当时为了设计方便,采用了单Master的方案,但是整个系统会保证每个Master都会有其相对应的复制品,以便于在Master节点出现问题时进行切换。其次,在Chunk层,GFS已经在设计上将节点失败视为常态,所以能非常好地处理Chunk节点失效的问题。GFS设计上主要有
30、八个特点高吞吐量:虽然其单个节点的性能无论是从吞吐量还是延迟都很普通,但因为其支持上千的节点,所以总的数据吞吐量是非常惊人的。保护数据:首先,文件被分割成固定尺寸的数据块以便于保存,而且每个数据块都会被系统复制三份。扩展能力强:因为元数据偏小,使得一个Master节点能控制上千个存数据的Chunk节点。支持压缩:对于那些稍旧的文件,可以通过对它进行压缩,来节省硬盘空间,并且压缩率非常惊人,有时甚至接近90%。用户空间:虽然在用户空间运行在运行效率方面稍差,但是更便于开发和测试,还有能更好利用Linux的自带的一些OSIXAPI。Hadoop 诞生于大搜索应用诞生于大搜索应用DougCuttin
31、gMapReduce|GFS|BigTable名词解释Hadoop,Apache开源的分布式框架。源自Google GFS,BigTable,MapReduce 论文。HDFSHDFSHDFS(Hadoop Distributed File System),Hadoop 分布式文件系统。NameNode,HDFS命名服务器,负责与DataNode文件元信息保存。DataNode,HDFS数据节点,负责存储数据存储并汇报给NameNode。SecondaryNamenode,NameNode的镜像备份节点Map ReduceMap ReduceJobTracker,hadoop的Map/Redu
32、ce调度器,负责与TackTracker通信分配计算任务并跟踪任务进度。TaskTracker,启动和管理Map和Reduce子任务的节点。典型部署5-4000 台服务器(8-core,8-24GB RAM,4-12 TB,gig-E);两层网络架构;每个机柜20-40节点Hadoop的版本是历史稳定版是根据的稳定版引入了federation和yarn,但缺少NN和HA是当前稳定版,但和系列差不多,只不过有些优化改进是beta版2.0.x 现在是alpha版,有yarn和federation的引入这点是和是一样,但是它是基于1.x的稳定版Hadoop HDFSHadoop分布式文件系统(HDF
33、S)被设计成适合运行在通用硬件(commodityhardware)上的分布式文件系统。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分。HDFS作用存储并管理PB级数据处理非结构化数据注重数据处理的吞吐量(latency不敏感)应用模式(一次写多次读)NameNodeNamenode是一个中心服务器,单一节点(简化系统
34、的设计和实现),负责管理文件系统的名字空间(namespace)以及客户端对文件的访问文件操作,NameNode负责文件元数据的操作,DataNode负责处理文件内容的读写请求,跟文件内容相关的数据流不经过NameNode,只会询问它跟那个DataNode联系,否则NameNode会成为系统的瓶颈DataNode一个数据块在DataNode以文件存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息心跳是每3秒一次,心跳返回结果带有NameNo
35、de给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode 的心跳,则认为该节点不可用。集群运行中可以安全加入和退出一些机器数据完整性存储在某个DataNode上的数据很可能会被损坏,可能是由于存储设备故障,网络故障或者软件漏洞所致。HDFS客户端应用实现了对文件内容的校验和。客户端创建HDFS文件时它会计算每个文件的每个block的校验和并在相同的命名空间下的单独隐藏的文件中保存这些值当客户端接收文件数据时,会首先验证校验和。如果校验失败,客户端会向其他拥有同样复本的DataNode重新获取数据。文件文件切分成块(默认大小64M),
36、以块为单位,每个块有多个副本存储在不同的机器上,副本数可在文件生成时指定(默认3)NameNode是主节点,存储文件的元数据如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表以及块所在的DataNode等DataNode在本地文件系统存储文件块数据,以及块数据的校验和可以创建、删除、移动或重命名文件,当文件创建、写入和关闭之后不能修改文件内容安全模式集群启动期间,NameNode节点会进入一个成为安全模式(Safemode)的特殊状态。这种状态下不会做数据的备份,而NameNode会从DataNodes接收Heartbeat和Blockreport信息。一个B
37、lockreport包含了该DataNode所存储的block列表。每个block指定了一个最少副本数量值。当数据block副本的最小序号通过NameNode核对时,我们认为该block是能安全复制的。在经过NameNode核对数据block的备份配置完成后(另外等待30秒),NameNode退出Safemode状态。然后NameNode会判断并列出副本数仍然少于配置要求的份数的block列表,如果列表不为空,那么它就会将这些block拷贝到其他DataNode.u在实践过程中,系统启动的时候去修改和删除文件也会有安全模式不允许修改的出错提示,只需要等待一会儿即可。SafeModeExcept
38、ion异常uorg.apache.hadoop.dfs.SafeModeException:Cannotdelete/user/hadoop/input.Namenodeisinsafemode.u那我们来分析下这个错误,从字面上来理解:“Namenodeisinsafemode.”u现在就清楚了,那现在要解决这个问题,我想让Hadoop不处在safemode模式下,能不能不用等,直接解决呢?答案是可以的,u只要在Hadoop的目录下输入:u$bin/hadoopdfsadmin-safemodeleaveuFile System元数据持久化HDFS的命名空间数据保存在NameNode中。Na
39、meNode使用了名为EditLog的事务日志来持续记录了文件系统元数据所发生的每一个变化。例如,在HDFS中创建新文件时,NameNode会往EditLog插入一条记录来说明此操作。同样地,修改文件的副本系数时也会在EditLog记录这样的操作。NameNode将EditLog存储在本地操作系统的文件系统的一个文件中。整个文件系统的命名空间,包括block到file和file system property之间的映射关系,保存在一个成为FsImage的文件中。此FsImage也是作为一个文件形式存储在NameNode本地文件系统中。File System元数据持久化DataNode在本地文件
40、系统中保存了HDFS数据,但它并不知道HDFS保存的具体内容,只是把HDFS数据保存在本地的独立的block中。DataNode在同一目录不会创建所有的文件,相反它会启发式的决定每个目录创建最合适的文件数和子目录数。一开始就在同一目录下初始化所有文件是不推荐的,因为本地文件系统可能不支持一个目录中创建过多数量的文件。当一个DataNode启动时,它会扫描本地文件系统,生成所有HDFS数据块的一个列表,然后向NameNode发送一个报告(这个报告称为blockreport)。HDFS关键运行机制-保障可靠性的措施一个名字节点和多个数据节点数据复制(冗余机制)存放的位置(机架感知策略)故障检测数据
41、节点心跳包(检测是否宕机)块报告(安全模式下检测)数据完整性检测(校验和比较)名字节点(日志文件,镜像文件)空间回收机制通信协议所有HDFS的通信协议都基于TCP/IP协议,客户端会与NameNode机器上的TCP端口建立连接,并通过ClientProtocol协议与NameNode进行会话。而DataNode节点则通过DataNodeProtocol与NameNode进行通信。远程过程调用(RPC)同时封装了ClientProtocol和DataNodeProtocol。而NameNode从不启动任何RPC,相反它会响应来自DataNode或客户端的RPC。数据磁盘故障,心跳及重新复制每个D
42、ataNode会定期向NameNode发送一个心跳信息。如果一部分DataNode与NameNode断开了连接,NameNode会根据心跳信息来觉察到。NameNode会将最近没有发送心跳信息的DataNode标记为dead状态,并且不会再像它们发送任何的IO请求。一个节点被标记为dead,此时所有它那里注册过的任何信息对HDFS来说都不起作用了,这也引起了部分block的拷贝数量少于指定值。NameNode会不断跟踪需要备份的block并且启动复制。必须进行重新复制的理由是:一个DataNode可能因为故障而不可用,拷贝过程可能失败,DataNode上的磁盘可能坏掉,或者副本数量会被增加。集
43、群的重新均衡HDFS架构会兼容数据重新均衡的策略。其设想是当节点 A的剩余空间明显低于某一阈值时,HDFS会自动选择从其他节点移动数据到节点A;当对某个特定文件有紧急高优先级的需求时,HDFS将会动态增加文件拷贝及重新均衡数据。但目前这些设想还没有实现。数据组织流水线复制当客户端向HDFS文件写入数据时,一开始是写到本地临时文件中。假设该文件的副本系数为3,当本地临时文件累积到一个数据块的大小时,客户端会从Namenode获取到一份Datanode列表用于存储副本,接着客户端开始向列表中第一个Datanode传输数据。此Datanode会分多个小块(4KB)来接收数据,将每一部分写入本地目录的
44、同时传输该部分到列表中第二个Datanode。第二个Datanode也像前一个节点一样接收数据和存储,并传给第三个节点。最后第三个Datanode接收数据并存储在本地。因此Datanode可以流水线地从前一个节点接收数据,然后转发给下一个节点。这样数据便以流水线的方式从前一个Datanode复制到下一个。数据组织可访问性HDFS向应用提供了多种访问方式。用户可以通过原生的FileSystemJavaAPI接口来访问,也可以通过C语言的封装API访问,甚至还可以通过浏览器的方式访问HDFS中的实例文件。目前正在开发通过WebDAV协议来访问HDFS。FS ShellHDFS支持以文件和目录的形式
45、组织用户数据。它提供了一个命令行接口(FSShell)让用户与HDFS中的数据进行交互。命令的语法类似于用户熟悉的其他shell(例如bash,csh)工具回收存储空间u文件的删除及恢复文件的删除及恢复u当一个文件被用户或应用删除时,它并不会立即从HDFS中移除,相反它会先被重命名到目录/trash下的一个文件。因此该文件只要还在/trash下,就可以快速的还原。目录/trash下的文件的保存时长是可以配置的,超过了这个时限后NameNode将会把它从HDFS命名空间中删除。文件的物理删除会引起对应block空间的释放。可以注意到,从用户删除一个文件到HDFS空闲空间的增加会有一定的延迟。u只
46、要被删除的文件还在/trash目录中,用户就可以还原它。如果用户想还原被删除的文件,可以通过浏览/trash目录找回该文件,而/trash目录仅保存被删除文件的最后版本。/trash目录与其他的目录几乎一样,除了HDFS会应用一个特殊策略来自动删除该目录下的文件。目前默认策略是删除/trash中保留时间超过6小时的文件。以后这个策略可以通过一个被定义的接口来配置。u减少副本系数减少副本系数u当副本系数被降低时,NameNode会选择删除多余的副本,决定好后的下次Heartbeat检查会传递这个信息给DataNode.DataNode接收命令后即删除相应的block,这样HDFS集群对应的空闲空
47、间便会增大。同样,从调用setReplication API到集群空间的回收会有一段时间的延迟。元数据磁盘故障FsImage及EditLog文件是HDFS系统的重要数据结构,这些文件的异常会导致HDFS无法正常工作。因此NameNode可以配置拥有FsImage和EditLog的多份拷贝。对FsImage或EditLog文件的更改会引起所有复本的同步更新,这同步更新的过程会降低NameNode可以支持的命名空间每秒事务处理的频率。但这是可以接受的,因为即使HDFS应用对数据很敏感,也不会对元数据敏感。当NameNode重启时,它会选择使用最新版本的FsImage和EditLog文件。NameN
48、ode在HDFS集群中属于单点故障。如果NameNode宕掉了,必须要经过人工来处理和修复,目前还不支持NameNode的自动重启和运行NameNode服务于备份服务器。快照(Snapshot)支持在某个时间点拷贝并保存一份数据。一种应用场景是快照用于将HDFS实例回滚到故障之前某个合适的状态(HDFS目前不支持Snapshot,但会在以后的版本中实现)。在HDFS中,无论是NameNode节点还是DataNode节点都需要使用它们所在的本地文件系统来存储与自己相关的数据,如:NameNode节点存储系统命名空间的元数据,DataNode节点存储文件的数据块数据。对于NameNode节点或是D
49、ataNode节点,我们多可以为它们配置多个本地文件系统的存储路径,不同的是,NameNode节点中的所有存储路径存储的数据基本上是一样的,而DataNode节点中的存储路径会分别存储不同的文件数据块。HDFS对节点存储路径的实现被抽象成了一个StorageDirectory类HDFS中的数据存储路径 StorageDirectoryuroot:节点存储目录所在本地文件系统的目录;ulock:排它锁,同步控制节点对该存储目录的操作;udirType:存储路径所属的节点类型(NameNode/DataNode);u无论是NameNode节点还是DataNode节点,StorageDirector
50、y都会把它们出过来的数据保存到自己的子目录current/下,同时为了保证数据的一致性,在子目录current/下都会有一个版本文件VERSION。NameNode和DatanNode存储目录的版本文件NameNode存储目录的版本文件DataNode存储目录的版本文件StorageDirectory除了提供保存节点数据的功能外,还提供了对存储数据的粗粒度事务操作如:备份/恢复/提交等。StorageDirectory在在恢复它存储的数据之前会先分析自己所出的状态(analyzeStorage()方法),然后根据自己当前作出的状态来执行相应的恢复操作(doRecover()方法)90客户端联系