zoukankan      html  css  js  c++  java
  • [BD] HBase

    NoSQL数据库

    • 关系型数据库:用表格的行-列来保存数据
    • 非关系型数据库:只用来存储数据,业务逻辑由应用程序处理
    • 常见NoSQL数据库
      • Redis:基于内存的NoSQL数据库
      • MongoDB:基于文档型(BSON)的NoSQl数据库
    • 设计一个数据库保存电影信息
      • Oracle:至少三张表,每张1000行,笛卡尔积1000*1000*1000,性能低
      • MongoDB:只有1000条记录,查询快(MongoDB 4.0 开始支持事务,支持分布式存储和MapReduce)

    HBase

    • Hadoop Database
    • 以HDFS作为最基本的存储单元(表、列族-->目录,数据-->文件)
    • 可快速随机访问海量结构化数据
    • 支持数据随机查找,增量数据处理,数据更新
    • 适用于大量数据存储,大量数据高并发操作,需要对数据进行随机读写的简单操作
    • 内部使用哈希表,通过索引对HDFS文件中的数据进行快速查找(HDFS只能顺序访问)
    • Zookeeper实现HA

     

     

    安装

    • 本地:单机,不需要HDFS,数据直接保存在操作系统,只启动HMaster
      • 解压->设置环境变量->改配置文件(hbase-env.sh,hbase-site.xml)
    • 伪分布:单机模拟分布式,ZK+HMaster+RegionServer
      • 改配置文件(hbase-env.sh,hbase-site.xml)
      • 依赖HDFS和ZK,必须先启动
    • 全分布
    • HA

    命令

    • 启动:start-hbase.sh
    • 命令行工具:hbase shell
    • 查看所有表:list
    • 创建表:create 'student','info','grade'
    • 插入数据:put 'student','stu001','info:name','Tom'
    • 查看表:scan 'student'
    • 停用表:disable 'student'
    • 删除表:drop 'student'
    • 删除命名空间:drop_namespace 'school'

    Java API

    • 启动hdfs
    • 运行Java API
    • 在hbase shell中查看
     1 package Demo.base;
     2 
     3 import org.apache.hadoop.conf.Configuration;
     4 import org.apache.hadoop.hbase.HColumnDescriptor;
     5 import org.apache.hadoop.hbase.HTableDescriptor;
     6 import org.apache.hadoop.hbase.TableName;
     7 import org.apache.hadoop.hbase.client.Get;
     8 import org.apache.hadoop.hbase.client.HBaseAdmin;
     9 import org.apache.hadoop.hbase.client.HTable;
    10 import org.apache.hadoop.hbase.client.Put;
    11 import org.apache.hadoop.hbase.client.Result;
    12 import org.apache.hadoop.hbase.client.ResultScanner;
    13 import org.apache.hadoop.hbase.client.Scan;
    14 import org.apache.hadoop.hbase.util.Bytes;
    15 import org.junit.Test;
    16 
    17 /*
    18  * 注意:需要:hamcrest-core-1.3.jar包
    19  */
    20 public class TestHbase {
    21 
    22     @Test
    23     public void testCreateTable() throws Exception{
    24         //创建表
    25         //配置ZooKeeper地址
    26         Configuration conf = new Configuration();
    27         conf.set("hbase.zookeeper.quorum", "192.168.174.111");
    28         
    29         //得到一个HBase的客户端
    30         HBaseAdmin client = new HBaseAdmin(conf);
    31         
    32         //采用:面向对象的思想来建表
    33         //1、指定表的描述符
    34         HTableDescriptor htd = new HTableDescriptor(TableName.valueOf("mytable"));
    35         
    36         //2、指定列族
    37         htd.addFamily(new HColumnDescriptor("info"));
    38         htd.addFamily(new HColumnDescriptor("grade"));
    39         
    40         //创建表
    41         client.createTable(htd);
    42         
    43         //关闭客户端
    44         client.close();
    45     }
    46     @Test
    47     public void testPutData() throws Exception{
    48         //插入数据
    49         //配置ZooKeeper地址
    50         Configuration conf = new Configuration();
    51         conf.set("hbase.zookeeper.quorum", "192.168.174.111");        
    52         
    53         //得到一个客户端
    54         HTable client = new HTable(conf, "mytable1");
    55         
    56         //构造一个Put对象:一条数据
    57         Put put = new Put(Bytes.toBytes("id001"));
    58         
    59         //指定列的值
    60         /*
    61         put.addColumn(family,   列族的名字
    62                        qualifier,  列的名字
    63                        value)   值
    64         */
    65         put.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name"), Bytes.toBytes("Tom"));
    66         
    67         // 一次插入多条记录client.put(List);
    68         
    69         client.put(put);
    70         
    71         client.close();
    72     }
    73 }
    View Code

    参考

    /etc/profile 和 ~/.bash_profile 的区别

    http://blog.chinaunix.net/uid-14735472-id-3190130.html

    hbase shell 中退格无法使用的解决方法

    https://blog.csdn.net/zhangchen124/article/details/92801219

    hbase shell 常用命令

    https://blog.csdn.net/vbirdbest/article/details/88236575

    put流程

    https://blog.csdn.net/yangzishiw/article/details/53910775

    region机制

    https://blog.csdn.net/DianaCody/article/details/39530165

    深入理解hbase

    https://segmentfault.com/a/1190000019959411

    HBase创建命名空间的API操作,抛异常的坑

    https://blog.csdn.net/wx1528159409/article/details/85266856

    HDFS数据写入HBase

    https://blog.csdn.net/lianghecai52171314/article/details/104801847/

  • 相关阅读:
    爬弹幕
    写了这么多行就给我30,呜呜呜
    ticket
    yield求平均数
    协程原理
    爬取一类字二类字的信息和笔顺gif图片
    关于CRF的相关阅读
    embedding size与vocabulary size之间的关系: e = v**0.25
    pandas多个值取数
    转 pandas pivot
  • 原文地址:https://www.cnblogs.com/cxc1357/p/12783721.html
Copyright © 2011-2022 走看看