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 }
参考
/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/