Hbase的相关学习
Hbase
简介(主要是介绍跟mysql不同)
1.mysql是关系型数据库,主键具有唯一性,Hbase是非关系型数据库
2.mysql底层是binlog( MySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句select),还有语句执行消耗的时间。binlog日志是二进制格式的,它不能使用查看文本工具的命令(比如,cat,vi等)查看,使用mysqlbinlog解析查看)
Hbase底层是hdfs(分布式文件存储)
3.mysql是行存储,hbase是列存储(我感觉有点抽象hhh,行存储的话可能会有很多字段是空的浪费空间,hbase就不会,他还可以多出几列来完全不影响hhh)
表格Hbase shell
jpsall查看所有进程
hbase shell 进去hbase
list 数据库表有哪些
create 'student','infor' 表名 + 列族名称
scan 表名 查询该表所有
表格api封装
HbaseCon.java
package com.atguigu;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import java.io.IOException;
public class HbaseCon {
public static Connection Con = null;
static {
Configuration conf= new Configuration();
conf.set("hbase.zookeeper.quorum","hadoop1,hadoop2,hadoop3");
try {
Con = ConnectionFactory.createConnection(conf);
}catch (IOException e)
{
e.printStackTrace();
}
}
public static void closeConn(){
if(Con != null)
try {
Con.close();
}catch (IOException e)
{
e.printStackTrace();
}
}
public static void main(String[] args) {
System.out.println(Con);
closeConn();
}
}
package com.atguigu;
import org.apache.hadoop.hbase.NamespaceDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
public class HbaseDDL {
public static Connection connection = HbaseCon.Con;
/**
* 创建命名空间
* @param namespace
* @throws IOException
*/
public static void createNamespace(String namespace) throws IOException {
//获取admin
Admin admin = connection.getAdmin();
//new NamespaceDescriptor()发现是一个私有的,我们考虑还有别的方法来获取对象,静态方法 ctrl + F12
//建造者模式,手机需要加大内存,颜色,各种需求本质:丰富了构造器
NamespaceDescriptor.Builder builder = NamespaceDescriptor.create(namespace);
//添加需求
builder.addConfiguration("user","aiguigu");
//一个方法里面有多个异常,怎么处理,需要将不是本类的方法直接抛出去,是本类的单独写
try {
admin.createNamespace(builder.build());
} catch (IOException e) {
System.out.println("有相同的namespace");
e.printStackTrace();
}
admin.close();
}
/**
* 判断表格是否存在
* @param namespace 命名空间名称
* @param tableName 表格名称
* @return 存不存在
*/
public static boolean isTableExists(String namespace,String tableName) throws IOException {
Admin admin = connection.getAdmin();
boolean b = false;
try {
b = admin.tableExists(TableName.valueOf(namespace, tableName));
} catch (IOException e) {
System.out.println("");
e.printStackTrace();
}
admin.close();
return b;
}
/**
* 创建表格
* @param namespace 命名空间
* @param tableName 表格名称
* @param columnFamilys 列族
*/
public static void createTable(String namespace,String tableName,