资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,*,Hadoop基本原理与入门实践,网络文化与数字传播中心北京市重点实验室,1,讲述内容,干货奉上,第,1,章,Hadoop,的起源,第2章 hadoop 环境配置,第3章,Hadoop,实战(wordcount与倒排索引),更多内容,第4章 Hadoop 细节,2,什么是大数据,一个交易系统中的大数据是什么,看看现在公司核心业务是什么;并由此产生了多少数据,又有多少数据是公司要处理的。,但是一个传统平台并没有这么高的成本效益来处理大数据;企业需要一个很好的平台能够,搜集所有有效的数据,:有效地处理大量数据,与系统进行交互和通信,这就是,Hadoop,。,那么小型数据平台和大型数据平台又有什么区别?首先水平扩展性,这是一个很有挑战性的问题;必须能够方便的使用并且能够非常灵活在一些不同的应用中使用,也能在虚拟的云计算中使用的平台。这就是企业所期待的平台,大数据平台。,3,hadoop的起源,Hadoop 开始时时nutch的一个子项目,而nutch又是Apache Lucene的子项目。这三个项目都是由Doung Cutting创立,每个项目都是上一个项目的演进。,Lucene是搜索引擎开发工具包,提供了一个纯Java的高性能全文检索,他可以方便嵌入实际应用中实现全文搜索、索引功能。,Nutch项目始于2002年,是以Lucene为基础的实现的搜索引擎应用。Lucene为nutch提供了文本搜索和索引API,Nutch不光有搜索功能,还有数据抓取功能。,很快,Doug Cutting和Mike(Hadoop和Nutch的另一位创始人)就意识到,他们的架构无法扩展支持数以十亿的网页。这时候,Google的研究人员在2003 ACM会议上发表描述了谷歌的分布式文件系统,即GFS的论文,即时为他们提供了帮助,解决了网络抓取和索引过程中产生大量文件存储的需求,于是,他们开始写GFS的一个开源实现,即Nutch的分布式文件系统,NDFS。,2004年,4,2004,年,,google,发表论文介绍了他们的,MapReduce,系统。,2005,年,,Nutch,开发人员在,Nutch,上实现了第一个,MapReduce,系统,并在年中实现了算法完全移植。这样,,Nutch,的,NDFS,和,MapReduce,实现不只是适用于搜索领域。,2006,年,2,月,开发人员将,NDFS,和,MapReduce,移出了,Nutch,形成了,Lucene,的一个子项目,称为,Hadoop,。与此同时,创始人,Doung,加入了,yahoo,,,yahoo,将,Hadoop,发展成一个能够处理,Web,数据的系统。,2008,年,2,月,,Yahoo,!宣布其搜索引擎使用的索引是在一个拥有,1,万个内核的,Hadoop,集群上构建的。,2008,年,1,月,,Hadoop,称为,Apache,的顶级项目。至今,除了,Yahoo,!外,还有,Facebook,等其他公司使用,Hadoop,架构。,2008,年,4,月,,Hadoop,打破世界纪录,成为最快的,TB,级别排序系统。通过一个,910,个节点的集群,,Hadoop,在,209,秒内完成对,1TB,的数据的排序。,2008,年,11,月,,Google,的报告中声称,它的,MapReduce,对,1TB,排序只用了,68,秒。,2009,年,5,月,,Yahoo,!的团队排序用了,62,秒。,5,什么是hadoop?它能干什么?,6,诞生,背景:,谷歌面对的数据和计算难题,1.大量的网页怎么存储?,2.搜索算法,7,什么是hadoop?,Hadoop是一个由Apache基金会所开发的分布式系统基础架构。,用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。,Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高,容错性,的特点,并且设计用来部署在,低廉,的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着,超大数据集,(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。,Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。,8,Hadoop 体系结构,HDFS(Hadoop Distributed File System),和,Mapreduce,是hadoop的两大核心,HDFS,(文件系统)实现分布式存储的底层支持,Mapreduce,(编程模型)实现分布式并行任务处理的程序支持,9,Hadoop 子项目家族,10,11,Hadoop HDFS,HDFS:采用Master/Slave结构模型,Master,NameNode JobTracker,DataNode,TaskTracker,DataNode,TaskTracker,DataNode,TaskTracker,DataNode,TaskTracker,Secondary NameNode,12,HDFS,HDFS,整个文件系统的大脑,它提供整个文件系统的目录信息,各个文件的分块信息,数据块的位置信息,并且管理各个数据服务器。,DataNode,分布式文件系统中的每一个文件,都被切分成若干个数据块,每一个数据块都被存储在不同的服务器上,此服务器称之为数据服务器。,NameNode,在,HDFS,中,,namenode,的服务提供整个,HDFS,文件系统的,namespace,管理,块管理等所有服务,,metadata,所有的相关服务都是由,namenode,进程在提供。,Block,每个文件都会被切分成若干个块,(,默认,64MB),每一块都有连续的一段文件内容,是存储的基本单位。,Editlog,FSEditLog,类是整个日志体系的核心,提供了一大堆方便的日志写入,API,以及日志的恢复存储等功能。,Secondary,NameNode,的主控服务器,在身后默默的拉取着主控服务器的日志,等待主控服务器牺牲后被扶正。,HDFS术语,13,HDFS主要组件的功能,NameNode DataNode,存储元数据 存储文件内容,元数据保存在内存中 文件内容保存在磁盘,14,15,16,17,Hadoop MapReduce,也采用了,Master/Slave,(,M/S,)架构,18,MapReduce术语,Hadoop,术语,说明,Job,用户的每一个计算请求,称为一个作业。,JobTracker,用户提交作业的服务器,同时,它还负责各个作业任务的分配,管理所有的任务服务器。,Task,每一个作业,都需要拆分开了,交由多个服务器来完成,拆分出来的执行单位,就称为任务。,TaskTracker,任劳任怨的工蜂,负责执行具体的任务。,19,20,21,MapReduce,22,第二章 hadoop环境配置,孩儿们操练起来!,23,实验环境,1.PC:linux环境:vmware虚拟机下unbuntu 14.042,或windows环境:windows+Cygwin,2.java环境:java version 1.7.0_75,3.Apache官网下载 hadoop 2.6.0,4.SSH:windows下可以使用SecureCRT或putty等ssh client程序,作用是用来远程连接linux服务器,linux下可以直接使用ssh命令,24,下载Hadoop,25,Hadoop目录结构,26,为什么要配环境变量,1.,告诉计算机Hadoop来了:,例如输命令调用Hadoop时告诉计算机hadoop的位置,配置PATH路径。,2.,告诉Hadoop计算机的信息,:将Hadoop部署到计算机上,并用hadoop完成一项工作时需要计算机的一些资源,例如登陆HDFS时需要用到计算机端口。,3.Hadoop工作时需要按需求配置一些参数,例如告诉Hadoop做分布式运算时有多少个节点。,27,演出开始 Hadoop三种运行模式,单机模式,:,只有一个,JVM,进程,没有分布式,不使用,HDFS,伪分布式模式,:,只有一台机器,每个,Hadoop,守护进程都是一个独立的,JVM,进程,通常用于调试。,完全分布式模式,:,运行于,多台机器上,真实环境。,28,Hadoop三种运行模式,1.单机模式:安装简单,几乎不用作任何配置,但仅限于调试用途,2.伪分布模式:在单节点上同时启动namenode、datanode、jobtracker、tasktracker、secondary namenode等5个进程,模拟分布式运行的各个节点,3.完全分布式模式:正常的Hadoop集群,由多个各司其职的节点构成,29,Hadoop配置有关文件,30,Hadoop伪分布环境搭建,步骤:1.配置系统环境变量:/etc/profile,2.配置hadoop环境变量:修改hadoop目录以下文件,hadoop-env.sh、mapred-site.xml、core-site.xml,hdfs-site.xml、yarn-site.xml,3.SSH免密码登陆,31,Hadoop伪分布环境搭建,1,.配置 etc/profile,添加:,export JAVA_HOME=/home/flamingo/jdk1.7.0_75,export HADOOP_HOME=/home/flamingo/hadoop-2.6.0,export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib,export PATH=$PATH:$JAVA_HOME/bin;$PATH:$HADOOP_HOME/bin,2.配置 hadoop-env.sh,添加:,export JAVA_HOME=/home/flamingo/jdk1.7.0_75,32,3.修改hadoop-2.6.0文件权限为用户权限:,默认没有mapred-site.xml文件,复制mapred-site.xml.template一份,并把名字改为mapred-site.xml,4.配置下面4个重要文件:,mapred-site.xml,core-site.xml,hdfs-site.xml,yarn-site.xml,33,mapred-site.xml,mapred.job.tracker,Master.hadoop:9001,Host or IP and port of JobTracker.,34,core-site.xml,hadoop.tmp.dir,/home/flamingo/hadoop-2.6.0/tmp,Abase for other temporary directories.,fs.default.name,hdfs:/Master.hadoop:9000,35,hdfs-site.xml,dfs.replication,1,dfs.name.dir,/home/flamingo/hadoop-2.6.0/dfs/name,dfs.data.dir,/home/flamingo/hadoop-2.6.0/dfs/data,36,yarn-site.xml:,yarn.nodemanager.aux.services,mapreduce_shuffle,37,SSH免密码登陆,1、安装SSH:sudo apt-get install ssh,生成公钥与私钥:ssh-keygen-t rsa,2.ls-al/home/flamingo看是否创建好.ssh目录,3.创建.ssh目录:mkdir/home/flamingo/.ssh,4.将公钥加入到用于认证的公钥文件中:,进入.ssh目录:cd.ssh,cp id_rsa.pub authorized_keys,5.免密码登陆:ssh localhost,配置完成!,38,登陆HDFS,格式化NameNode:bin/hadoop namenode-format,启动HDFS:start-dfs.sh ,start-yarn.sh 或者直接 sbin/start-all.sh,查看web页面信息:localhost:50070,39,Eclipse下搭建Hadoop2.6.0开发环境,1.安装eclipse,2.下载hadoop对应版本的eclipse插件。,3.把插件放到eclipse/plugins目录下,4.重启eclipse,打开Windows,Preferences后,在窗口左侧会有Hadoop Map/Reduce选项,点击此选项,在窗口右侧设置Hadoop安装路径。,5.配置Map/Reduce Locations。,在Window-Show View中打开Map/Reduce Locations.在Map/Reduce Locations中新建一个Hadoop Location。在这个View中,右键-New Hadoop Location。在弹出的对话框中你需要配置Location name,如Hadoop,还有Map/Reduce Master和DFS Master。这里面的Host、Port分别为你在mapred-site.xml、core-site.xml中配置的地址及端口。,40,第三章,Hadoop,实战(wordcount),先来说说mapreduce编程模型,41,从 MapReduce 自 身 的 命 名 特 点 可 以 看 出,,MapReduce由 两 个 阶 段 组 成:,Map,和,Reduce,。用户,只需编写,map(),和,reduce(),两个函数,即可完成简单的分,布式程序的设计。,map()函数,以,key/value,对作为输入,产生另外一系列,key/value 对作为中间输出写入本地磁盘。MapReduce 框,架会自动将这些中间数据按照 key 值进行聚集,且 key 值,相同(用户可设定聚集策略,默认情况下是对 key 值进行,哈希取模)的数据被统一交给 reduce()函数处理。,reduce()函数,以 key 及对应的 value 列表作为,输入,,,经合并 key 相同的 value值后,产生另外一系列 key/value,对作为最终,输出,写入 HDFS。,42,MapReduce核心功能,43,Mapreduce版,“,Hello World,”,WordCount,功能:统计输入文件中的每个单词出现的次数,在mapreduce中,可以这样编写(伪代码):,44,45,HDFS的上传和下载,通过ecplipse,通过命令行,bin/hadoop fs-put/本地路径/hdfs路径,bin/hadoop fs-get/hdfs路径/本地路径,46,Mapreduce能处理哪些问题?,MapReduce 能够解决的问题有一个共同特点:,任务可以被分解为多个子问题,且这些子问题相对独立,,彼此之间不会有牵制,待并行处理完这些子问题后,任,务便被解决。,谷歌在论文中提到了 MapReduce 的一些典型应用,包括分布式 grep、URL 访问频率统计、Web 连接图反转、,倒排索引构建、分布式排序等,稍微复杂一些如K-means,聚类、朴素贝叶斯分类问题,都可以用mapreduce的模型建,立分布式运算来解决。,47,Mapreduce不能处理哪些问题?,不能划分为多个任务的问题,如:,1.Fibonacci 数值计算:Fibonacci 数值计算时,下一个结果需要,依赖于前面的计算结果,,也就是说,无法将该问题划分成若干个互不相干的子问题,因而不能用 MapReduce 解决。,2.层次聚类法。层次聚类法是应用最广泛的聚类算法之一。其主要思想是,开始时,将每个对象归为一类,然后不断迭代,直到所有对象合并成一个大类(或者达到某个终止条件);在每轮迭代时,需计算两两对象间的距离,并合并距离最近的两个对象为一类。该算法需要计算两两对象间的距离,也就是说,每个对象和其他对象均有关联,,因而该问题不能被分解成若干个子问题,进而不能用 MapReduce 解决。,48,倒排索引,1.现有一批电话清单,记录了用户A拨打给用户B的记录,2.需要做一个倒排索引,记录拨打给B用户所有A的用户,13264595857 10086,12342523423 10086,12312312123 1326420398,23123321312 120,52352535344 10086,14232423212 120,10086 13264595857丨12342523423丨52352535344,1326420398 12312312123 丨,120 23123321312丨14232423212丨,输出格式:,49,算法思路,源文件,分割原始数据,以被叫作为key,以主叫作为value,拥有相同被叫的主叫号码们,把主叫号码汇总,输出倒排索引,输出到HDFS,10086 13264595857,12342523423,52352535344,12342523423 10086,12312312123 1326420398,23123321312 120,10086 13264595857,1326420398 12312312123,120 23123321312,10086 13264595857丨12342523423丨52352535344,1326420398 12312312123 丨,120 23123321312丨14232423212丨,50,第四章 关于hadoop的更多细节,51,Hadoop,名字的起源,Hadoop,这个名字不是一个缩写,它是一个虚构的名字。该项目的创建者,Doug Cutting,如下解释,Hadoop,这一名称的来历:,这个名字是我的孩子给一头吃饱了的棕黄色大象取的。我的命名标准是简 短,容易发音和拼写,没有太多的含义,并且不会被用于别处。小孩子是这方面的高手。,Googol,就是小孩子起的名字。,52,Hadoop 子项目家族,53,Hadoop 子项目家族,54,Hadoop家族成员介绍,Hadoop Common,Hadoop体系最底层的一个模块,为Hadoop各子项目提供各种工具,如:配置文件和日志操作等。,Avro,Avro是doug cutting主持的RPC项目,有点类似Google的protobuf和Facebook的thrift。avro用来做以后hadoop的RPC,使hadoop的RPC模块通信速度更快、数据结构更紧凑。(RPC:Remote Procedure Call Protocol远程过程调用协议),Chukwa,Chukwa是基于Hadoop的大集群监控系统,由yahoo贡献。,HBase,基于Hadoop Distributed File System,是一个开源的,基于列存储模型的分布式数据库。,55,Hive,hive类似CloudBase,也是基于hadoop分布式计算平台上的提供data warehouse的sql功能的一套软件。使得存储在hadoop里面的海量数据的汇总,即席查询简单化。hive提供了一套QL的查询语言,以sql为基础,使用起来很方便。(数据库是面向事务的设计,数据仓库是面向主题设计的。),Tip:还记得数据仓库和数据库的区别吗?,传统数据库主要是为应用程序进行数据处理,未必按照同一主题存储数据;数据仓库侧重于数据分析工作,是按照主题存储的。这一点,类似于传统农贸市场与超市的区别市场里面,白菜、萝卜、香菜会在一个摊位上,如果它们是一个小贩卖的;而超市里,白菜、萝卜、香菜则各自一块。也就是说,市场里的菜(数据)是按照小贩(应用程序)归堆(存储)的,超市里面则是按照菜的类型(同主题)归堆的。,56,Pig,Pig是SQL-like语言,是在MapReduce上构建的一种高级查询语言,把一些运算编译进MapReduce模型的Map和Reduce中,并且用户可以定义自己的功能。Yahoo网格运算部门开发的又一个克隆Google的项目Sawzall。,ZooKeeper,Zookeeper是Google的Chubby一个开源的实现。它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。,57,现实应用中的Hadoop,现在互联网、世界,500,强、中小创新企业都在某些地方、某些程度上或者在适应平台上都会用到,Hadoop,,而且会跨越多个不同纵向的层面。现在通过,ETL(Extract Transform and Load),可以从其他的新闻中搜集数据进行处理,把它放在系统上。挖掘数据,这是一个非常普遍的用途。其关注点是,探究数据;用观测数据找到未来的形式,丰富数据的使用。这点经常用于,Web,应用程序,也是雅虎经常用到的特性。现在,Hadoop,在,4.2,多万个电脑上使用了。,58,Hadoop平台的特点,特点可扩展性;其次,可控制性;第三是可靠性。,Hadoop,在整个的空间不间断的运行,可以存储各种各样的数据,尤其对于大多数的数据特别是很多公司投资的新数据(非传统传统结构的数 据),而且它必须具有经济效益,这更是不能低估和忽视的一点。在此需要强调一下,大数据意味着高成本,特别是平台扩展和维护时产生的花费。,如果想有效的缩减成本,就需要关注,Hadoop,的应用和部署。以交易系统为例,包括了网站、网址、数据系统和与客户的交流,下面还有业务情报和分析,这里会用到很多这样的系统。这样的系统在成千上万的公司中都会用到,价值非常之高,也需要用,Hadoop(,角色,),。这其中会用到一些新技术,而由此产生的数据与传统的数据结构不会很匹配,这样会影响到其他的应用上的空间或性能和容量,所以就需要,Hadoop,来高效地把数据搜集起来对它进行处理和精炼。,59,云计算主要特点,是,数据密集型计算,方式,同时还具有,移动计算,的特点,即移动计算到数据,而不是移动数据到计算,因为将,CPU,移动到数据的代价更小。,关键技术,虚拟化技术、并行计算、分布式存储、分布式数据管理,60,Hdoop源于Google,GFS(Google File System):,是一个分布式文件系统,隐藏下层负载均衡、冗余复制等细节,对上层程序提供一个同一的分布式,文件系统,API,接口,。,MapReduce,:通过把大部分的分布式运算抽象为,Map Reduce,操作,,Map,是把输入分解为中间的,Key/Value,对,,Reduce,是把,Key/Value,合并最终输出,Output,,这两个函数有程序员提供个系统,下层设置把,Map,和,Reduce,操作分布在集群上运行,并把结果存储在,GFS,上。,BigTable,:是一个大型的分布式数据库,这个数据库不是关系型数据库,而是一个巨大的表格,来存储结构化数据。,61,GFS,设计上主要有八个特点,大文件和大数据块,:数据文件的大小普遍在,GB,级别,而且其每个数据块默认大小为,64MB,,这样做的好处是减少了元数据的大小,能使,Master,节点能够非常方便地将元数据放置在内存中以提升访问效率。,操作以添加为主,:因为文件很少被删减或者覆盖,通常只是进行添加或者读取操作,这样能充分考虑到硬盘线性吞吐量大和随机读写慢的特点。,支持容错,:首先,虽然当时为了设计方便,采用了单,Master,的方案,但是整个系统会保证每个,Master,都会有其相对应的复制品,以便于在,Master,节点出现问题时进行切换。其次,在,Chunk,层,,GFS,已经在设计上将节点失败视为常态,所以能非常好地处理,Chunk,节点失效的问题。,62,GFS,设计上主要有八个特点,高吞吐量,:虽然其单个节点的性能无论是从吞吐量还是延迟都很普通,但因为其支持上千的节点,所以总的数据吞吐量是非常惊人的。,保护数据,:首先,文件被分割成固定尺寸的数据块以便于保存,而且每个数据块都会被系统复制三份。,扩展能力强,:因为元数据偏小,使得一个,Master,节点能控制上千个存数据的,Chunk,节点。,支持压缩,:对于那些稍旧的文件,可以通过对它进行压缩,来节省硬盘空间,并且压缩率非常惊人,有时甚至接近,90%,。,用户空间,:虽然在用户空间运行在运行效率方面稍差,但是更便于开发和测试,还有能更好利用,Linux,的自带的一些,OSIX API,。,63,Hadoop 诞生于大搜索应用,Doug Cutting,MapReduce|GFS|BigTable,64,名词解释,Hadoop,Apache开源的分布式框架。源自Google GFS,BigTable,MapReduce 论文。,HDFS,HDFS(Hadoop Distributed File System),Hadoop 分布式文件系统。NameNode,HDFS命名服务器,负责与DataNode文件元信息保存。DataNode,HDFS数据节点,负责存储数据存储并汇报给NameNode。SecondaryNamenode,NameNode的镜像备份节点,Map Reduce,JobTracker,hadoop的Map/Reduce调度器,负责与TackTracker通信分配计算任务并跟踪任务进度。TaskTracker,启动和管理Map和Reduce子任务的节点。,65,典型部署,5-4000,台服务器,(8-core,8-24GB RAM,4-12 TB,gig-E),;两层网络架构;每个机柜,20-40,节点,66,Hadoop的版本,0.20.x,是历史稳定版,0.23.x,是根据,0.20.x,的稳定版引入了,federation,和,yarn,但缺少,NN,和,HA,1.0.x,是当前稳定版,但和,0.20.x,系列差不多,只不过有些优化改进,1.1.x,是,beta,版,2.0.x,现在是,alpha,版,有,yarn,和,federation,的引入这点是和,0.23.x,是一样,但是它是基于,1.x,的稳定版,67,Hadoop HDFS,Hadoop,分布式文件系统,(HDFS),被设计成适合运行在通用硬件,(commodityhardware),上的分布式文件系统。,HDFS,是一个高度容错性的系统,适合部署在廉价的机器上。,HDFS,能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。,HDFS,放宽了一部分,POSIX,约束,来实现流式读取文件系统数据的目的。,HDFS,在最开始是作为,Apache Nutch,搜索引擎项目的基础架构而开发的。,HDFS,是,Apache Hadoop Core,项目的一部分。,68,HDFS作用,存储并管理,PB,级数据,处理非结构化数据,注重数据处理的吞吐量,(latency,不敏感),应用模式,(,一次写多次读),69,NameNode,Namenode,是一个中心服务器,单一节点(简化系统的设计和实现),负责管理文件系统的名字空间,(namespace),以及客户端对文件的访问,文件操作,,NameNode,负责文件元数据的操作,,DataNode,负责处理文件内容的读写请求,跟文件内容相关的数据流不经过,NameNode,,只会询问它跟那个,DataNode,联系,否则,NameNode,会成为系统的瓶颈,70,DataNode,一个数据块在,DataNode,以文件存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳,DataNode,启动后向,NameNode,注册,通过后,周期性(,1,小时)的向,NameNode,上报所有的块信息,心跳是每,3,秒一次,心跳返回结果带有,NameNode,给该,DataNode,的命令如复制块数据到另一台机器,或删除某个数据块。如果超过,10,分钟没有收到某个,DataNode,的心跳,则认为该节点不可用。集群运行中可以安全加入和退出一些机器,71,数据完整性,存储在某个,DataNode,上的数据很可能会被,损坏,可能是由于存储设备故障,网络故障或,者软件漏洞所致。,HDFS,客户端应用实现了对,文件内容的校验和。客户端创建,HDFS,文件时,它会计算每个文件的每个,block,的校验和并,在相同的命名空间下的单独隐藏的文件中保存这些值,当客户端接收文件数据时,会首先验证校验和。如,果校验失败,客户端会向其他拥有同样复本的,DataNode,重新获取数据。,72,文件,文件切分成块(默认大小,64M,),以块为单位,每个块有多个副本存储在不同的机器上,副本数可在文件生成时指定(默认,3,),NameNode,是主节点,存储文件的元数据如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表以及块所在的,DataNode,等,DataNode,在本地文件系统存储文件块数据,以及块数据的校验和可以创建、删除、移动或重命名文件,当文件创建、写入和关闭之后不能修改文件内容,73,安全模式,集群启动期间,,NameNode,节点会进入一个成为安全模式,(Safemode),的特殊状态。这种状态下不会做数据的备份,而,NameNode,会从,DataNodes,接收,Heartbeat,和,Blockreport,信息。一个,Blockreport,包含了该,DataNode,所存储的,block,列表。每个,block,指定了一个最少副本数量值。当数据,block,副本的最小序号通过,NameNode,核对时,我们认为该,block,是能安全复制的。在经过,NameNode,核对数据,block,的备份配置完成后,(,另外等待,30,秒,),,,NameNode,退出,Safemode,状态。然后,NameNode,会判断并列出副本数仍然少于配置要求的份数的,block,列表,如果列表不为空,那么它就会将这些,block,拷贝到其他,DataNode.,74,在实践过程中,系统启动的时候去修改和删除文件也会有安全模式不允许修改的出错提示,只需要等待一会儿即可。,SafeModeException,异常,org.apache.hadoop.dfs.SafeModeException:Cannot delete/user/hadoop/input.Name node is in safe mode.,那我们来分析下这个错误,从字面上来理解:,“,Name node is in safe mode.,”,现在就清楚了,那现在要解决这个问题,我想让,Hadoop,不处在,safe mode,模式下,能不能不用等,直接解决呢?答案是可以的,,只要在,Hadoop,的目录下输入:,$bin/hadoop dfsadmin-safemode leave,75,File System元数据持久化,HDFS,的命名空间数据保存在,NameNode,中。,NameNode,使用了名为,EditLog,的事务日志来持续记录了文件系统元数据所发生的每一个变化。例如,在,HDFS,中创建新文件时,,NameNode,会往,EditLog,插入一条记录来说明此操作。同样地,修改文件的副本系数时也会在,EditLog,记录这样的操作。,NameNode,将,EditLog,存储在本地操作系统的文件系统的一个文件中。整个文件系统的命名空间,包括,block,到,file,和,file system property,之间的映射关系,保存在一个成为,FsImage,的文件中。此,FsImage,也是作为一个文件形式存储在,NameNode,本地文件系统中,。,76,File System元数据持久化,DataNode,在本地文件系统中保存了,HDFS,数据,但它并不知道,HDFS,保存的具体内容,只是把,HDFS,数据保存在本地的独立的,block,中。,DataNode,在同一目录不会创建所有的文件,相反它会启发式的决定每个目录创建最合适的文件数和子目录数。一开始就在同一目录下初始化所有文件是不推荐的,因为本地文件系统可能不支持一个目录中创建过多数量的文件。当一个,DataNode,启动时,它会扫描本地文件系统,生成所有,HDFS,数据块的一个列表,然后向,NameNode,发送一个报告,(,这个报告称为,blockreport),。,77,HDFS关键运行机制-保障可靠性的措施,一个名字节点和多个数据节点数据复制(冗余机制),存放的位置(机架感知策略),故障检测,数据节点心跳包(检测是否宕机)块报告(安全模式下检测),数据完整性检测(校验和比较),名字节点(日志文件,镜像文件),空间回收机制,78,通信协议,所有,HDFS,的通信协议都基于,TCP/IP,协议,客户端会与,NameNode,机器上的,TCP,端口建立连接,并通过,ClientProtocol,协议与,NameNode,进行会话。而,DataNode,节点则通过,DataNode Protocol,与,NameNode,进行通信。远程过程调用,(RPC),同时封装了,Client,Protocol,和,DataNode Protocol,。而,NameNode,从不启动,任何,RPC,,相反它会响应来自,DataNode,或客户端的,RPC,。,79,数据磁盘故障,心跳及重新复制,每个,DataNode,会定期向,NameNode,发送一个心跳信息。如果,一部分,DataNode,与,NameNode,断开了连接,,NameNode,会根,据心跳信息来觉察到。,NameNode,会将最近没有发送心跳信,息的,DataNode,标记为,dead,状态,并且不会再像它们发送任何,的,IO,请求。一个节点被标记为,dead,,此时所有它那里注册过,的任何信息对,HDFS,来说都不起作用了,这也引起了部分,block,的拷贝数量少于指定值。,NameNode,会不断跟踪需要备,份的,block,并且启动复制。必须进行重新复制的理由是:一个,DataNode,可能因为故障而不可用,拷贝过程可能失败,DataNode,上的磁盘可能坏掉,或者副本数量会被增加,。,80,集群的重新均衡,HDFS,架构会兼容数据重新均衡的策略。其设想是当节点,A,的剩余空间明显低于某一阈值时,,HDFS,会自动选择从其他节点移动数据到节点,A,;当对某个特定文件有紧急高优先级的需求时,HDFS,将会动态增加文件拷贝及重新均衡数据。但目前这些设想还没有实现。,81,数据组织,流水线复制,当客户端向,HDFS,文件写入数据时,一开始是写到本地临时文件中。假设该文件的副本系数为,3,,当本地临时文件累积到一个数据块的大小时,客户端会从,Namenode,获取到一份,Datanode,列表用于存储副本,接着客户端开始向列表中第一个,Datanode,传输数据。此,Datanode,会分多个小块,(4 KB),来接收数据,将每一部分写入本地目录的同时传输该部分到列表中第二个,Datanode,。第二个,Datanode,也像前一个节点一样接收数据和存储,并传给第三个节点。最后第三个,Datanode,接收数据并存储在本地。因此,Datanode,可以流水线地从前一个节点接收数据,然后转发给下一个节点。这样数据便以流水线的方式从前一个,Datanode,复制到
展开阅读全文