今天大半个下午写了这个Hadoop架构。整篇文章都是大白话的形式,也算是给每个部分开个好头,后面会详细介绍。喜欢的话请点转发关注。有什么问题,就在评论里说出来,大家一起解决,共同进步。一、概念Hadoop诞生于2006年,是一个支持数据密集型分布式应用的开源软件框架,在Apache2.0许可协议下发布。它支持在基于商用硬件构建的大型集群上运行的应用程序。Hadoop是基于Google发表的关于MapReduce和GoogleFileSystem的论文自行实现的。Hadoop和Google一样,都是以孩子的名字命名的。这是一个虚构的名字,没有特殊含义。从计算机科学的角度来看,Hadoop是由Apache基金会开发的分布式系统基础设施。Hadoop的主要目标是以可靠、高效和可扩展的方式在分布式环境中处理“大数据”。Hadoop框架透明地为应用程序提供可靠性和数据移动。它实现了一种称为MapReduce的编程范式:一个应用程序被分成许多小部分,每个部分都可以在集群中的任何节点上执行或重新执行。Hadoop还提供了一个分布式文件系统来跨所有计算节点存储数据,这为整个集群带来了非常高的带宽。MapReduce和分布式文件系统的设计使得整个框架能够自动处理节点故障。它支持具有数千台独立计算计算机和数PB数据的应用程序。二、组成1、Hadoop核心组件分析:Hadoop的核心组件分为:HDFS(分布式文件系统)、MapRuduce(分布式计算编程框架)、YARN(计算资源调度系统)2、HDFS文件系统HDFS1.定义整个Hadoop的架构主要是通过HDFS(HadoopDistributedFileSystem)实现对分布式存储的底层支持,通过MR实现对分布式并行任务处理的程序支持。HDFS是Hadoop系统中数据存储管理的基础。它是一个高度容错的系统,能够检测和响应硬件故障,设计用于在低成本通用硬件上运行。HDFS简化了文件的一致性模型,通过流式数据访问提供高吞吐量的应用数据访问功能,适用于大数据集的应用。2.组成HDFS采用主从(Master/Slave)结构模型。一个HDFS集群由一个NameNode和若干个DataNode组成。作为主服务器,NameNode管理文件系统命名空间和客户端对文件的访问。DataNode管理存储的数据。HDFS支持文件形式的数据。在内部,一个文件被分成若干个数据块,这些数据块存储在一组DataNodes上。NameNode执行文件系统的命名空间,如打开、关闭、重命名文件或目录等,同时还负责将数据块映射到具体的DataNodes。DataNode负责处理文件系统客户端的文件读写,在NameNode的统一调度下创建、删除、复制数据库。NameNode是所有HDFS元数据的管理者,用户数据永远不会经过NameNode。分析:NameNode是管理器,DataNode是文件存储器,Client是需要获取分布式文件系统的应用程序。MapReduce1。定义HadoopMapReduce是googleMapReduce的克隆。MapReduce是一种用于计算大量数据的计算模型。其中,Map对数据集上的独立元素进行指定操作,以键值对的形式产生中间结果。Reduce将中间结果中同一个“键”的所有“值”进行减法,得到最终结果。MapReduce等功能划分非常适用于由大量计算机组成的分布式并行环境中的数据处理。2.组成分析:(1)JobTrackerJobTracker称为作业跟踪器,是一个非常重要的运行到主节点(Namenode)的进程,是MapReduce系统的调度器。用于处理job的后台程序(用户提交的代码)判断job的处理涉及到哪些文件,然后将job一个一个的切割成小任务,分配给需要数据的子节点位于。Hadoop的原则是就近运行。数据和程序应该在同一个物理节点上。数据在哪里,程序就会在哪里运行。这项工作由JobTracker完成,它监视任务并重新启动失败的任务(在不同的节点上)。每个集群只有一个JobTracker,类似于单点NameNode,位于Master节点上。(2)TaskTrackerTaskTracker称为任务跟踪器,MapReduce系统的最后一个后台进程位于各个slave节点上,结合datanode(代码和数据在一起的原理),管理各自节点上的任务(由jobtracker分配).每个节点只有一个tasktracker,但是一个tasktracker可以启动多个JVM,运行MapTask和ReduceTask;与JobTracker交互,上报任务状态,MapTask:解析每条数据记录,传递给用户编写的map(),并执行,将输出结果写入本地磁盘(如果是map-onlyjobs,直接写入到HDFS)。ReducerTask:从MapTask的执行结果中远程读取输入数据,对数据进行排序,将数据分组传递给用户编写的reduce函数执行。蜂巢1。定义Hive是一个基于Hadoop的数据仓库工具,可以将结构化数据文件映射成数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行操作。Hive是建立在Hadoop之上的数据仓库基础设施。它提供了一套用于提取-转换-加载(ETL)的工具,ETL是一种用于存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive定义了一种简单的类似SQL的查询语言HQL,它允许熟悉SQL的用户查询数据。同时,这种语言也允许熟悉MapReduce的开发者开发自定义的mapper和reducer来处理内置mapper和reducer无法完成的复杂分析任务。2、组成分析:Hive架构包括:CLI(CommandLineInterface)、JDBC/ODBC、ThriftServer、WEBGUI、Metastore和Driver(Complier、Optimizer和Executor),这些组件分为服务端组件和客户端两类3.客户端和服务器组件(1)客户端组件:CLI:CommandLineInterface,命令行界面。Thrift客户端:Thrift客户端并没有写在上面的架构图中,但是Hive架构的很多客户端接口都是建立在Thrift客户端之上的,包括JDBC和ODBC接口。WEBGUI:Hive客户端提供了一种通过网页访问Hive提供的服务的方式。该接口对应Hive的HWI组件(HiveWebInterface),使用前必须启动HWI服务。(2)Server组件:Driver组件:该组件包括Complier、Optimizer和Executor。它的功能是解析、编译和优化HiveQL(类SQL)语句,生成执行计划,然后调用底层的MapReduce计算框架。Metastore组件:元数据服务组件。该组件存储Hive元数据。Hive元数据存储在关系数据库中。Hive支持的关系型数据库包括Derby和Mysql。元数据对于Hive来说非常重要,因此Hive支持Metastore服务的独立性,并将其安装在远程服务器集群中,从而实现Hive服务与Metastore服务的解耦,保证Hive运行的健壮性;Thrift服务:Thrift是FacebookFramework开发的一款软件,用于开发可扩展和跨语言的服务。Hive集成了这个服务,允许不同的编程语言调用Hive接口。4、Hive与传统数据库的异同(1)查询语言由于SQL在数据仓库中的应用非常广泛,因此专门针对Hive的特点设计了一种类似SQL的查询语言HQL。熟悉SQL开发的开发者可以很方便的使用Hive进行开发。(2)数据存储位置Hive建立在Hadoop之上,所有Hive数据都存储在HDFS中。数据库可以将数据存储在块设备或本地文件系统中。(3)数据格式Hive中没有定义特殊的数据格式。数据格式可由用户指定。自定义数据格式需要指定三个属性:列分隔符(一般为空格,“\t”,“\\x001”)、行分隔符(“\n”)和读取文件数据的方法(有3个Hive中的默认文件格式TextFile、SequenceFile和RCFile)。(4)数据更新由于Hive是为数据仓库应用而设计的,数据仓库的内容是读多写少。因此,Hive不支持改写和添加数据,所有的数据都是在加载时确定的。数据库中的数据通常需要经常修改,所以可以使用INSERTINTO...VALUES来添加数据,使用UPDATE...SET来修改数据。(5)索引Hive在加载数据的过程中不对数据做任何处理,甚至不扫描数据,所以数据中的一些键没有被索引。当Hive要访问数据中满足条件的特定值时,需要暴力扫描整个数据,因此访问延迟很高。由于MapReduce的引入,Hive可以并行访问数据,所以即使没有索引,Hive在访问大量数据时仍然可以显示出优势。在数据库中,索引通常是为一个或多个列建立的,因此对于特定条件下访问少量数据,数据库可以具有高效率和低延迟。由于数据访问延迟高,Hive不适合在线数据查询。(6)执行Hive中的大部分查询都是通过Hadoop提供的MapReduce来执行的(像select*fromtbl这样的查询不需要MapReduce)。数据库通常有自己的执行引擎。(7)执行延迟Hive查询数据时,由于没有索引,需要扫描全表,所以延迟较高。另一个导致Hive执行延迟高的因素是MapReduce框架。由于MapReduce本身具有高延迟,使用MapReduce执行Hive查询时也会出现高延迟。相比之下,数据库的执行延迟较低。当然,这个低是有条件的,就是数据规模小。当数据规模过大,超过数据库的处理能力时,Hive的并行计算可以明显地显示出它的优势。(8)可扩展性由于Hive建立在Hadoop之上,因此Hive的可扩展性与Hadoop一致(世界上最大的Hadoop集群在Yahoo!,2009年规模为4000站节点左右)。但是由于数据库中ACID语义的严格限制,扩展行非常有限。目前高级并行数据库Oracle的理论扩展能力只有100台左右。(9)数据规模由于Hive建立在集群之上,可以使用MapReduce进行并行计算,因此可以支持大规模数据;相应的,数据库能够支持的数据规模较小。Hbase1。定义HBase——Hadoop数据库是一种高可靠、高性能、面向列、可扩展的分布式存储系统。利用HBase技术,可以在廉价的PCServer上搭建一个大规模的结构化存储集群。HBase是GoogleBigtable的开源实现,类似于GoogleBigtable使用GFS作为文件存储系统,HBase使用HadoopHDFS作为文件存储系统;Google运行MapReduce处理Bigtable中的海量数据,HBase也使用HadoopMapReduce处理HBase中的海量数据;GoogleBigtable使用Chubby作为协作服务,HBase使用Zookeeper作为协作服务。2、组成分析:从上图可以看出:Hbase主要由Client、Zookeeper、HMaster和HRegionServer组成,Hstore作为存储系统。ClientHBaseClient使用HBase的RPC机制与HMaster和HRegionServer进行通信。对于管理操作,Client和HMaster进行RPC;对于数据的读写操作,Client和HRegionServer进行RPC。ZookeeperZookeeperQuorum存储了-ROOT-表的地址和HMaster的地址,HRegionServer也会以Ephemeral的方式将自己注册到Zookeeper中,以便HMaster随时感知各个HRegionServer的健康状态。HMasterHMaster没有单点问题。HBase中可以启动多个HMaster。Zookeeper的MasterElection机制保证了总有一个Master在运行。HMaster在功能上主要负责Table和Region的管理:管理用户对Tables的增删改查,检查运行情况,管理HRegionServer的负载均衡。RegionSplit调整Region分布后,负责新Region的分配。HRegionServer关闭后,负责在HRegionServer上迁移Regions失败。HStore存储是HBase存储的核心,它由两部分组成,一部分是MemStore,一部分是StoreFiles。MemStore是一个排序的内存缓冲区。用户写入的数据会先放入MemStore。当MemStore满时,它会被刷新到一个StoreFile(底层实现是HFile)。当StoreFile文件数量增加到一定阈值时,会触发Compact合并操作。多个StoreFile合并为一个StoreFile,合并过程中会进行版本合并和数据删除。因此可以看出,HBase实际上只是增加数据,所有的update和delete操作都在后续的compact过程中进行,这使得用户的写操作只要进入内存就立即返回,保证了HBase的高I/哦表现。StoreFiles被压缩后,会逐渐形成越来越大的StoreFiles。当单个StoreFile的大小超过一定阈值时,会触发Split操作,将当前Region拆分成两个Region。每个子Region都会被HMaster分配给对应的HRegionServer,这样就可以将原来1个Region的压力分摊到2个Region上。三、Hadoop应用实例1、回顾Hadoop总体架构2、Hadoop应用——交通查询系统(1)交通查询系统总体框架(2)交通查询系统总体流程(3)交通数据预处理功能框架查询系统(4)交通查询系统数据预处理流程(5)交通查询NoSQL数据库功能框架(6)交通查询服务功能框架(7)实时流计算数据处理流程图
