HBase环境部署

作者: 心_的方向 | 来源:发表于2016-11-24 21:50 被阅读390次
    3.png ](https://img.haomeiwen.com/i3068725/574284fb7d9f4eac.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    HBase可以被看做一个主-从架构的数据库
    • ** Master **:为HBase的主节点,用来协调客户端应用程序和RegionServer的关系,监控和记录数据库表的元数据的变化。一般来讲一个集群中有多个Master,而且一般和Hadoop中的NameNode运行同一主机上。
    • ** RegionServer **:为HBase的从节点,用region的形式存储实际的表。region是HBase表的基础单元。一般和Hadoop中的DataNode运行在同一主机上。
    • ** ZooKeeper **:用来选举集群主节点Master,维持只有一个master提供访问和运行,同时存储集群的元数据。

    HBase的数据存储模型

    2.png
    ** 行健(rowkey) **:是HBase表中每个记录的主键,可以提高查找 功能的速度。
    ** 列簇(column family) **:是一个字符串名称,包含一个或者多个列,这样做也是为了提高检索速度(检索所需的列的时间更快)。
    ** 列 **:列一定属于某一个列簇。
    ** 版本(version) **:一个单元格可以保存多个值,一个version代表着一个单元格可以同时存储几个值。
    ** 时间戳(timestamp) **:对于每条插入的数据,当前的时间戳与值是相关的,它表示了数值插入到这个单元格中的时间。
    ** 单元格 :最小的存储单元,是一行的一个列中的实际值, 值都是用字节数组存储的 **
    ** namespace **:hbase中数据库的概念,表名对应有一个namespace

    综上所述,插入一个单元格数据必须包含
    ** rowkey+columnfamily(列簇名)+columname(列名)+timestamp:value **
    其中rowkey+列簇名+列名 确定一个单元格;
    rowkey+列簇名+列名+timestamp 确定一个单元格中的一个值。

    安装部署伪分布式HBase

    1. 启动hadoop


      3.png
    2. 启动zookeeper


      4.png
    3. 下载解压hbase


      5.png
    4. 修改配置文件
    • hbase-env.sh文件
        export JAVA_HOME=/opt/modules/jdk1.7.0_67
    # Tell HBase whether it should manage it's own instance of Zookeeper or not.
        export HBASE_MANAGES_ZK=false
    
    • hbase-site.xml文件
      <property >
            <!-- hbase临时存储数据的目录 -->
            <name>hbase.tmp.dir</name>
            <value>/opt/modules/hbase-0.98.6-hadoop2/datas</value>
      </property>
      <property >
            <!-- hbase在hdfs存储表的根目录 -->
            <name>hbase.rootdir</name>
            <value>hdfs://bigdata-00:8020/hbase</value>
      </property>
      <property >
            <name>hbase.cluster.distributed</name>
            <value>true</value>
      </property>
      <property>
            <!-- 配置zookeeper节点的位置 -->
            <name>hbase.zookeeper.quorum</name>
            <value>bigdata-00</value>
     </property>
    
    1. 启动hbase
    $ bin/hbase-daemon.sh start master
    $ bin/hbase-daemon.sh start regionserver
    
    6.png

    登陆web界面查看(bigdata-00:60010)


    7.png

    HBase中shell的基本使用

    进入hbase命令行bin/hbase shell
    list_namespace查看有哪些namespace

    8.png
    create_namespace 'test'创建一个namespace,后面接namespace名
    describe_namespace 'test'描述一个namespace
    9.png
    drop_namespace 'test'删除一个namespace
    list查看有哪些表
    create 'ns:表名','列簇名'
    describe 'ns:表名'显示表的详细信息
    10.png
    drop 'ns:tbname'删除一个表
    put 'ns:tbname','行键','列簇:列名','值'插入一个数据
    get 'ns:tbname','行键','列簇','列'获取一个单元格的数据,如果不加后面的列簇和列,即为获取一行的数据。
    scan 'ns:tbname'查看一个表的所有数据
    11.png
    scan 'nstest:tb1',{STARTROW => '20161119_10001',STOPROW => '20161119_10003'}scan+过滤条件查询数据
    delete 'ns:tbname','键值','列簇:列名'删除一个值

    HBase表的物理模型

    HBase在实际的存储中,每个列簇存储在单独的一个HDFS上。表格中的行都是按照RowKey字典序列进行排序的,并且表格在行的方向上被分割为多个Region。如下图:


    12.png

    如下图,表A按照行被分为相等大小的4个Region,这些Region分别被RegionServer管理,但是每个RegionServer可以管理不同表格中的Region。为了负载尽量相同,每个RegionServer管理的Region数据基本上是相同的。


    13.png
    15.png
    Region是按照大小进行分割的,每个表最开始只有一个Region,随着数据增多,Region不断增大,当增大到一个阈值的时候,Region就会等分成两个新的Region,之后的过程也同样,随着数据量的增加,不断分割Region。
    14.png

    Region虽然是分布式存储的最小单元,但不是存储的最小单元

    • 一个Region由一个或多个Store组成,每个Store保存一个列簇
    • 每个Store又由一个memStore和0到多个StoreFile
    • memStore存储在内存中,StoreFile存储在HDFS中
    • memStore是内存中的写入缓冲区,HBase写入数据到硬盘之前是将数据累积在memStore中,当这个内存缓冲区写满后将数据写到StoreFiel上。
    • 每个Region包含一个HLOG,它是预写式日志WAL,但存储数据的时候只有当把数据写入到WAL和每个Store中的memStore才算成功,这样可以保证数据的安全性。


      16.png

    相关文章

      网友评论

        本文标题:HBase环境部署

        本文链接:https://www.haomeiwen.com/subject/udubpttx.html