网站建设合同用缴印花税吗,中国购物网站设计欣赏,济南建设档案大厦,微网站模板多少钱HDFS的体系架构 整个Hadoop的体系结构主要是通过HDFS来实现对分布式存储的底层支持#xff0c;并通过MR来实现对分布式并行任务处理的程序支持。 HDFS采用主从#xff08;Master/Slave#xff09;结构模型#xff0c;一个HDFS集群是由一个NameNode和若干个DataNode组…HDFS的体系架构 整个Hadoop的体系结构主要是通过HDFS来实现对分布式存储的底层支持并通过MR来实现对分布式并行任务处理的程序支持。 HDFS采用主从Master/Slave结构模型一个HDFS集群是由一个NameNode和若干个DataNode组成的在最新的Hadoop2.2版本已经实现多个NameNode的配置-这也是一些大公司通过修改hadoop源代码实现的功能在最新的版本中就已经实现了。NameNode作为主服务器管理文件系统命名空间和客户端对文件的访问操作。DataNode管理存储的数据。HDFS支持文件形式的数据。 从内部来看文件被分成若干个数据块这若干个数据块存放在一组DataNode上。NameNode执行文件系统的命名空间如打开、关闭、重命名文件或目录等也负责数据块到具体DataNode的映射。DataNode负责处理文件系统客户端的文件读写并在NameNode的统一调度下进行数据库的创建、删除和复制工作。NameNode是所有HDFS元数据的管理者用户数据永远不会经过NameNode 如图HDFS体系结构图 图中涉及三个角色NameNode、DataNode、Client。NameNode是管理者DataNode是文件存储者、Client是需要获取分布式文件系统的应用程序。
文件写入 1 Client向NameNode发起文件写入的请求。 2 NameNode根据文件大小和文件块配置情况返回给Client它管理的DataNode的信息。 3 Client将文件划分为多个block根据DataNode的地址按顺序将block写入DataNode块中。
文件读取 1 Client向NameNode发起读取文件的请求。 2 NameNode返回文件存储的DataNode信息。 3 Client读取文件信息。 HDFS作为分布式文件系统在数据管理方面可借鉴点 文件块的放置一个Block会有三份备份一份在NameNode指定的DateNode上一份放在与指定的DataNode不在同一台机器的DataNode上一根在于指定的DataNode在同一Rack上的DataNode上。备份的目的是为了数据安全采用这种方式是为了考虑到同一Rack失败的情况以及不同数据拷贝带来的性能的问题。
MapReduce体系架构 MR框架是由一个单独运行在主节点上的JobTracker和运行在每个集群从节点上的TaskTracker共同组成。主节点负责调度构成一个作业的所有任务这些任务分布在不同的不同的从节点上。主节点监视它们的执行情况并重新执行之前失败的任务。从节点仅负责由主节点指派的任务。当一个Job被提交时JobTracker接受到提交作业和配置信息之后就会将配置信息等分发给从节点同时调度任务并监控TaskTracker的执行。JobTracker可以运行于集群中的任意一台计算机上。TaskTracker负责执行任务它必须运行在DataNode上DataNode既是数据存储节点也是计算节点。JobTracker将map任务和reduce任务分发给空闲的TaskTracker这些任务并行运行并监控任务运行的情况。如果JobTracker出了故障JobTracker会把任务转交给另一个空闲的TaskTracker重新运行。 HDFS和MR共同组成Hadoop分布式系统体系结构的核心。HDFS在集群上实现了分布式文件系统MR在集群上实现了分布式计算和任务处理。HDFS在MR任务处理过程中提供了文件操作和存储等支持MR在HDFS的基础上实现了任务的分发、跟踪、执行等工作并收集结果二者相互作用完成分布式集群的主要任务。 Hadoop上的并行应用程序开发是基于MR编程框架。MR编程模型原理利用一个输入的key-value对集合来产生一个输出的key-value对集合。MR库通过Map和Reduce两个函数来实现这个框架。用户自定义的map函数接受一个输入的key-value对然后产生一个中间的key-value对的集合。MR把所有具有相同的key值的value结合在一起然后传递个reduce函数。Reduce函数接受key和相关的value结合reduce函数合并这些value值形成一个较小的value集合。通常我们通过一个迭代器把中间的value值提供给reduce函数迭代器的作用就是收集这些value值这样就可以处理无法全部放在内存中的大量的value值集合了。 流程简而言之大数据集被分成众多小的数据集块若干个数据集被分在集群中的一个节点进行处理并产生中间结果。单节点上的任务map函数一行行读取数据获得数据的k1,v1数据进入缓存通过map函数执行map基于key-value排序框架会对map的输出进行排序执行后输入k2,v2。每一台机器都执行同样的操作。不同机器上的k2,v2通过merge排序的过程shuffle的过程可以理解成reduce前的一个过程最后reduce合并得到k3,v3输出到HDFS文件中。 谈到reduce在reduce之前可以先对中间数据进行数据合并Combine即将中间有相同的key的key,value对合并。Combine的过程与reduce的过程类似但Combine是作为map任务的一部分在执行完map函数后仅接着执行。Combine能减少中间结果key-value对的数目从而降低网络流量。 Map任务的中间结果在做完Combine和Partition后以文件的形式存于本地磁盘上。中间结果文件的位置会通知主控JobTrackerJobTracker再通知reduce任务到哪一个DataNode上去取中间结果。所有的map任务产生的中间结果均按其key值按hash函数划分成R份R个reduce任务各自负责一段key区间。每个reduce需要向许多个map任务节点取的落在其负责的key区间内的中间结果然后执行reduce函数最后形成一个最终结果。有R个reduce任务就会有R个最终结果很多情况下这R个最终结果并不需要合并成一个最终结果因为这R个最终结果可以作为另一个计算任务的输入开始另一个并行计算任务。这就形成了上面图中多个输出数据片段HDFS副本。
Hbase数据管理 Hbase就是Hadoop database。与传统的mysql、oracle究竟有什么差别。即列式数据与行式数据由什么区别。NoSql数据库与传统关系型数据由什么区别
Hbase VS Oracle 1、 Hbase适合大量插入同时又有读的情况。输入一个Key获取一个value或输入一些key获得一些value。 2、 Hbase的瓶颈是硬盘传输速度。Hbase的操作它可以往数据里面insert也可以update一些数据但update的实际上也是insert只是插入一个新的时间戳的一行。Delete数据也是insert只是insert一行带有delete标记的一行。Hbase的所有操作都是追加插入操作。Hbase是一种日志集数据库。它的存储方式像是日志文件一样。它是批量大量的往硬盘中写通常都是以文件形式的读写。这个读写速度就取决于硬盘与机器之间的传输有多快。而Oracle的瓶颈是硬盘寻道时间。它经常的操作时随机读写。要update一个数据先要在硬盘中找到这个block然后把它读入内存在内存中的缓存中修改过段时间再回写回去。由于你寻找的block不同这就存在一个随机的读。硬盘的寻道时间主要由转速来决定的。而寻道时间技术基本没有改变这就形成了寻道时间瓶颈。 3、 Hbase中数据可以保存许多不同时间戳的版本即同一数据可以复制许多不同的版本准许数据冗余也是优势。数据按时间排序因此Hbase特别适合寻找按照时间排序寻找Top n的场景。找出某个人最近浏览的消息最近写的N篇博客N种行为等等因此Hbase在互联网应用非常多。 4、 Hbase的局限。只能做很简单的Key-value查询。它适合有高速插入同时又有大量读的操作场景。而这种场景又很极端并不是每一个公司都有这种需求。在一些公司就是普通的OLTP联机事务处理cuiyaonan2000163.com随机读写。在这种情况下Oracle的可靠性系统的负责程度又比Hbase低一些。而且Hbase局限还在于它只有主键索引因此在建模的时候就遇到了问题。比如在一张表中很多的列我都想做某种条件的查询。但却只能在主键上建快速查询。所以说不能笼统的说那种技术有优势。 5、 Oracle是行式数据库而Hbase是列式数据库。列式数据库的优势在于数据分析这种场景。数据分析与传统的OLTP的区别。数据分析经常是以某个列作为查询条件返回的结果也经常是某一些列不是全部的列。在这种情况下行式数据库反应的性能就很低效。 行式数据库Oracle为例数据文件的基本组成单位块/页。块中数据是按照一行行写入的。这就存在一个问题当我们要读一个块中的某些列的时候不能只读这些列必须把这个块整个的读入内存中再把这些列的内容读出来。换句话就是为了读表中的某些列必须要把整个表的行全部读完才能读到这些列。这就是行数据库最糟糕的地方。 列式数据库是以列作为元素存储的。同一个列的元素会挤在一个块。当要读某些列只需要把相关的列块读到内存中这样读的IO量就会少很多。通常同一个列的数据元素通常格式都是相近的。这就意味着当数据格式相近的时候数据就可以做大幅度的压缩。所以列式数据库在数据压缩方面有很大的优势压缩不仅节省了存储空间同时也节省了IO。这一点可利用在当数据达到百万、千万级别以后数据查询之间的优化提高性能示场景而定
Hive数据管理 Hive是建立在Hadoop上的数据仓库基础架构。它提供了一系列的工具用来进行数据提取、转换、加载这是一种可以存储、查询和分析存储在Hadoop中的大规模数据机制。可以把Hadoop下结构化数据文件映射为一张成Hive中的表并提供类sql查询功能除了不支持更新、索引和事务sql其它功能都支持。可以将sql语句转换为MapReduce任务进行运行作为sql到MapReduce的映射器。提供shell、JDBC/ODBC、Thrift、Web等接口。优点成本低可以通过类sql语句快速实现简单的MapReduce统计。作为一个数据仓库Hive的数据管理按照使用层次可以从元数据存储、数据存储和数据交换三个方面介绍。
1元数据存储 Hive将元数据存储在RDBMS中有三种方式可以连接到数据库 ·内嵌模式元数据保持在内嵌数据库的Derby一般用于单元测试只允许一个会话连接 ·多用户模式在本地安装Mysql把元数据放到Mysql内 ·远程模式元数据放置在远程的Mysql数据库
2数据存储 首先Hive没有专门的数据存储格式也没有为数据建立索引用于可以非常自由的组织Hive中的表只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符这就可以解析数据了。 其次Hive中所有的数据都存储在HDFS中Hive中包含4中数据模型Tabel、ExternalTable、Partition、Bucket。 Table类似与传统数据库中的Table每一个Table在Hive中都有一个相应的目录来存储数据。例如一个表zz它在HDFS中的路径为/wh/zz其中wh是在hive-site.xml中由${hive.metastore.warehouse.dir}指定的数据仓库的目录所有的Table数据不含External Table都保存在这个目录中。 Partition类似于传统数据库中划分列的索引。在Hive中表中的一个Partition对应于表下的一个目录所有的Partition数据都存储在对应的目录中。例如zz表中包含ds和city两个Partition则对应于ds20140214citybeijing的HDFS子目录为/wh/zz/ds20140214/cityBeijing; Buckets对指定列计算的hash根据hash值切分数据目的是为了便于并行每一个Buckets对应一个文件。将user列分数至32个Bucket上首先对user列的值计算hash比如对应hash0的HDFS目录为/wh/zz/ds20140214/cityBeijing/part-00000;对应hash20的目录为/wh/zz/ds20140214/cityBeijing/part-00020。 ExternalTable指向已存在HDFS中的数据可创建Partition。和Table在元数据组织结构相同在实际存储上有较大差异。Table创建和数据加载过程可以用统一语句实现实际数据被转移到数据仓库目录中之后对数据的访问将会直接在数据仓库的目录中完成。删除表时表中的数据和元数据都会删除。ExternalTable只有一个过程因为加载数据和创建表是同时完成。世界数据是存储在Location后面指定的HDFS路径中的并不会移动到数据仓库中。
3数据交换 ·用户接口包括客户端、Web界面和数据库接口 ·元数据存储通常是存储在关系数据库中的如MysqlDerby等 ·Hadoop用HDFS进行存储利用MapReduce进行计算。 关键点Hive将元数据存储在数据库中如Mysql、Derby中。Hive中的元数据包括表的名字、表的列和分区及其属性、表的属性是否为外部表、表数据所在的目录等。 Hive的数据存储在HDFS中大部分的查询由MapReduce完成。
总结 通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS、MapReduce处理过程以及数据仓库工具Hive和分布式数据库Hbase的介绍。基本涵盖了Hadoop分布式平台的所有技术核心。从体系架构到数据定义到数据存储再到数据处理从宏观到微观的系统介绍为Hadoop平台上大规模的数据存储和任务处理打下基础。