• hbase入门(一)


    一、Hbase是一个开源的、分布式、面向列的存储模型

    二、Hbase体系结构:

    遵从简单的主从服务器架构,由HRegion Server群、Hbase Master服务器组成,Hbase Master负责管理所有的HRegion Server,通过zookeeper协调,Hbase逻辑上的表会被划分成多个Region,然后存储到Region Server群中,Hbase Master中存储的是数据到HRegion Server的映射。

    1、Hbase Client使用Hbase的RPC机制与Hregion Server、Hbase Master通信,对于管理类的操作,Client与Master使用RPC通信,对于一些数据的读写操作,Client与Server通过RPC通信。

    2、HMaster:

    主要任务就是告诉每台HRegion Server它要维护哪些Region。

    当一台新的HRegion Server登录到Master中时,Master会告诉它等待分配数据,如果一个Region死机时,Master会把它的数据标记为未分配,然后再将数据分配到其它的Server中去。

    Hbase中可以启动多个HMaster来解决单点故障的问题。

    3、HRegion:

    当表数据超过设置值时,Hbase会自动将表划分成不同的区域,在物理上,一张表被划分成了多个块,每个块就是一个Region,我们用表名+开始/结束键来区分每个Region,一个Region会保存表里某段连续的数据,一张完整的表格是保存在多个HRegion里。

    4、HRegionServer:

    主要负责相应用户IO请求,向HDFS中读写数据,管理了一系列HRegion对象,每个HRegion对应table中一个region.

    HRegion由多个HStore组成,每个HStore对应table中的一个Column Family的存储,HStore由两部分组成:

    (1)MemStore:用户写入数据首先会放入MemStore,当一个MemStore满了以后会flush成一个StoreFile,当StoreFile数量达到一定阀值以后,会出发Compact合并操作,并将多个StoreFile合并成一个StoreFile,合并过程中会进行版本合并和数据删除,可以看出HBase其实只有增加数据,

    所有的更新和删除操作都是后续的Compact操作完成的,当StoreFile大小查过设定阀值时会出发Split操作,会把当前的Region Split成两个Region,父Region下线,新分配出的两个子Region会被HMaster分配到相应的HRegion Server中去。

    (2)StoreFiles

    5、HLog:

    每个HRegion Server中都有一个HLog对象,每次用户写数据到MemStore中的时候也会写一份数据到HLog,当HRegion Server意外终止后,HMaster会通过Zookeeper感知到,然后将HLog中不同Region的数据进行拆分,分别放到不同Region的目录下

    6、HBase存储格式:

    HFile:HBase中key value格式的数据的存储格式,hadoop的二进制格式文件,StoreFile的底层就是HFile。

    HLogFile:wal的存储格式,物理上是hadoop中的sequence file。

    7、ROOT、META表:

    用户region表元数据存储在META表中,为了定位META表中各个Regions的位置,把META表中所有regions的元数据存储在ROOT表中,最后由zookeeper记录ROOT表的位置信息,客户端访问数据时首先zookeeper获得ROOT位置,然后访问ROOT获得META表位置,最后由META表中数据确定用户

    数据的存放位置,而且ROOT表永远不会被切割,永远都是一个Region,而且META表的所有Region都存放在内存中。

    三、HBase数据模型:

    分布式数据库,类似于是一个长期存储在硬盘上、多维度的、排序的映射表,表的索引是:行关键字+列关键字+时间戳,而且数据都是字符串,没有其它类型。

    四、HBase安装:

    1、下载HBase,注意HBase的版本要与Hadoop版本一致,比如Hadoop2.2我安装的HBase版本是0.98.17-hadoop2,版本不一致启动的时候会报错。

    2、解压,修改如下配置文件:

    (1)hbase-env.sh:增加如下配置内容:

    export JAVA_HOME=/export/servers/jdk1.6.0_25
    export HBASE_MANAGES_ZK=true
    export HBASE_HOME=/export/servers/hbase-0.98.17-hadoop2
    export HADOOP_HOME=/usr/local/hadoop-2.2.0

    (2)hbase-site.xml:

    <configuration>
    <property>
    <name>hbase.master.maxclockskew</name>
    <value>180000</value>
    </property>
    <property>
    <name>hbase.rootdir</name>
    <value>hdfs://hadoop-kf100.jd.com:8020/hbase</value>//注意:与hadoop namenode端口一样
    </property>
    <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
    </property>
    <property>
    <name>hbase.master</name>
    <value>hadoop-kf100.jd.com:6000</value>
    </property>
    <property>
    <name>hbase.zookeeper.quorum</name>
    <value>192.168.157.100,192.168.157.101,192.168.157.103</value>--zookeeper数量必须是奇数
    </property>
    <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/home/${user.name}/tmp/zookeeper</value>
    </property>
    <property>
    <name>dfs.replication</name>
    <value>3</value>
    </property>
    </configuration>

    (3)regionservers:

    将子节点host添加进去,操作方法同hadoop的slaves文件

    3、配置完后先启动zookeeper,然后启动hbase:

    sh hbase-daemon.sh start master--启动master

    sh start-hbase.sh-启动子节点的regionserver

    4、配置完后在浏览器输入hadoop-kf100.jd.com:60010/master.jsp可以看见hbase的集群资源情况

  • 相关阅读:
    WP7开发学习(3):在WP7中使用WCF+log4net 打印并输出日志文件(附源码)
    MongoDB开发学习(2)索引的基本操作
    C#批量添加水印
    获取某一时间戳的月份的开始时间戳和结束时间戳
    php判断一个字符串是否为日期格式
    正则表达式匹配括号引号内容
    PHP获取今日汽油价格接口
    ThinkPHP5 在Nginx环境下开启伪静态
    PHP格式化打印:JSON字符串|对象|数组
    php header ContentType出错
  • 原文地址:https://www.cnblogs.com/zhli/p/5288976.html
Copyright © 2020-2023  润新知