1、Chap02 分布式处理软件架构分布式处理软件架构Hadoophttp:/ 概述概述2.2 Hadoop项目结构项目结构2.3 Hadoop的安装与使用的安装与使用2.4 Hadoop集群的部署与使用集群的部署与使用2.2 Hadoop项目结构Hadoop的项目结构不断丰富发展,已经形成一个丰富的Hadoop生态系统2.2 Hadoop项目结构组件组件功能功能HDFS分布式文件系统MapReduce分布式并行编程模型YARN资源管理和调度器Tez运行在YARN之上的下一代Hadoop查询处理框架HiveHadoop上的数据仓库HBaseHadoop上的非关系型的分布式数据库Pig一个基于Had
2、oop的大规模数据分析平台,提供类似SQL的查询语言Pig LatinSqoop用于在Hadoop与传统数据库之间进行数据传递OozieHadoop上的工作流管理系统Zookeeper提供分布式协调一致性服务Storm流计算框架Flume一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统AmbariHadoop快速部署工具,支持Apache Hadoop集群的供应、管理和监控Kafka一种高吞吐量的分布式发布订阅消息系统,可以处理消费者规模的网站中的所有动作流数据Spark类似于Hadoop MapReduce的通用并行框架HDFS是什么 分布式文件系统 冗余存储 面向大文件存储设
3、计 面向批量插入设计 基于商用机器提供可靠的数据存储 容忍部分节点故障HDFSRefercece:http:/hadoop.apache.org/docs/r1.0.4/hdfs_design.htmlHDFS系统架构图Metadata(Name,replicas.)(/home/foo/data,6.NameNode元数据操作同步元数据和日志SecondaryNameNodeDFSClient块操作读操作DatanodesDatanodes写操作机架另一个机架DFSClientHDFS相关术语HDFSGFSMooseFS 说明NameNodeMasterMaster整个文件系统的大脑,它提供
4、整个文件系统的目录信息,各个文件的分块信息,数据块的位置信息,并且管理各个数据服务器。DataNodeChunkServerChunkServer分布式文件系统中的每一个文件,都被切分成若务器上,此服务器称之为数据服务器。BlockChunkChunk每个文件都会被切分成若干个块(默认64MB)每一块都有连续的一段文件内容是存储的基本 单位。Packet无无客户端写文件的时候,不是一个字节一个字节写 入文件系统的,而是累计到一定数量后,往文件个数据包。Chunk无Block(64KB)在每一个数据包中,都会将数据切成更小的块(512 字节),每一个块配上一个 奇偶校验码(CRC),这样的块,就
5、是传输块。Secondary NameNode无Metalogger备用的主控服务器,在身后默默的拉取着主控服务器的日志,等待主控服务器牺牲后被扶正。HDFS核心功能功能说明Namespace HDFS支持传统的层次型文件组织,与大多数其他文件系统类似,用户可以创建目录,并在其间创建、删除、移动和重命名文件。Shell命令Hadoop包括一系列的类shell的命令,可直接和HDFS以及其他Hadoop支持的文件系统进行交互。数据复制每个文件的block大小和replication因子都是可配置的。Replication因子可以在文件创建的时候配置,以后也可以改变。HDFS中的文件是write-
6、one,并且 严格要求在任何时候只有一个writer。机架感知在大多数情况下,replication因子是3,HDFS的存放策略是将一个副本存放 在本地机架上的节点,一个副本放在同一机架上的另一个节点,最后一个副本影响到数据的可靠性和有效性。放在不同机架上的一个节点。机架的错误远远比节点的错误少。EditlogFSEditLog类是整个日志体系的核心,提供了一大堆方便的日志写入API,以及日志的恢复存储等功能。集群均衡如果某个DataNode节点上的空闲空间低于特定的临界点,那么就会启动一个计划自动地将数据从一个DataNode搬移到空闲的DataNode。空间的回收删除文件并没有立刻从 HD
7、FS 中删除,HDFS 将这个文件重命名,并转移到/trash目录,用于恢复,/trash可设置保存时间。读取文件流程1、使用HDFS Client,向远程的Namenode发起RPC请求;2、Namenode会视情况返回文件的部分或者全部block列表,对于每个block,Namenode都会返回有该block拷贝的datanode地址;3-4、HDFS Client 选取离客户端最接近的datanode来读取block;5、当读完列表的block后,如果文件读取还没有结束,客户端开发库会继续向Namenode获取下一批的block列表。6、读取完当前block的数据后,关闭与当前的data
8、node连接,并为读取下一个block寻找最佳的datanode;注:读取完一个block都会进行checksum验证,如果读取datanode时出现错误,客户端会通知Namenode,然后再从下一个拥有该block拷贝的datanode继续读。写入文件流程1.HDFS Client 向远程的Namenode发起RPC请求;2.Namenode会检查要创建的文件是否已经存在,创建者是否有权限进行操作,成功则会为文件创建一个记录,否则会让客户端抛出异常;3.当客户端开始写入文件的时候,开发库会将文件切分成多个packets,并在内部以data queue的形式管理这些packets,并向Name
9、node申请新的blocks,获取用来存储replicas的合适的datanodes列表,列表的大小根据在Namenode中对replication的设置而定。4.开始以pipeline(管道)的形式将packet写入所有的replicas中。开发库把packet以流的方式写入第一个datanode,该datanode把该packet存储之后,再将其传递给在此pipeline中的下一个datanode,直到最后一个datanode,这种写数据的方式呈流水线的形式。5.最后一个datanode成功存储之后会返回一个ack packet,在pipeline里传递至客户端,在客户端的开发库内部维护着
10、ack queue,成功收到datanode返回的ack packet后会从ack queue移除相应的packet。6.如果传输过程中,有某个datanode出现了故障,那么当前的pipeline会被关闭,出现故障的datanode会从当前的pipeline中移除,剩余的block会继续剩下的datanode中继续以pipeline的形式传输,同时Namenode会分配一个新的datanode,保持replicas设定的数量。HDFS不擅长的 多数据中心情况 低延迟数据访问需求(10ms)大量的小文件 多个数据写入者Hadoop MapReduceHadoop MapReduce 是什么?一
11、个在大型计算机集群上快速分发计算的编程模型 一个组织执行计算的操作框架 其中一个开源实现即Hadoop MapReduceMapReduce并行处理的基本过程Cite from Dean and Ghemawat(OSDI 2004)1.有一个待处理的大数据,被划分为大小相同的数据块(如64MB),及与此相应的用户作业程序2.系统中有一个负责调度的主节点(Master),以及数据Map和Reduce工作节点(Worker)MapReduce并行处理的基本过程Cite from Dean and Ghemawat(OSDI 2004)3.用户作业程序提交给主节点4.主节点为作业程序寻找和配备可用
12、的Map节点,并将程序传送给map节点 5.主节点也为作业程序寻找和配备可用的Reduce节点,并将程序传送给Reduce节点 MapReduce并行处理的基本过程Cite from Dean and Ghemawat(OSDI 2004)6.主节点启动每个Map节点执行程序,每个map节点尽可能读取本地或本机架的数据进行计算 7.每个Map节点处理读取的数据块,并做一些数据整理工作(combining,sorting等)并将中间结果存放在本地;同时通知主节点计算任务完成并告知中间结果数据存储位置 MapReduce并行处理的基本过程Cite from Dean and Ghemawat(OS
13、DI 2004)8.主节点等所有Map节点计算完成后,开始启动Reduce节点运行;Reduce节点从主节点所掌握的中间结果数据位置信息,远程读取这些数据9.Reduce节点计算结果汇总输出到一个结果文件即获得整个处理结果MapReduce并行处理的基本过程Cite from Dean and Ghemawat(OSDI 2004)完整计算过程MR简例(Word Count)Hadoop YARNHadoop1.0 VS Hadoop2.0产生背景 直接源于MRv1在几个方面的缺陷 扩展性受限 单点故障 难以支持MR之外的计算 多计算框架各自为战,数据共享困难 MR:离线计算框架 Storm:
14、实时计算框架 Spark:内存计算框架Hadoop1.0 MR调度MapReduce 1.0缺点 JobTracker 是 Map-reduce 的集中处理点,存在单点故障。JobTracker 完成了太多的任务,造成了过多的资源消耗,当 map-reduce job 非常多的时候,会造成很大的内存开销。在 TaskTracker 端,以 map/reduce task 的数目作为资源的表示过于简单,没有考虑到 cpu/内存的占用情况。MapReduceMapReduce 框架在有任何重要的或者不重要的变化(例如 bug 修复,性能提升和特性化)时,都会强制进行系统级别的升级更新。强制让分布式
15、集群系统的每一个用户端同时更新。Hadoop YARN MR调度 Yarn vs MR 1.0 MR1.0Job Tracker 资源管理 任务调度、监控 YarnResourceManager 调度、启动每一个 Job 所属的 ApplicationMaster、另外监控 ApplicationMasterApplicationMaster 负责一个 Job 生命周期内的所有工作,类似老的框架中 JobTrackerHadoopYARN 模块组成 ResourceManager处理客户端请求启动/监控ApplicationMaster监控NodeManager资源分配与调度 NodeMana
16、ger单个节点上的资源管理处理来自ResourceManager的命令处理来自ApplicationMaster的命令 ApplicationMaster数据切分为应用程序申请资源,并分配给内部任务任务监控与容错Hadoop YARN 运行流程HBASE需求Google的结构化数据存储需求?低成本可扩展地处理以亿为单位的数据表(海量)?众多的列,但并非每列都有数据,且经常只访问很少的列(稀疏)?高吞吐量和高并发(快速)HBase的原型 Google Bigtable 传统RDBMS 并行 Cache 高访问量复杂,难以解决MapReduce?Map/Reduce MapReduce程序能满足高
17、并发要求吗?全文件扫描效率行吗?答案 因为RDBMS和MapReduce不能满足要求海量结构化数据存储需求 众多的列,但并非每列都有数据,且经常只访问很少的列(稀疏)低成本可扩展地处理以十亿为单位的数据表(海量)高吞吐量和高并发(快速)方案:Bigtable HBase HBase是什么 Hbase是一种面向列的(稀疏),基于HDFS的(海量),高性能(快速)分布式数据库系统利用Hadoop HDFS作为其文件存储系统,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。利用Hadoop MapReduce来处理HBase中的海量数据利用Zookeeper作为协同服务。Hbase特点水
18、平扩展面向列范围查询可靠性高性能随机读/写和Hadoop无缝集成Hbase vs RDBMSHBaseHBaseRDBMSRDBMS数据类型只有字符串丰富的数据类型数据操作简单的增删改查各种各样的函数,表连接存储模式基于列存储基于表格结构和行存储数据保护更新后旧版本仍然会保留替换可伸缩性轻易的进行增加节点,兼容性高需要中间层,牺牲功能水平扩展 数据量太大了,读写性能下降?传统方案:分库分表(迁移数据,中间层)HBase:啥都不用做,加机器即可,且性能平稳。Region ServerHLogLruBlockCacheRegionmemstore StoreFileStoreFileHDFSHba
19、se存储结构存储结构水平扩展 如何做到的?当storeFile多了后,HBase会自动compact;当rows多了后,HBase会自动将region split;HBase会定时对Region Server的Region数进行balance;Region Server下线,Master会重新分配其负责的Region到其他的Region Server;Region Server上线后,当Master进行balance时会迁移一些Region到新的Region Server。面向列 动态增删schema?传统方案:停机维护;HBase:No,Column Qualifier可动态增删。面向列 如
20、何做到的?以Column Family为存储单元;K/V方式存储。高性能随机读/写 如何做到的?随机读 K/V存储;Cache;Split;Balance。随机写(相对而言)Cache+WAL;Compact;Split;Balance;数据可靠性 借助HDFS保证数据的可靠;HLog File;恢复机制。Hadoop其他组件Zookeeper ZooKeeper是Apache软件基金会下的一个为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册的项目。曾是Hadoop项目的一部分,后来独立。项目地址:http:/zookeeper.apache.org/Pig Pig是一个基于Had
21、oop的大规模数据分析平台,它提供的SQL-LIKE语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算。Pig为复杂的海量数据并行计算提供了一个简单的操作和编程接口。Pig极大的简化了Hadoop的使用 项目地址:http:/pig.apache.org/PigPig可以加载数据、表达转换数据以及存储最终结果Pig语句通常按照如下的格式来编写:通过LOAD语句从文件系统读取数据通过一系列“转换”语句对数据进行处理通过一条STORE语句把处理结果输出到文件系统中,或者使用DUMP语句把处理结果输出到屏幕上Pig在企业数据分析系统中的
22、作用Hive Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。Hive项目地址:http:/hive.apache.orgSqoop Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如:MySQL,Oracle,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HD
23、FS的数据导进到关系型数据库中。对于某些NoSQL数据库它也提供了连接器。Sqoop,类似于其他ETL工具,使用元数据模型来判断数据类型并在数据从数据源转移到Hadoop时确保类型安全的数据处理。Sqoop专为大数据批量传输设计,能够分割数据集并创建Hadoop任务来处理每个区块。项目地址:http:/sqoop.apache.org/Arvo Apache Arvo是一个独立于编程语言的数据序列化系统,该项目是由hadoop之父创建的,旨在解决hadoop中Writable类型的不足:缺乏语言的可移植性。Arvo可以被多种语言(c,c+,java)处理的数据格式,具有丰富的数据类型和模式,主要包括avro模式(定义数据结构)和avro对象容器文件(存储数据)。项目地址:http:/avro.apache.org/Google 分布式理论的开源实现HadoopHDFSHBaseZookeeperMap ReduceGoogleGFSBig TableChubbyMap Reduce