1、代码如下
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.regionserver.ScanOptions;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.yarn.webapp.view.Html;
import java.io.IOException;
import java.util.Scanner;
public class test {
public static void main(String[] args) throws IOException {
System.out.println("开始进行连接Hbase数据库");
//System.setProperty("hadoop.home.dir", "/home/hadoop001/app/hadoop-2.6.0-cdh5.7.0");
Configuration conf = HBaseConfiguration.create();
Connection connection = ConnectionFactory.createConnection(conf);
Admin admin = connection.getAdmin();
System.out.println("已经连接上了Hbase数据库");
try {
System.out.println("正在获取命名空间Myschool,如果获取不到,就会执行创建...");
admin.getNamespaceDescriptor("Myschool");
} catch (Exception ex){ // 所有异常的父类,处理所有异常的
System.out.println("没有获取命名空间Myschool,开始进行创建...");
NamespaceDescriptor myschool = NamespaceDescriptor.create("Myschool").build();
admin.createNamespace(myschool);
System.out.println("创建命名空间Myschool成功");
}
//创建数据表
TableName tableName = TableName.valueOf("Myschool:stuinfo"); //表需要建立在命名空间里面, tablename,拿到表名
boolean b = admin.tableExists(tableName);
System.out.println("正在检测Myschool中是否有stuinfo表");
// 如果表存在
if(b==true)
{
System.out.println("Myschool中有stuinfo表,开始提取数据【1001】");
String rowkey = "1001"; // 按条件提取
Get get = new Get(Bytes.toBytes(rowkey));
Result result = connection.getTable(tableName).get(get); //提取到的所有数据用result 变量接受
if (result.isEmpty()) // 如果结果如空
{
System.out.println("Myschool中有stuinfo表,目前没有提取到数据【1001】");
System.out.println("开始执行插入1001这条数据");
// 如果没有存在1001的数据
//插入一条新的数据
Put put = new Put(Bytes.toBytes(rowkey)); //默认,给一个行键1002, 注意!要转类型
String family = "info"; // 列族
String columnname = "name"; // 列名
String value = "张三"; // 值
put.addColumn(Bytes.toBytes(family), Bytes.toBytes(columnname), Bytes.toBytes(value));
connection.getTable(tableName).put(put);
System.out.println("【1001】这条数据插入成功!");
} else {
System.out.println("Myschool中有stuinfo表,已经提取到数据【1001,开始输出");
// 提取1001的数据, 并输出(对结果进行遍历)
for (Cell cell : result.rawCells()) {
System.out.println("rowkey:" + Bytes.toString(CellUtil.cloneRow(cell)));
System.out.println("Family:" + Bytes.toString(CellUtil.cloneFamily(cell)));
System.out.println("columnName:" + Bytes.toString(CellUtil.cloneQualifier(cell)));
System.out.println("value:" + Bytes.toString(CellUtil.cloneValue(cell)));
}
System.out.println("输出完毕!!");
}
}
else{
HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName); // 建表, 将表名放在括号里,作为参数传入
HColumnDescriptor hColumnDescriptor = new HColumnDescriptor("info"); // 创建列组
hTableDescriptor.addFamily(hColumnDescriptor);
admin.createTable(hTableDescriptor);
}
}
}
2、查看hbase
查看命名空间:
list_namespace
查看命名空间‘Myshool’下的表‘stuinfo’
scan'Myschool:stuinfo'
查看的数据(带中文)
scan'Myschool:stuinfo',{FORMATTER=>'toString'}
查看行键为1001的数据(带中文)
get'Myschool:stuinfo','1001',{FORMATTER=>'toString'}