版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Hadoop综述12024/5/13主要内容2第一篇HDFS分布式文件系统第二篇MapReduce第三篇Hbase简单介绍22024/5/13第一篇HDFS3一:TheDesignofHDFS二:HDFSConcepts三:应用程序示例四:DataFlow32024/5/13第二篇MapReduce4一:MapReduce基础二:MapReduce数据流三:MapReduce工作原理42024/5/13第三篇Hbase简单介绍5一:简介二:数据模型三:行、列、时间戳、API52024/5/13第一篇HDFS
分布式文件系统62024/5/131TheDesignofHDFSVerylargefiles大数据集合为目标数以千万计的文件典型文件大小一般都在千兆至T字节Streamingdataaccesswrite-one-read-many访问模型文件创建、写,关闭之后不需要改变简化数据一致性适合MapReduce框架,或者webcrawlerCommodityhardware错误检测和快速、自动的恢复是HDFS的核心架构目标72024/5/131TheDesignofHDFSLow-latencydataaccess流式读为主比之关注数据访问的低延迟,更关键在于数据访问的高吞吐量arbitraryfilemodifications严格要求在任何时候只有一个writer。文件尾在异构的软硬件平台间的可移植性移动计算Java编写82024/5/132HDFSConceptsblocksNamenodesandDatanodesTheCommand-LineInterface通信接口92024/5/132.1HDFSConcepts-blocksfilesinHDFSarebrokenintoblock-sizedchunks(64MBbydefault)减少元数据的量有利于顺序读写(在磁盘上数据顺序存放)副本的默认数目是3afilecanbelargerthananysinglediskinthenetwork.makingtheunitofabstractionablockratherthanafilesimplifiesthestoragesubsystem.102024/5/132.2HDFSConcepts-NamenodesandDatanodes
BasicmodelNamenodeDataNode心跳机制112024/5/132.2.1HDFSConcepts-NamenodesandDatanodes-Basicmodel
Basicmodel:Master/Slaves/ClientCorrespondingimplementation:
Master–NameNode
Slaves–DataNodes
Client–DFSClient122024/5/132.2.1HDFSConcepts-NamenodesandDatanodes-Basicmodel查看块信息hadoopfsck–files–blocks部分运行结果132024/5/132.2.2HDFSConcepts-NamenodesandDatanodes-NameNodemanagesthefilesystemnamespace元数据信息包括:文件信息,根目录hdfs://master:9000/每一个文件对应的文件块的信息每一个文件块在DataNode的信息persistentstateofthefilesystemmetadata.NamenodefoldersstructureNamenodenamespace映像文件及修改日志客户端对文件的访问142024/5/13HDFSConcepts-NamenodesandDatanodes-NameNode-managesthefilesystemnamespace将所有的文件和文件夹的元数据保存在一个文件系统树中。在硬盘上保存成以下文件:命名空间镜像(namespaceimage)修改日志(editlog)
心跳信号传递信息(并不存储在硬盘):一个文件包括哪些数据块,分布在哪些数据节点上。系统启动的时候从Datanode收集而成的。Datanode在Namenode的指挥下进行block的创建、删除和复制。152024/5/13HDFSConcepts-NamenodesandDatanodes-NameNode-persistentstateofthefilesystemmetadata对于任何对文件元数据产生修改的操作,Namenode都使用一个称为Editlog的事务日志记录下来。
例如,在HDFS中创建一个文件(打开、关闭、重命名文件和目录),Namenode就会在Editlog中插入一条记录来表示;同样,修改文件的replication因子也将往Editlog插入一条记录。整个文件系统的namespace,包括block到文件的映射、文件的属性,都存储在称为FsImage的文件中,这个文件也是放在Namenode所在系统的文件系统上162024/5/13HDFSConcepts-NamenodesandDatanodes-NameNode-persistentstateofthefilesystemmetadata块进行复制的形式放置,按照块的方式随机选择存储节点。a副本的默认数目是3172024/5/13HDFSConcepts-NamenodesandDatanodes-NameNode-NamenodefoldersstructurenamespaceID=1232737062cTime=0storageType=NAME_NODElayoutVersion=-18VERSION文件是javaproperties文件,保存了HDFS的版本号。layoutVersion是一个负整数,保存了HDFS的持续化在硬盘上的数据结构的格式版本号。namespaceID是文件系统的唯一标识符,是在文件系统初次格式化时生成的。cTime此处为0storageType表示此文件夹中保存的是元数据节点的数据结构。182024/5/13HDFSConcepts-NamenodesandDatanodes-NameNode-Namenode-Namenode文件系统命名空间映像文件及修改日志客户端操作(打开、关闭、重命名文件和目录)NameNode将对文件系统的改动追加保存到本地文件系统上的一个日志文件(edits)NameNode启动从映像文件(fsimage)中读取HDFS的状态接着应用日志文件中的edits操作新的HDFS状态写入(fsimage)中使用一个空的edits文件开始正常操作。写操作成功之前,修改日志都会同步(sync)到文件系统。fsimage命名空间映像文件,是内存中的元数据在硬盘上的checkpointNameNode只有在启动阶段合并fsimage和edits,日志文件会变大192024/5/132.2.3HDFSConcepts-NamenodesandDatanodes-DataNodes文件存储的基本单元保存Block的Meta-data周期性地将所有Block信息发送给NameNode。文件夹结构blk_<id>保存的是HDFS的数据块,其中保存了具体的二进制数据。blk_<id>.meta保存的是数据块的属性信息:版本信息,类型信息,和checksum目录中数据块到达一定数量,创建子文件夹202024/5/132.2.4HDFSConcepts-NamenodesandDatanodes-心跳机制master启动,开一个ipcserverslave启动每隔3秒向master发送“心跳”状态信息告诉mastermaster通过心跳的返回值,向slave节点传达指令周期性接收“心跳”和BlockreportDatanode上所有block组成列表212024/5/132.3HDFSConcepts-NamenodesandDatanodes-TheCommand-LineInterface
interactingwithHDFShadoopfs–mkdirinputhdfs://master:9000/user/coole在hdfs://master:9000/user/coole下新建input目录222024/5/132.5HDFSConcepts-NamenodesandDatanodes-通信接口对通信的对象进行序列化自己的序列化系统。org.apache.hadoop.io中定义可序列化对象,实现了Writable接口232024/5/133Hadoop应用程序示例
//在hdfs://master:9000/user/coole目录下创建文件并写入内容publicclassDFSOperator{publicstaticvoidmain(String[]args){ Configurationconf=newConfiguration();try{
FileSystemfs=FileSystem.get(conf); Patht=newPath("hdfs://master:9000/user/coole/dfs_operator.txt"); FSDataOutputStreamos=fs.create(t,true); inti=0; for(i=0;i<5;i++) os.writeChars("test"); os.close(); }catch(IOExceptione){ e.printStackTrace(); } }}242024/5/133Hadoop应用程序示例
打包dfs_operator.jar复制到hadoop/bin文件夹下执行脚本:exec"$JAVA"
$JAVA_HEAP_MAX
$HADOOP_OPTS
-classpath
"$CLASSPATH"
$CLASS
"$@“运行hadoop
jar
dfs_operator.jar
DFSOperatorHadoop脚本选项参数一参数二elif["$COMMAND"="jar"];thenCLASS=org.apache.hadoop.util.RunJar252024/5/134DataFlow
FileReadFileWrite262024/5/134.1DataFlow-FileRead
4.1.1基本过程4.1.2网络距离4.1.3优点272024/5/134.1.1DataFlow-FileRead-基本过程Theclientopensthefileitwishestoreadbycallingopen()ontheFileSystemobjectMultipleDistributedFileSystemcallsthenamenode,usingRPC,todeterminethelocationsoftheblocksforthefirstfewblocksinthefile282024/5/134.1.1DataFlow-FileRead-详细过程Foreachblock,thenamenodereturnstheaddressesofthedatanodesthathaveacopyofthatblock(accordingtotheirproximitytotheclient据与客户端距离排序)读完一个块,再找下一个块,读取连续流292024/5/134.1.2DataFlow-FileRead-网络距离123302024/5/134.1.3DataFlow-FileRead-优点客户端在Namenode指引下,直接联系数据结点312024/5/134.2DataFlow-FileWrite4.2.1基本过程4.2.2副本放置322024/5/134.2.1DataFlow-FileWrite-基本过程客户端通过DistributedFilesystem调用create()创建文件FSDataOutputStreamos=fs.create(t,true);返回一个数据输出流,让客户写数据,控制一个DFSoutPutstream负责namenodet和datanode通信DFSoutPutstream将数据分成一个个包写入数据结点332024/5/134.2.1DataFlow-FileWrite-副本位置Hadoop’sstrategyistoplacethefirstreplicaonthesamenodeastheclientforclientsrunningoutsidethecluster,anodeischosenatrandom,thesystemtriesnottopicknodesthataretoofullortoobusy342024/5/13第二篇MapReduce352024/5/131MapReduce基础1.1函数式编程1.2列表处理1.3mapping数据列表1.4reducing数据列表362024/5/131.1MapReduce基础-函数式编程计算划到大量机器上组件间不允许任意数据共享,避免保保持同步而产生的通信开销,所有在MapReduce上的数据不可变节点间通信只在产生新输出372024/5/131.2MapReduce基础-列表处理MapReduce程序转变输入数据元素列表成输出数据元素列表。382024/5/131.3MapReduce基础-mapping数据列表MapReduce程序的第一步叫做mapping392024/5/131.4MapReduce基础-Reducing数据列表Reducing把数据聚集在一起。reducer函数接收来自输入列表的迭代器402024/5/132MapReduce数据流2.1概述2.2输入2.3Maper2.4Partiton&Shuffle2.5Reducer2.6输出412024/5/132.1MapReduce数据流-概述高层MapReduce工作流水线422024/5/132.1MapReduce数据流-概述mapping任务平等,Mapper无特定标识,处理任意输入每个mapper本地进行中间值交换,同键值送到同一个reducer。唯一的结点通信数据传送由平台处理432024/5/132.2MapReduce数据流-输入近距离观察442024/5/132.2MapReduce数据流-输入输入文件:任务的初始存储地输入格式:inputFormat定义了如何分割和读取输入文件。选择对象划分为inputSplits每个InputSplit一个map任务为RecordReader读取文件提供一个工厂方法输入格式描述键值TextInputFormat默认格式,读取文件的行行的字节偏移量行的内容KeyValueInputFormat把行解析为键值对第一个tab字符前的所有字符行剩下的内容SequenceFileInputFormatHadoop定义的高性能二进制格式用户自定义用户自定义452024/5/132.2MapReduce数据流-输入输入块InputSplit:文件拆分成块Mapred-default.xml设置块大小输入格式定义了组成mapping阶段的map任务列表,每个任务对应一个输入块。据InputSplit地址分配任务(最大任务数mapred.tasktracker.map.tasks.maximum)462024/5/132.2MapReduce数据流-输入RecordReader访问InputSplit转换为适合mapper读取的kv对RecordReader实例由输入格式定义的默认的输入格式TextInputFormat提供LineRecordReader偏移量-键;行-值RecordReader会在输入块上被重复的调用直到整个输入块被处理完毕,每一次调用RecordReader都会调用Mapper的map()方法。472024/5/132.3MapReduce数据流-Mapper给定一个键值对,map()方法会生成一个或多个键值对OutputCollector对象collect()的方法,利用该方法把键值对送到作业的reduce阶段。482024/5/132.4MapReduce数据流-Partiton&ShuffleShuffle:移动map输出到reducer的过程叫做Partitons:每一个reduce节点会分派到中间输出的键集合中的一个不同的子集合Partitioner类决定键值对去向,默认分类器计算键哈希值492024/5/132.5MapReduce数据流-Reduce每个reduce任务都会创建一个Reducer实例reducer的reduce()方法只会调用一次,它会接收一个键和关联到键的所有值的一个迭代器,迭代器会以一个未定义的顺序返回关联到同一个键的值。502024/5/132.6MapReduce数据流-输出键值对通过OutputCollector被写到输出文件中,写入的方式由输出格式控制。每一个reducer会把结果输出写在公共文件夹中一个单独的文件内,这些文件的命名一般是part-nnnnn,nnnnn是关联到某个reduce任务的partition的id输出格式描述TextOutputFormat默认的输出格式,以"key\tvalue"的方式输出行SequenceFileOutputFormat输出二进制文件,适合于读取为子MapReduce作业的输入NullOutputFormat忽略收到的数据,即不做输出
512024/5/133MapReduce工作原理522024/5/133MapReduce工作原理3.1基本概念3.2JobSubmission3.3JobInitialization3.4TaskAssignment3.5TaskExecution532024/5/133.1MapReduce工作原理-基本概念3.1.1Theclient3.1.2Jobtracker3.1.3Tasktracker3.1.4Thedistributedfilesystem3.1.5job542024/5/133.1.1MapReduce工作原理-基本概念-客户端Theclient,whichsubmitstheMapReducejob552024/5/133.1.2MapReduce工作原理-基本概念-jobtrackerThejobtracker,whichcoordinatesthejobrun.ThejobtrackerisaJavaapplicationwhosemainclassisJobTracker562024/5/133.1.3MapReduce工作原理-基本概念-taskrackerThetasktrackers,whichrunthetasksthatthejobhasbeensplitinto.TasktrackersareJavaapplicationswhosemainclassisTaskTracker.572024/5/133.1.4MapReduce工作原理-基本概念-distributedfilesystemThedistributedfilesystem(normallyHDFS),whichisusedforsharingjobfilesbetweentheotherentities.582024/5/133.1.5MapReduce工作原理-基本概念-Job一个mapreduce应用由三部分组成Maper,Reducer,JobConfJobClient.submitJob()
JobTrackerCopyjobresources592024/5/13MapReduce-1JobSubmissionAsksthejobtrackerforanewjobIDCheckstheoutputspecificationofthejob.Computestheinputsplitsforthejob.CopiestheresourcesneededtorunthejobTellsthejobtrackerthatthejobisreadyforexecution602024/5/13MapReduce-2JobInitializationjobschedulerinitializejobcreatinganobjecttorepresentthejobencapsulatesitstasks,andbookkeepinginformationcreatethelistoftasksretrievestheinputsplitscreatesonemaptaskforeachsplit.它的输入往往是输入文件的一个数据块,或者是数据块的一部分,但通常,不跨数据块。CreatereducetasksTasksaregivenIDsatthispoint.
612024/5/13MapReduce-3TaskAssignmentheartbeatmethodcallstothejobtrackervariousschedulingalgorithms(jobselect)afixednumberofslotsformaptasksandforreducetasks作业被拆分成若干个Map任务后,会预先挂在jobtracker上的任务服务器拓扑树。这是依照分布式文件数据块的位置来划分的,比如一个Map任务需要用某个数据块,这个数据块有三份备份,那么,在这三台服务器上都会挂上此任务,可以视为是一个预分配两步:选作业,分任务。不同业务需不同分配算法,像yahoo等有自己算法。默认分配器,是JobQueueTaskSchedulerMaptaskdatalocalityconsiderations622024/5/13MapReduce-4TaskExecutionFirst,itlocalizesthejobJARbycopyingitfromthesharedfilesystemtothetasktracker’sfilesystem.Italsocopiesanyfilesneededfromthedistributedcachebytheapplicationtothelocaldisk;itcreatesalocalworkingdirectoryforthetask,andun-jarsthecontentsoftheJARintothisdirectory.itcreatesaninstanceofTaskRunnertorunthetask.632024/5/13第三篇Hbase分布式数据库642024/5/13Hbase简介Hbase是一个类似Bigtable的分布式结构化数据库系统,Bigtable是GoogleStyle的数据库,使用结构化的文件来存储数据。652024/5/13Streamy使用RDBMS是一个实时新闻聚合器,使用PostgreSQL。Streamy抓取上万RSS订阅,聚集千万条目。除存储,复杂查询之一:从一个资源集合中读取按时间排序的所有条目列表。为了保障数据库随扩展而保持速度,想尽办法(用尽所有RDBMS优势)。整个团队成为DBA。662024/5/13Streamy障碍一:大批量条目起初单条目表,大量二级索引使更新变慢将条目分成一对一链接表静态区域从动态区域分离出来据查询方法分区问题无法解决单个更新还是要重写整个记录条目追踪统计数据非常难扩展重写记录和一直保持更新索引是RDBMS固有特性672024/5/13Streamy障碍二:超大排序合并对按时间排序的lists进行排序合并很常见假设id是主键,stamp和type有二级索引,RDBMS查询设计器做如下处理:问题:只排前10条ID,但查询设计器实现整个合并。682024/5/13Streamy解决办法RDBMS能实现需求,但是------需要考虑伸宿性和性能,而非正确性RDBMS开销和复杂性成为障碍存储层抽象都是障碍Hbase解决信赖Hbase扩展存储而非逻辑专注于应用逻辑而非扩展本身目前已有上亿行上万列。可放心存储几十的行和几百万的列692024/5/13比较RDBMS模式固定拥有ACID特性适于大中小程序HBase对数据集大小或读写并发性或两者兼容的伸宿性要求,发现RDBMS性能损失大。702024/5/13Hbase数据模型定义:BT是一个稀疏的,长期存储的,多维度的,排序的映射表。索引:行关键字,列关键字和时间戳.值:一个不解释的字符数组.数据都是字符串,没类型,格式由客户来解释(row:string,column:string,time:int64)->string712024/5/13Hbase数据模型行每一行都有一个可排序的主键和任意多的列。行关键字可以是任意字符串表用行键即主键排序,通过主键访问表。在一个行关键字下的每一个读写操作都是原子操作有利于同行并发操作举例,在Webtable里,通过反转URL中主机名的方式,可以把同一个域名下的网页组织成连续行。722024/5/13Hbase数据模型列族每行列分组形成列族:“<family>:<qualifiers>”每张表有一个family集合,固定不变,相当于表结构列族成员有相同前缀。OK:a与OK:b都属于OK列族成员同一列族下存放的所有数据通常都是同一类型列族必须先创建,然后能在其中的列关键字下存放数据,动态增加列限定词任意字符串。比如,Webtable列族是anchor;给列族的每一个列关键字代表一个锚链接物理存储列族成员在文件系统存在一起,(确切)面向列族。这是访问控制的基本单位。732024/5/13Hbase数据模型时间戳表中每一个表项都可以包含同一数据的多个版本不同版本的表项内容按时间戳倒序排列,即最新的排在前面。自动进行垃圾清除。用户可以指明只保留表项的最后n个版本在Webtable中,在contents:列中存放确切爬行一个网页的时间戳。如上的垃圾清除机制可以让我们只保留每个网页的最近三个版本。742024/5/13Hbase数据模型行名是一个反向URL{即n.www}。contents列族存放网页内容anchor列族存放引用该网页的锚链接文本。CNN的主页被SportsIllustrater和MY-look的主页引用,因此该行包含了名叫“anchor:”和“anchhor:my.look.ca”的列。列名字的格式是"<family>:<label>"时间戳每个锚链接只有一个版本,由时间戳标识,如t9,t8;而contents列则有三个版本,分别由时间戳t3,t5,和t6标识。一个存储Web网页的例子的表的片断752024/5/13Hbase数据模型概念视图
一个表可以想象成一个大的映射关系,通过主键,或者主键+时间戳,可以定位一行数据,由于是稀疏数据,所以某些列可以是空白的,下面就是数据的概念视图:762024/5/13Hbase数据模型物理视图在物理存储上面,它是按照列来保存的,在概念视图上面有些列是空白的,这样的列实际上并不会被存储如果在查询的时候不提供时间戳,返回最新版本772024/5/13区域(tablet)表横向分不同
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024人力资源管理实习基地实习实训合作协议范本7篇
- 2024年环保设施维护保养与节能减排服务协议3篇
- 2024年度航空航天配件验收及快速响应服务合同2篇
- 2024年度健身器材供应链铺货及分销合同3篇
- 2024年污水处理设备安装及运维服务协议版B版
- 2024事业单位职工培训进修聘用合同编制指南3篇
- 2025小家电采购合同范文
- 防火工程人工费施工合同
- 教育培训机构投资管理办法
- 福建省南平市2023-2024学年高二上学期期末考试历史试题(解析版)
- 收割机购销合同
- 医务人员医德医风诚信 档 案(模板)
- 脓毒症休克中西医详解
- 小兔子乖乖ppt课件.ppt
- 常压矩形容器设计计算软件
- 交流变换为直流的稳定电源设计方案
- PR6C系列数控液压板料折弯机 使用说明书
- 钢结构工程环境保护和文明施工措施
- 物业管理业主意见征询表
- 管道定额价目表
- 民国文献《潮州茶经》
评论
0/150
提交评论