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/

   <。)#)))≦ 

时间: 2024-10-08 08:16:49

Hadoop数据管理介绍及原理分析的相关文章

AbstractQueuedSynchronizer的介绍和原理分析(转)

简介 提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架.该同步器(以下简称同步器)利用了一个int来表示状态,期望它能够成为实现大部分同步需求的基础.使用的方法是继承,子类通过继承同步器并需要实现它的方法来管理其状态,管理的方式就是通过类似acquire和release的方式来操纵状态.然而多线程环境中对状态的操纵必须确保原子性,因此子类对于状态的把握,需要使用这个同步器提供的以下三个方法对状态进行操作: java.util.concurrent.locks.Abstra

Servlet过滤器介绍之原理分析

zhangjunhd 的BLOG   写留言去学院学习发消息 加友情链接进家园 加好友 博客统计信息 51CTO博客之星 用户名:zhangjunhd文章数:110 评论数:858访问量:1923464无忧币:6720博客积分:6145博客等级:8注册日期:2007-02-03 热门专题更多>> Linux系统基础之菜鸟进阶 阅读量:2359 ARM驱动之Linux驱动程序设计入门 阅读量:2252 HTML5入门教程 阅读量:1392 深入浅出学MySQL 阅读量:1558 热门文章 基于T

转载:AbstractQueuedSynchronizer的介绍和原理分析

简介 提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架.该同步器(以下简称同步器)利用了一个int来表示状态,期望它能够成为实现大部分同步需求的基础.使用的方法是继承,子类通过继承同步器并需要实现它的方法来管理其状态,管理的方式就是通过类似acquire和release的方式来操纵状态.然而多线程环境中对状态的操纵必须确保原子性,因此子类对于状态的把握,需要使用这个同步器提供的以下三个方法对状态进行操作: java.util.concurrent.locks.Abstra

AbstractQueuedSynchronizer的介绍和原理分析

转自http://ifeve.com/introduce-abstractqueuedsynchronizer/ 提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架.该同步器(以下简称同步器)利用了一个int来表示状态,期望它能够 成为实现大部分同步需求的基础.使用的方法是继承,子类通过继承同步器并需要实现它的方法来管理其状态,管理的方式就是通过类似acquire和 release的方式来操纵状态.然而多线程环境中对状态的操纵必须确保原子性,因此子类对于状态的把握,需要使用

ConcrrentSkipListMap介绍和原理分析

一.前言: JDK为我们提供了很多Map接口的实现,使得我们可以方便地处理Key-Value的数据结构. 当我们希望快速存取<Key, Value>键值对时我们可以使用HashMap. 当我们希望在多线程并发存取<Key, Value>键值对时,我们会选择ConcurrentHashMap. TreeMap则会帮助我们保证数据是按照Key的自然顺序或者compareTo方法指定的排序规则进行排序. OK,那么当我们需要多线程并发存取<Key, Value>数据并且希望保

并发编程--AbstractQueuedSynchronizer介绍和原理分析

AbstractQueuedSynchronizer是并发编程包中最重要的类,是并发编程包的实现基层.简单来说,AbstractQueuedSynchronizer提供了一个基于FIFO的队列,用于存储处于阻塞状态的线程:提供了一个volatile修改的state变量,用于作为锁获取的标识位,对于FIFO队列和state的操作都是通过Unsafe这个类来实现CAS原子操作. AQS的功能可以分为两类:独占功能和共享功能,它的所有子类中,要么实现了并使用了它独占锁功能的API,要么使用了共享锁的功

Gearman介绍、原理分析、实践改进

gearman是什么? 它是分布式的程序调用框架,可完成跨语言的相互调用,适合在后台运行工作任务.最初是2005年perl版本,2008年发布C/C++版本.目前大部分源码都是(Gearmand服务job Server)C++,各个API实现有各种语言的版本.PHP的Client API与Worker API实现为C扩展,在PHP官方网站有此扩展的中英文文档. gearman架构中的三个角色 client:请求的发起者,工作任务的需求方(可以是C.PHP.Java.Perl.Mysql udf等

深入理解HTTP协议、HTTP协议原理分析

深入理解HTTP协议.HTTP协议原理分析 目录(?)[+] http协议学习系列 1. 基础概念篇 1.1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本.其中最著名的就是RFC 26

Tomcat7.0源码分析——请求原理分析(中)

前言 在<TOMCAT7.0源码分析--请求原理分析(上)>一文中已经介绍了关于Tomcat7.0处理请求前作的初始化和准备工作,请读者在阅读本文前确保掌握<TOMCAT7.0源码分析--请求原理分析(上)>一文中的相关知识以及HTTP协议和TCP协议的一些内容.本文重点讲解Tomcat7.0在准备好接受请求后,请求过程的原理分析. 请求处理架构 在正式开始之前,我们先来看看图1中的Tomcat请求处理架构. 图1 Tomcat请求处理架构 图1列出了Tomcat请求处理架构中的主