第9讲Hadoop莫同15210525337motong@ss.pku.edu.cn上一讲回顾•应用案例–词频–倒排索引–相似比较•算法调优–Map–Reduce•算法设计–Key-value设置–Map/reduce设置•应用作业内容提要1•Hadoop概述2•HDFS3•Hbase4•Zookeeper5•Pig/Hive6•Yarn内容提要1•Hadoop概述2•HDFS3•Hbase4•Zookeeper5•Pig/Hive6•YarnHadoop概述•开源云计算系统简介开源云计算系统对应的商用云计算系统HadoopHDFSGoogleGFSHadoopMapReduceGoogleMapReduceHadoopHBaseGoogleBigtableHadoopZooKeeperGoogleChubbyEucalyptus、EnomalyECP、Nimbus、openstackAmazonEC2Eucalyptus、openstackAmazonS3SectorandSphere无直接对应系统abiquo无直接对应系统MongoDB无直接对应系统Hadoop概述•古代,人们用牛来拉重物。当一头牛拉不动一根圆木时,他们不曾想过培育更大更壮的牛。同样,我们也不需要尝试开发超级计算机,而应试着结合使用更多计算机系统–格蕾斯.霍伯Hadoop概述•数据的产生速度与日俱增–个人:照片、视频、邮件、文档…–软件:数据、日志…–硬件:IOT…–2011年接近1.8ZB•1ZB=1000EB=1000000PB=1000000000TBHadoop概述•数据产生速度增加•磁盘存储容量增加•磁盘数据读取速度却未能与时俱进–1990年1370MB磁盘拥有4.4MB/s的传输速度,全部读取需要5min–2010年1TB磁盘拥有100MB/s的传输速度,全部读取需要2.5hour–解决方案?Hadoop概述•多个磁盘的并行读取•数据通过多个磁盘保存•硬件故障的概率将非常高,成为常态•避免单一硬件故障造成数据损失•并行的数据处理与分析Hadoop提供一个可靠的共享存储分析系统!Hadoop概述•Hadoop–起源于一个开源的网络搜索引擎项目ApacheNutch–由ApacheLucene创始人DougCutting创建–Lucene是一个广泛使用的文本搜索系统库–Hadoop名字的含义:Cutting的孩子给一头吃饱了的棕黄色大象取的名字简短、容易发音和拼写,没有太多的含义,并且不会被用于别处Hadoop概述•Hadoop–Nutch起源于2002年–一个可以运行的网页爬取工具和搜索引擎系统–缺乏一个可扩展的架构–借鉴GFS,实现了一个开源的实现——NDFS–2005年,Nutch上实现了一个MapReduce系统,同年,完成了Nutch所有主要算法的MapReduce+NDFS的移植–MapReduce+NDFS不只适用于搜索–2006年,MapReduce+NDFS从Nutch中移出这个移出的子项目成为了Apache的顶级项目——HadoopHadoop概述•Hadoop的发展2004 实现HDFS和MapReduce的最初版本2005.12 Nutch移植到新框架,Hadoop在20个节点上稳定运行2006.1 Doug Cutting加入Yahoo!2006.2 Hadoop项目正式启动2006.11 研究集群增加到600个节点2008.4 900个节点运行1TB排序测试集仅需209秒2009.3 17个集群总共24000台机器Hadoop概述•Hadoop成为一组相关项目的统称–MapReduce——分布式数据处理模型和执行环境–HDFS——分布式文件系统–HBase——分布式、按列存储数据库–ZooKeeper——分布式、可用性高的协调服务–Pig——数据流语言和运行环境,用于检索非常大的数据集–Hive——分布式、按列存储的数据仓库内容提要1•Hadoop概述2•HDFS3•Hbase4•Zookeeper5•Pig/Hive6•YarnHDFS•设计理念–超大文件——GB、TB甚至PB级–一次写入、多次读取–在经济、易损的硬件基础之上构建可靠系统–较高的时间延迟许可–大量的较小文件–末端添加,单一writer,不支持任意位置修改HDFS•主要概念–数据块–Namenode–Datanode–命令行接口–基本文件系统操作•Hadoopfs–help获取所有命令帮助文件HDFS•体系结构——回想一下GFS–NameNodeÆMaster–DataNodeÆChunkseverHDFS•运行机制——可靠性保障–一个namenode和多个datanode–数据复制(冗余机制)•存放的位置(机架感知策略)–故障检测•Datanode–心跳包(检测是否宕机)–块报告(安全模式下检测)–数据完整性检测(校验和比较)•Namenode–日志文件–镜像文件HDFS•运行机制——读文件流程•流程:–1.客户端调用DistributedFileSystem对象的open()方法–2.DistributedFileSystem通过RPC联系namenode,得到所有数据块信息,对每个数据块,namenode返回存有该块副本的datanode地址,并且这些datanode根据他们与客户端的距离进行排序–3.DistributedFileSystem类返回一个FSDataInputStream对象给客户端并读取数据–4.客户端对该对象调用read()方法读取数据HDFS•运行机制——读文件流程•流程:–5.FSDataInputStream连接距离最近的datanode读取数据,数据读取完毕时FSDataInputStream会关闭与该datanode的连接,然后寻找下一个块的datanode–6.FSDataInputStream可能并行读取多个datanode,当客户端完成读取时,对FSDataInputStream调用close()方法HDFS•运行机制——读文件流程•流程:–7.FSDataInputStream从datanode读取数据时如果遇到错误,会尝试从该块的另外一个最近的datanode读取数据,并记住故障datanode保证以后不会继续从该节点读取其他块–8.每个读取的块通过校验和确认以保证数据完整–9.如果FSDataInputStream发现一个损坏的块,则在从其他datanode读取块之前通知namenodeHDFS•Hadoop与网络拓扑–Node之间的距离是什么意思?–衡量两个节点之间的带宽很难简单实现–通过网络拓扑结构来衡量节点距离•网络看做是一棵树•节点间距离是节点到他们最近的共同祖先的距离和–同一节点–同一机架上的不同节点–同一数据中心中不同机架的节点–不同数据中心的节点–…HDFS•运行机制——写文件流程•流程:–1.客户端调用DistributedFileSystem对象的create()方法创建文件–2.DistributedFileSystem通过RPC联系namenode,namenode执行各种检查确保待建立的文件不存在,且客户端拥有创建该文件的权限–3.如果检查通过,namenode为新文件创建一条记录,否则抛出一个IOException异常–4.DistributedFileSystem给客户端返回一个FSDataOutputStream对象进行写数据HDFS•运行机制——写文件流程•流程:–5.FSDataOutputStream将待写入数据分成数据包并写入内部队列dataqueue–6.DataStreamer处理dataqueue,根据datanode列表要求namenode分配适合的新块来存储数据备份–7.namenode分配的数据备份datanode(通常3个)形成一个管线,DataStreamer将数据包传输给管线中的第一个节点,然后该节点存储完之后发送给第二个节点,以此类推HDFS•运行机制——写文件流程•流程:–8.FSDataOutputStream维护一个确认队列ackqueue,当收到管线中所有datanode的确认后,该数据包从确认队列中删除–9.如果datanode发生故障,则关闭管线,将确认队列中的数据包添加回数据队列的最前端,将故障的数据块和datanode信息返回给namenode以便该datanode恢复后删除错误数据块,从管线中删除错误节点,并把剩余数据块写入正常datanodeHDFS•运行机制——写文件流程•流程:–10.如果复本数量不足,则namenode根据datanode分配新的datanode并创建新的复本,该datanode被加入管线继续正常存储HDFS•复本的选择–复本分布性越高,则复本效果越好,但传输代价越大–Hadoop默认复本布局•第一个复本放在节点本身•第二个复本放在与第一个不同且随机选择的机架中的节点•第三个复本放在与第二个复本相同的机架,但随机选择的节点上•其他复本放在集群中随机选择的节点上•同时考虑节点的存储负载和访问负载•HDFS与GFS比较–中心服务器模式的差异•GFS:多台物理服务器,选择一台对外服务,损坏时可选择另外一台提供服务•HDFS:单一中心服务器模式,存在单点故障HDFS•HDFS与GFS比较–子服务器管理模式差异•GFS:ChunkServer在Chubby中获取独占锁表示其生存状态,Master通过轮询这些独占锁获知ChunkServer的生存状态•HDFS:DataNode通过心跳的方式告知NameNode其生存状态•GFS中,Master损坏时,替补服务器可以快速获知ChunkServer的状态•HDFS中,NameNode损坏后,NameNode恢复时需要花费一段时间获知DataNode的状态•在添加数据存储节点时,GFS的伸缩性较HDFS要好HDFS•HDFS与GFS比较–HDFS具备安全模式•获知数据块副本状态,若副本不足,则拷贝副本至安全数目(如3个)–GFS不具备安全模式•副本损坏处理:API读取副本失败时,Master负责发起拷贝任务HDFS•HDFS与GFS比较–HDFS具备空间回收机制•文件删除时,仅删除目录结构•实际数据的删除在等待一段时间后实施•优点:便于恢复文件HDFS内容提要1•Hadoop概述2•HDFS3•Hbase4•Zookeeper5•Pig/Hive6•YarnHBase•为什么需要HBase•HTable的逻辑组织•HBase的运行机制•HBase与HDFS•HBase的对外接口HBase•引入HBASE的原因–数据库系统已无法适应大型分布式数据存储的需要–改良的关系数据库(副本、分区等)难于安装与维护–关系模型对数据的操作使数据的存贮变得复杂HBase•引入HBASE的原因–HBASE从设计理念上就为可扩展做好了充分准备–空间的扩展只需要加入存储结点–使用‘表’的概念,但不同于关系数据库,不支持SQL–实质上是一张极大的、非常稀疏的,存储在分布式文件系统上的表HBaseHBase历史2006年底由PowerSet的ChadWalters和JimKellerman发起2008年成为ApacheHadoop的一个子项目现已作为产品被使用WorldLingoStreamy.comOpenPlacesYahooAdobeHBASE用例-WebTable•存储抓取网页和相关信息•每个页面对应一行,是个有百万行的大表•要基于此表进行分析与解析并由搜索引擎对关键字进行索引•表需要并发地被众多网页抓取程序随机地访问以及更新数据•表内容也要作为网页实时缓存被大量用户随机访问HBase逻辑视图Row KeyTime StampColumn ContentsColumn AnchorColumn “mime”cnnsi.commy.look.ca“com.cnn.”T9CNNT8CNN.COMT6“html.. “Text/htmlT5“html.