zoukankan      html  css  js  c++  java
  • 大数据笔记(十三)——常见的NoSQL数据库之HBase数据库(A)

    一.HBase的表结构和体系结构

      1.HBase的表结构

      把所有的数据存到一张表中。通过牺牲表空间,换取良好的性能。

      HBase的列以列族的形式存在。每一个列族包括若干列

      2.HBase的体系结构

      主从结构:

        主节点:HBase

        从节点:RegionServer 包含多个Region,一个列族就是一个Region

    HBase在ZK中保存数据
    (*)配置信息、HBase集群结构信息
    (*)表的元信息
    (*)实现HBase的HA:high avaibility 高可用性

    二.搭建HBase的本地模式和伪分布模式

      1.解压:

    tar -zxvf hbase-1.3.1-bin.tar.gz -C ~/training/

      2.设置环境变量: vi ~/.bash_profile

    HBASE_HOME=/root/training/hbase-1.3.1
    export HBASE_HOME
    
    PATH=$HBASE_HOME/bin:$PATH
    export PATH

    使文件生效:source ~/.bash_profile

      

      本地模式  不需要HDFS、直接把数据存在操作系统

    hbase-env.sh 

    export JAVA_HOME=/root/training/jdk1.8.0_144

    hbase-site.xml

    <property>
        <name>hbase.rootdir</name>
        <value>file:///root/training/hbase-1.3.1/data</value>
    </property>

      伪分布模式

    hbase-env.sh 添加下面这一行,使用自带的Zookeeper

    export HBASE_MANAGES_ZK=true

    hbase-site.xml 把本地模式的property删除,添加下列配置

    <property>
       <name>hbase.rootdir</name> <value>hdfs://192.168.153.11:9000/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <!--Zookeeper的地址--> <name>hbase.zookeeper.quorum</name> <value>192.168.153.11</value> </property> <property> <!--数据冗余度--> <name>dfs.replication</name> <value>1</value> </property>

    regionservers

    192.168.153.11

    可以在web上查看

    三.搭建HBase的全分布模式和HA

    在putty中设置bigdata12 bigdata13 bigdata14 时间同步:date -s 2018-03-10

    主节点:hbase-site.xml

    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://192.168.153.12:9000/hbase</value>
    </property>
    
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>192.168.153.12</value>
    </property>
    
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>            
    
    <property>
        <!--解决时间不同步的问题:允许的时间误差最大值-->
        <name>hbase.master.maxclockskew</name>
        <value>180000</value>
    </property>

    regionservers

    192.168.154.13
    192.168.153.14

    拷贝到13和14上:

    scp -r hbase-1.3.1/ root@bigdata13:/root/training
    scp -r hbase-1.3.1/ root@bigdata14:/root/training

    四.HBase在Zookeeper中保存的数据和HA的实现

    HA的实现:

    不需要额外配置,只用在其中一个从节点上单点启动Hmaster
    bigdata13:hbase-daemon.sh start master

    五.操作HBase

      1.Web Console网页:端口:16010 

            2.命令行

      开启hbase: start-hbase.sh

          开启hbase shell

     建表:


    hbase(main):001:0> create 'students','info','grade' //创建表 0 row(s) in 1.7020 seconds => Hbase::Table - students hbase(main):002:0> desc 'students' //查看表结构 Table students is ENABLED students COLUMN FAMILIES DESCRIPTION {NAME => 'grade', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODIN G => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATI ON_SCOPE => '0'} {NAME => 'info', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATIO N_SCOPE => '0'} 2 row(s) in 0.2540 seconds hbase(main):003:0> describe 'students' Table students is ENABLED students COLUMN FAMILIES DESCRIPTION {NAME => 'grade', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODIN G => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATI ON_SCOPE => '0'} {NAME => 'info', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATIO N_SCOPE => '0'} 2 row(s) in 0.0240 seconds

    desc和describe的区别:

    desc是SQL*PLUS语句

    describe是SQL语句

    分析students表的结构

    查看有哪些表:list

    插入数据:put

    put 'students','stu001','info:name','Tom'
    put 'students','stu001','info:age','24'
    put 'students','stu001','grade:math','85'
    put 'students','stu002','info:name','Mary'
    put 'students','stu002','info:age','28'

    查询数据:

    scan 相当于:select * from students

    get   相当于  select * from students where rowkey=??

     

    清空表中的数据

    delete DML(可以回滚)

    truncate DDL(不可以回滚)

    补充:DDL:数据定义语言,如 create/alter/drop/truncate/comment/grant等
    DML:数据操作语言,如select/delete/insert/update/explain plan等
    DCL:数据控制语言,如commit/roollback
    2、delete会产生碎片;truncate不会
    3、delete不会释放空间;truncate会
    4、delete可以闪回(flashback),truncate不可以闪回

     truncate 'students' -----> 本质: 先删除表,再重建

    日志:

    Truncating 'students' table (it may take a while):
    - Disabling table...
    - Truncating table...
    0 row(s) in 4.0840 seconds

      3.JAVA API

    修改etc文件:C:WindowsSystem32driversetc

    添加一行:192.168.153.11 bigdata11

    TestHBase.java

    package demo;
    
    import java.io.IOException;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.hbase.HColumnDescriptor;
    import org.apache.hadoop.hbase.HTableDescriptor;
    import org.apache.hadoop.hbase.MasterNotRunningException;
    import org.apache.hadoop.hbase.TableName;
    import org.apache.hadoop.hbase.ZooKeeperConnectionException;
    import org.apache.hadoop.hbase.client.Get;
    import org.apache.hadoop.hbase.client.HBaseAdmin;
    import org.apache.hadoop.hbase.client.HTable;
    import org.apache.hadoop.hbase.client.Put;
    import org.apache.hadoop.hbase.client.Result;
    import org.apache.hadoop.hbase.client.ResultScanner;
    import org.apache.hadoop.hbase.client.Scan;
    import org.apache.hadoop.hbase.util.Bytes;
    import org.junit.Test;
    
    import io.netty.util.internal.SystemPropertyUtil;
    
    /**
     * 1.需要一个jar包: hamcrest-core-1.3.jar
     * 2.修改windows host文件
     * C:WindowsSystem32driversetchosts
     * 192.168.153.11 bigdata11
     * @author YOGA
     *
     */
    public class TestHBase {
    
        @Test
        public void testCreateTable() throws Exception{
            //配置ZK的地址信息
            Configuration conf = new Configuration();
            //hbase-site.xml文件里
            conf.set("hbase.zookeeper.quorum", "192.168.153.11");
            
            //得到HBsase客户端
            HBaseAdmin client = new HBaseAdmin(conf);
            
            //创建表的描述符
            HTableDescriptor htd = new HTableDescriptor(TableName.valueOf("mytable"));
            
            //添加列族
            htd.addFamily(new HColumnDescriptor("info"));
            htd.addFamily(new HColumnDescriptor("grade"));
            
            //建表
            client.createTable(htd);
            
            client.close();
        }
        
        @Test
        public void testPut() throws Exception{
            //配置ZK的地址信息
            Configuration conf = new Configuration();
            conf.set("hbase.zookeeper.quorum", "192.168.153.11");
            
            //得到HTable客户端
            HTable client = new HTable(conf, "mytable");
            
            //构造一个Put对象,参数:rowKey
            Put put = new Put(Bytes.toBytes("id001"));
            //put.addColumn(family, //列族
            //              qualifier, ////              value)  ֵ//列对应的值
            put.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name"), Bytes.toBytes("Tom"));
            
            client.put(put);
            //client.put(List<Put>); 
            client.close();
        }
        
        @Test
        public void testGet() throws Exception{
            //配置ZK的地址信息
            Configuration conf = new Configuration();
            conf.set("hbase.zookeeper.quorum", "192.168.153.11");
            
            //得到HTable客户端
            HTable client  = new HTable(conf, "mytable");
            
            //构造一个Get对象
            Get get = new Get(Bytes.toBytes("id001"));
            
            //查询
            Result result = client.get(get);
            
            //取出数据
            String name = Bytes.toString(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("name")));
            System.out.println(name);
            
            client.close();
        }
        
        @Test
        public void testScan() throws Exception{
            //配置ZK的地址信息
            Configuration conf = new Configuration();
            conf.set("hbase.zookeeper.quorum", "192.168.153.11");
            
            //得到HTable客户端
            HTable client = new HTable(conf, "mytable");
            
            //定义一个扫描器
            Scan scan = new Scan();
            //scan.setFilter(filter); 定义一个过滤器
            
            //通过扫描器查询数据
            ResultScanner rScanner = client.getScanner(scan);
            
            for (Result result : rScanner) {
                String name = Bytes.toString(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("name")));
                System.out.println(name);
            }
        }
    }

    执行以上test,结果(最后一个)

  • 相关阅读:
    c# 使用ajaxfileupload上传文件,通过一般处理程序(Handler)接收文件 ashx 图片 Excel文件都可以
    C#+aspx+ajaxfileupload 实现文件上传
    Java中的int与String互相转换方式
    简述 readyonly 与 disabled 的区别
    was应用服务器搭建
    MVC中贫血模型与充血模型
    npm安装教程 Vue环境搭建
    使用vs Code从0开始搭建一个vue项目(手把手教会你,包会)
    使用VS code 打开Vue项目
    Task , Thread 学习
  • 原文地址:https://www.cnblogs.com/lingluo2017/p/8541387.html
Copyright © 2011-2022 走看看