[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/

原文地址:https://www.cnblogs.com/cxc1357/p/12783721.html