本文共 6924 字,大约阅读时间需要 23 分钟。
NoSQL:not only SQL,非关系型数据库 NoSQL是一个通用术语
对比 | NoSQL | 关系型数据库 |
---|---|---|
常用数据库 | HBase、MongoDB、Redis | Oracle、DB2、MySQL |
存储格式 | 文档、键值对、图结构 | 表格式,行和列 |
存储规范 | 鼓励冗余 | 规范性,避免重复 |
存储扩展 | 横向扩展,分布式 | 纵向扩展(横向扩展有限) |
查询方式 | 结构化查询语言SQL | 非结构化查询 |
事务 | 不支持事务一致性 | 支持事务 |
性能 | 读写性能高 | 读写性能差 |
成本 | 简单易部署,开源,成本低 | 成本高 |
BI(Business Intelligence):商务智能
NoSQL和大数据相关性较高,但是NoSQL != 大数据
HBase是一个领先的NoSQL数据库
时间 | 事件 |
---|---|
2006年 | Google发表了关于Big Table论文 |
2007年 | 第一个版本的HBase和Hadoop0.15.0一起发布 |
2008年 | HBase成为Hadoop的子项目 |
2010年 | HBase成为Apache顶级项目 |
2011年 | Cloudera基于HBase0.90.1推出CDH3 |
2012年 | HBase发布了0.94版本 |
2013-2014 | HBase先后发布了0.96版本/0.98版本 |
2015-2016 | HBase先后发布了1.0版本、1.1版本和1.2.4版本 |
2017年 | HBase发布1.3版本 |
2018年 | HBase先后发布了1.4版本和2.0版本 |
Alibaba
HBase生态圈技术
HBase采用Master/Slave架构
HMaster的作用
RegionServer
负责管理维护Region,存储HBase实际数据RegionServer功能
Region和Table
逻辑架构 - Row
HBase元数据管理
HBase Shell是一种操作HBase的交互模式,支持完整的HBase命令集
命令类别 | 命令 |
---|---|
General | version, status, whoami, help |
DDL | alter, create, describe, disable, drop, enable, exists, is_disabled, is_enabled, list |
DML | count, delete, deleteall, get, get_counter, incr, put, scan, truncate |
Tools | assign, balance_switch, balancer, close_region, compact, flush, major_compact, move, split, unassign, zk_dump |
Replication | add_peer, disable_peer, enable_peer, remove_peer, start_replication, stop_replication |
##通过hbase shell导入文档数据hbase org.apache.hadoop.hbase.mapreduce.ImportTsv \-Dimporttsv.separator=, \-Dimporttsv.columns="HBASE_ROW_KEY,order:numb,order:date" \customer file:///home/vagrant/hbase_import_data.csv
-1)创建Maven项目并添加依赖
org.apache.hbase hbase-client 1.2.0 org.apache.hbase hbase-common 1.2.0 org.apache.hbase hbase-server 1.2.0
package com.sunyong;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.*;import org.apache.hadoop.hbase.client.*;import org.apache.hadoop.hbase.util.Bytes;import org.junit.After;import org.junit.Before;import org.junit.Test;import java.io.IOException;/** * @author sunyong * @date 2020/07/20 * @description */public class HBaseClient { private Admin admin; private Connection conn; private Configuration conf; //初始化获取配置 @Before public void init() throws IOException { //1.创建配置 conf = HBaseConfiguration.create(); //zookeeper集群 conf.set("hbase.zookeeper.quorum", "192.168.56.120"); //zookeeper端口 conf.set("hbase.zookeeper.property.clientPort", "2181"); //2.创建连接 conn = ConnectionFactory.createConnection(conf); //3.创建admin admin = conn.getAdmin(); } //结束释放资源 @After public void end(){ admin=null; conn=null; conf=null; } //建表操作 @Test public void createTable() throws IOException { //4.创建表的描述信息 表名 HTableDescriptor student = new HTableDescriptor(TableName.valueOf("student")); //5.添加列簇 列簇名 //信息簇 列簇1 student.addFamily(new HColumnDescriptor("info")); //成绩簇 列簇2 student.addFamily(new HColumnDescriptor("score")); //6.调用API进行建表操作 admin.createTable(student); } //判断表是否存在 @Test public void isTableExists() throws IOException { System.out.println(admin.tableExists(TableName.valueOf("student")));; } //插入数据 @Test public void putData2Table() throws IOException { //获取表 Table student=conn.getTable(TableName.valueOf("student")); //创建put类 Put put = new Put(Bytes.toBytes("1001")); //向put中添加 列簇 列名,值 需要转化成字节数组 put.addColumn(Bytes.toBytes("info"),Bytes.toBytes("name"),Bytes.toBytes("zhangsan")); put.addColumn(Bytes.toBytes("info"),Bytes.toBytes("sex"),Bytes.toBytes("female")); put.addColumn(Bytes.toBytes("score"),Bytes.toBytes("course"),Bytes.toBytes("math")); put.addColumn(Bytes.toBytes("score"),Bytes.toBytes("score"),Bytes.toBytes("89")); //插入数据 student.put(put); } //查看一条数据 @Test public void getDataFromTable() throws IOException { //获取表 Table student=conn.getTable(TableName.valueOf("student")); //创建Get Get get = new Get(Bytes.toBytes("1001")); //调用API获取数据 Result result = student.get(get); //遍历输出 Cell[] cells = result.rawCells(); //cells是单元格数组 for (Cell cell : cells) { System.out.println("rowkey:"+Bytes.toString(CellUtil.cloneRow(cell))); System.out.println("列簇 :"+Bytes.toString(CellUtil.cloneFamily(cell))); System.out.println("列名 :"+Bytes.toString(CellUtil.cloneQualifier(cell))); System.out.println("值 :"+Bytes.toString(CellUtil.cloneValue(cell))); System.out.println("*****************"); } } @Test //删除表操作 public void dropTable() throws IOException { //禁用表 admin.disableTable(TableName.valueOf("student")); //删除表 admin.deleteTable(TableName.valueOf("student")); }}
转载地址:http://hcjxi.baihongyu.com/