Chap02分布式处理软件架构Hadoop提纲•2.1概述•2.2Hadoop项目结构•2.3Hadoop的安装与使用•2.4Hadoop集群的部署与使用2.2Hadoop项目结构Hadoop的项目结构不断丰富发展,已经形成一个丰富的Hadoop生态系统2.2Hadoop项目结构组件功能HDFS分布式文件系统MapReduce分布式并行编程模型YARN资源管理和调度器Tez运行在YARN之上的下一代Hadoop查询处理框架HiveHadoop上的数据仓库HBaseHadoop上的非关系型的分布式数据库Pig一个基于Hadoop的大规模数据分析平台,提供类似SQL的查询语言PigLatinSqoop用于在Hadoop与传统数据库之间进行数据传递OozieHadoop上的工作流管理系统Zookeeper提供分布式协调一致性服务Storm流计算框架Flume一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统AmbariHadoop快速部署工具,支持ApacheHadoop集群的供应、管理和监控Kafka一种高吞吐量的分布式发布订阅消息系统,可以处理消费者规模的网站中的所有动作流数据Spark类似于HadoopMapReduce的通用并行框架HDFS是什么•分布式文件系统•冗余存储•面向大文件存储设计•面向批量插入设计•基于商用机器提供可靠的数据存储•容忍部分节点故障HDFS系统架构图Metadata(Name,replicas..)(/home/foo/data,6...NameNode元数据操作同步元数据和日志SecondaryNameNodeDFSClient块操作读操作DatanodesDatanodes写操作机架另一个机架DFSClientHDFS相关术语HDFSGFSMooseFS说明NameNodeMasterMaster整个文件系统的大脑,它提供整个文件系统的目录信息,各个文件的分块信息,数据块的位置信息,并且管理各个数据服务器。DataNodeChunkServerChunkServer分布式文件系统中的每一个文件,都被切分成若务器上,此服务器称之为数据服务器。BlockChunkChunk每个文件都会被切分成若干个块(默认64MB)每一块都有连续的一段文件内容是存储的基本单位。Packet无无客户端写文件的时候,不是一个字节一个字节写入文件系统的,而是累计到一定数量后,往文件个数据包。Chunk无Block(64KB)在每一个数据包中,都会将数据切成更小的块(512字节),每一个块配上一个奇偶校验码(CRC),这样的块,就是传输块。SecondaryNameNode无Metalogger备用的主控服务器,在身后默默的拉取着主控服务器的日志,等待主控服务器牺牲后被扶正。HDFS核心功能功能说明NamespaceHDFS支持传统的层次型文件组织,与大多数其他文件系统类似,用户可以创建目录,并在其间创建、删除、移动和重命名文件。Shell命令Hadoop包括一系列的类shell的命令,可直接和HDFS以及其他Hadoop支持的文件系统进行交互。数据复制每个文件的block大小和replication因子都是可配置的。Replication因子可以在文件创建的时候配置,以后也可以改变。HDFS中的文件是write-one,并且严格要求在任何时候只有一个writer。机架感知在大多数情况下,replication因子是3,HDFS的存放策略是将一个副本存放在本地机架上的节点,一个副本放在同一机架上的另一个节点,最后一个副本影响到数据的可靠性和有效性。放在不同机架上的一个节点。机架的错误远远比节点的错误少。EditlogFSEditLog类是整个日志体系的核心,提供了一大堆方便的日志写入API,以及日志的恢复存储等功能。集群均衡如果某个DataNode节点上的空闲空间低于特定的临界点,那么就会启动一个计划自动地将数据从一个DataNode搬移到空闲的DataNode。空间的回收删除文件并没有立刻从HDFS中删除,HDFS将这个文件重命名,并转移到/trash目录,用于恢复,/trash可设置保存时间。读取文件流程1、使用HDFSClient,向远程的Namenode发起RPC请求;2、Namenode会视情况返回文件的部分或者全部block列表,对于每个block,Namenode都会返回有该block拷贝的datanode地址;3-4、HDFSClient选取离客户端最接近的datanode来读取block;5、当读完列表的block后,如果文件读取还没有结束,客户端开发库会继续向Namenode获取下一批的block列表。6、读取完当前block的数据后,关闭与当前的datanode连接,并为读取下一个block寻找最佳的datanode;注:读取完一个block都会进行checksum验证,如果读取datanode时出现错误,客户端会通知Namenode,然后再从下一个拥有该block拷贝的datanode继续读。写入文件流程1.HDFSClient向远程的Namenode发起RPC请求;2.Namenode会检查要创建的文件是否已经存在,创建者是否有权限进行操作,成功则会为文件创建一个记录,否则会让客户端抛出异常;3.当客户端开始写入文件的时候,开发库会将文件切分成多个packets,并在内部以dataqueue的形式管理这些packets,并向Namenode申请新的blocks,获取用来存储replicas的合适的datanodes列表,列表的大小根据在Namenode中对replication的设置而定。4.开始以pipeline(管道)的形式将packet写入所有的replicas中。开发库把packet以流的方式写入第一个datanode,该datanode把该packet存储之后,再将其传递给在此pipeline中的下一个datanode,直到最后一个datanode,这种写数据的方式呈流水线的形式。5.最后一个datanode成功存储之后会返回一个ackpacket,在pipeline里传递至客户端,在客户端的开发库内部维护着ackqueue,成功收到datanode返回的ackpacket后会从ackqueue移除相应的packet。6.如果传输过程中,有某个datanode出现了故障,那么当前的pipeline会被关闭,出现故障的datanode会从当前的pipeline中移除,剩余的block会继续剩下的datanode中继续以pipeline的形式传输,同时Namenode会分配一个新的datanode,保持replicas设定的数量。HDFS不擅长的•多数据中心情况•低延迟数据访问需求(10ms)•大量的小文件•多个数据写入者HadoopMapReduceHadoopMapReduce是什么?•一个在大型计算机集群上快速分发计算的编程模型•一个组织执行计算的操作框架•其中一个开源实现即HadoopMapReduceMapReduce并行处理的基本过程CitefromDeanandGhemawat(OSDI2004)1.有一个待处理的大数据,被划分为大小相同的数据块(如64MB),及与此相应的用户作业程序2.系统中有一个负责调度的主节点(Master),以及数据Map和Reduce工作节点(Worker)MapReduce并行处理的基本过程CitefromDeanandGhemawat(OSDI2004)3.用户作业程序提交给主节点4.主节点为作业程序寻找和配备可用的Map节点,并将程序传送给map节点5.主节点也为作业程序寻找和配备可用的Reduce节点,并将程序传送给Reduce节点MapReduce并行处理的基本过程CitefromDeanandGhemawat(OSDI2004)6.主节点启动每个Map节点执行程序,每个map节点尽可能读取本地或本机架的数据进行计算7.每个Map节点处理读取的数据块,并做一些数据整理工作(combining,sorting等)并将中间结果存放在本地;同时通知主节点计算任务完成并告知中间结果数据存储位置MapReduce并行处理的基本过程CitefromDeanandGhemawat(OSDI2004)8.主节点等所有Map节点计算完成后,开始启动Reduce节点运行;Reduce节点从主节点所掌握的中间结果数据位置信息,远程读取这些数据9.Reduce节点计算结果汇总输出到一个结果文件即获得整个处理结果MapReduce并行处理的基本过程CitefromDeanandGhemawat(OSDI2004)完整计算过程MR简例(WordCount)HadoopYARNHadoop1.0VSHadoop2.0产生背景•直接源于MRv1在几个方面的缺陷扩展性受限单点故障难以支持MR之外的计算•多计算框架各自为战,数据共享困难MR:离线计算框架Storm:实时计算框架Spark:内存计算框架Hadoop1.0MR调度MapReduce1.0缺点•JobTracker是Map-reduce的集中处理点,存在单点故障。•JobTracker完成了太多的任务,造成了过多的资源消耗,当map-reducejob非常多的时候,会造成很大的内存开销。•在TaskTracker端,以map/reducetask的数目作为资源的表示过于简单,没有考虑到cpu/内存的占用情况。•MapReduce框架在有任何重要的或者不重要的变化(例如bug修复,性能提升和特性化)时,都会强制进行系统级别的升级更新。强制让分布式集群系统的每一个用户端同时更新。HadoopYARNMR调度YarnvsMR1.0•MR1.0–JobTracker•资源管理•任务调度、监控•Yarn–ResourceManager•调度、启动每一个Job所属的ApplicationMaster、另外监控ApplicationMaster–ApplicationMaster•负责一个Job生命周期内的所有工作,类似老的框架中JobTrackerHadoopYARN模块组成•ResourceManager–处理客户端请求–启动/监控ApplicationMaster–监控NodeManager–资源分配与调度•NodeManager–单个节点上的资源管理–处理来自ResourceManager的命令–处理来自ApplicationMaster的命令•ApplicationMaster–数据切分–为应用程序申请资源,并分配给内部任务–任务监控与容错HadoopYARN运行流程HBASE需求•Google的结构化数据存储需求– 低成本可扩展地处理以亿为单位的数据表(海量)– 众多的列,但并非每列都有数据,且经常只访问很少的列(稀疏)– 高吞吐量和高并发(快速)•HBase的原型-GoogleBigtable传统RDBMS•并行•Cache•高访问量复杂,难以解决MapReduce?•Map/Reduce–MapReduce程序能满足高并发要求吗?–全文件扫描效率行吗?答案•因为RDBMS和MapReduce不能满足要求海量结构化数据存储需求–众多的列,但并非每列都有数据,且经常只访问很少的列(稀疏)–低成本可扩展地处理以十亿为单位的数据表(海量)–高吞吐量和高并发(快速)•方案:–Bigtable–HBaseHBase是什么•Hbase是一种面向列的(稀疏),基于HDFS的(海量),高性能(快速)分布式数据库系统–利用HadoopHDFS作为其文件存储系统,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。–利用HadoopMapReduce来处理HBase中的海量数据–利用Zookeeper作为协同服务。Hbase特点水平扩展面向列范围查询可靠性高性能随机读/写和Hadoop无缝