zoukankan      html  css  js  c++  java
  • Hadoop数据管理介绍及原理分析

    Hadoop数据管理介绍及原理分析

      最近2014大数据会议正如火如荼的进行着,Hadoop之父Doug Cutting也被邀参加,我有幸听了他的演讲并获得亲笔签名书一本,发现他竟然是左手写字,当然这个他解释为个人习惯问题,也是,外国人左手写字的为数不少,在中国,左撇子在小时候的父母眼中就是“异类”,早早的被矫正过来。废话不多说了,接下来介绍Hadoop的数据管理。

      Hadoop的数据管理,主要包括Hadoop的分布式文件系统HDFS、分布式数据库HBase和数据仓库工具Hive。

    HDFS的数据管理

      HDFS是分布式计算的存储基石,它以流式数据访问模式来存储超大文件,运行于商用硬件集群上。下面介绍一下它的设计:

      1.超大文件:此指具有几百MB、几百GB甚至几百TB大小的文件,目前已经具有存储PB级数据的Hadoop集群了。

      2.流式数据访问:HDFS的构建思路是这样的,一次写入,多次读取时最高效的访问模式,数据集通常由数据源生成或从数据源复制而来,接着长时间在此数据集上进行各种分析。

      3.商用硬件:Hadoop并不需要运行在昂贵且高可靠的硬件上。它是设计运行在商用硬件的集群上的,因此节点故障率还是很高的,当遇到故障被设计成能继续运行且不让用户感到明显的中断。

      4.低时间延迟的数据访问。

      5.大量的小文件。

      6.多用户写入,任意修改文件。

      下面看下HDFS体系结构图:

      

      图中涉及三个角色:NameNode、DataNode、Client。

      NameNode是管理者:主要负责管理文件系统的命名空间、集群配置信息和存储块的复制等。

      DataNode是文件存储者:是文件存储的基本单元,它将文件块(Block)存储在本地文件系统中,保存了所有的Block的Metadata,同时周期性的把所有存在的Block信息发送给NameNode。

      Client:是需要获取分布式文件系统的应用程序。 

      文件写入:

         1. Client向NameNode发起文件写入的请求。

         2. NameNode根据文件大小和文件块配置情况,返回给Client它管理的DataNode的信息。

         3. Client将文件划分为多个block,根据DataNode的地址,按顺序将block写入DataNode块中。

      文件读取:

         1. Client向NameNode发起读取文件的请求。

         2. NameNode返回文件存储的DataNode信息。

         3. Client读取文件信息。

          HDFS作为分布式文件系统在数据管理方面可借鉴点:

          1.文件块的放置:一个Block会有三份备份,一份在NameNode指定的DateNode上,一份放在与指定的DataNode不在同一台机器的DataNode上,一根在于指定的DataNode在同一Rack上的DataNode上。备份的目的是为了数据安全,采用这种方式是为了考虑到同一Rack失败的情况,以及不同数据拷贝带来的性能的问题。

      2.心跳检测:用于检测DataNode健康状况,如有问题就进行数据备份。

      3.数据复制。

      4.数据校验。

      5.单个NameNode:若单个失败,任务处理信息会记录在本地文件系统和远端的文件系统中。

      6.数据管道性的写入。

      7.安全模式:文件系统启动即进入安全模式。此模式主要是为了在系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略进行必要的复制或删除部分数据块。

    HBase的数据管理

      HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。列名字的格式是:"<family>:<label>”。

      HBase在分布式集群主要依靠HRegion、HMaster、Hclient组成的体系结构从整体上管理数据。

      HBaseMaster:HBase的主服务器,与Bigtable的主服务器类似。一个HBase只部署一台主服务器,它通过领导选举算法(Leader Election Algorithm)确保只有一台主服务器是活跃的,如果主服务器瘫痪,可以通过LEA算法从备选的服务器再选择一台。主要承担初始化集群的任务。

                1. 管理用户对Table的增、删、改、查操作

             2. 管理HRegionServer的负载均衡,调整Region分布

             3. 在Region Split后,负责新Region的分配

             4. 在HRegionServer停机后,负责失效HRegionServer 上的Regions迁移

      HRegionServer:HBase域服务器,与Bigtable的Tablet服务器类似。HRegionServer主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBase中最核心的模块。

      HBase Client:HBase客户端是由org.apache.hadooop.HBase.client.HTable定义的。用于查找用户域所在的服务器地址,HBase客户端会与HBase主机交换消息以查找根域的位置,这是两者之间唯一的交流。

      HBase工作原理:

      首先HBase Client端会连接Zookeeper Qurom。通过Zookeeper组件Client能获知哪个Server管理-ROOT-Region。那么Client就去访问管理-ROOT-的Server,在META中记录了HBase中所有表信息,(你可以使用 scan '.META.' 命令列出你创建的所有表的详细信息),从而获取Region分布的信息。一旦Client获取了这一行的位置信息,比如这一行属于哪个Region,Client将会缓存这个信息并直接访问HRegionServer。久而久之Client缓存的信息渐渐增多,即使不访问.META.表也能知道去访问哪个HRegionServer。HBase中包含两种基本类型的文件,一种用于存储WAL的log,另一种用于存储具体的数据,这些数据都通过DFS Client和分布式的文件系统HDFS进行交互实现存储。

    Hive数据管理

      Hive是建立在Hadoop上的数据仓库基础架构。它提供了一系列的工具,用来进行数据提取、转换、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据机制。可以把Hadoop下结构化数据文件映射为一张成Hive中的表,并提供类sql查询功能,除了不支持更新、索引和事务,sql其它功能都支持。可以将sql语句转换为MapReduce任务进行运行,作为sql到MapReduce的映射器。提供shell、JDBC/ODBC、Thrift、Web等接口。优点:成本低可以通过类sql语句快速实现简单的MapReduce统计。

      下图为Hive数据交换图:

      

      作为一个数据仓库,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数据都存储在对应的目录中。

          Buckets:对指定列计算的hash,根据hash值切分数据,目的是为了便于并行,每一个Buckets对应一个文件。

          ExternalTable指向已存在HDFS中的数据,可创建Partition。和Table在元数据组织结构相同,在实际存储上有较大差异。Table创建和数据加载过程,可以用统一语句实现,实际数据被转移到数据仓库目录中,之后对数据的访问将会直接在数据仓库的目录中完成。删除表时,表中的数据和元数据都会删除。ExternalTable只有一个过程,因为加载数据和创建表是同时完成。世界数据是存储在Location后面指定的HDFS路径中的,并不会移动到数据仓库中。

      3.数据交换

         用户接口:包括客户端、Web界面和数据库接口。

         元数据存储:通常是存储在关系数据库中的,如Mysql,Derby等。

      解释器、编译器、优化器、执行器。

         Hadoop:用HDFS进行存储,利用MapReduce进行计算。

         关键点:Hive将元数据存储在数据库中,如Mysql、Derby中。Hive中的元数据包括表的名字、表的列和分区及其属性、表的属性(是否为外部表)、表数据所在的目录等。

         Hive的数据存储在HDFS中,大部分的查询由MapReduce完成。

     

     

      PS:本博客欢迎转发,但请注明博客地址及作者~

       博客地址:http://www.cnblogs.com/voidy/

       <。)#)))≦ 

  • 相关阅读:
    设置跨域
    Vs自定nuget push菜单
    VS IIS Express 支持局域网访问
    字符串GZIP压缩解压
    C# 使用 protobuf 进行对象序列化与反序列化
    RabbitMQ
    如果调用.net core Web API不能发送PUT/DELETE请求怎么办?
    log4net配置使用
    redis实现消息队列
    Error-the resource is not on the build path of a java project
  • 原文地址:https://www.cnblogs.com/voidy/p/4162395.html
Copyright © 2011-2022 走看看