设为首页 收藏本站
查看: 894|回复: 0

[经验分享] Hadoop数据管理介绍及原理分析

[复制链接]

尚未签到

发表于 2015-7-11 10:13:21 | 显示全部楼层 |阅读模式
  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体系结构图:
     DSC0000.png
    图中涉及三个角色: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基于列的而不是基于行的模式。列名字的格式是:":”。
    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数据交换图:
     DSC0001.jpg
    作为一个数据仓库,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.iyunv.com/voidy/
    

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-85442-1-1.html 上篇帖子: 【hadoop摸索系列】记录使用libhdfs访问hdfs的关键问题 下篇帖子: hadoop客户端效率问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表