6.3 HBase的Java API(1)
任务目的
了解pom.xml文件中添加依赖的方式
掌握定名空间的API
任务清单
任务1:pom.xml文件中添加依赖
任务2:定名空间的API
任务步骤
任务1:pom.xml文件中添加依赖
pom.xml文件简介
6.3-1
任务2:定名空间的API
创建Java类
1、在指定包下右键,选择【new】>【class】
6.3-2
2、设置类名
6.3-3
创建定名空间-程序
- public class CreateNamespace {
- public static void main(String[] args) throws IOException {
- //1、获取conf对象
- Configuration conf = HBaseConfiguration.create();
- //2、指定hbase的zk地址
- conf.set("hbase.zookeeper.quorum", "localhost");
- //3、获取connection
- Connection con = ConnectionFactory.createConnection(conf);
- //4、获取hbase的操作对象
- Admin admin = con.getAdmin();
- //5、获取NameSpace的描述对象
- NamespaceDescriptor nsd = NamespaceDescriptor.create("test_ns").build();
- //6、真正提交创建
- admin.createNamespace(nsd);
- //7.关闭连接
- admin.close();
- //提示语句
- System.out.println("finished");
- }
- }
复制代码 pom.xml文件
6.3-4
执行结果
通过以下指令,检查是否已经天生定名空间test_ns。
- bin/hbase shell
- list_namespace
复制代码
6.3-5
查看所有定名空间-程序
- public class ListAllNamespace {
- public static void main(String[] args) throws IOException {
- //1、获取conf对象
- Configuration conf = HBaseConfiguration.create();
- //2、指定hbase的zk地址
- conf.set("hbase.zookeeper.quorum", "localhost");
- //3、获取connection
- Connection con = ConnectionFactory.createConnection(conf);
- //4、获取hbase的操作对象
- Admin admin = con.getAdmin();
- //5、获取所有namespace
- NamespaceDescriptor[] nsd = admin.listNamespaceDescriptors();
- for (NamespaceDescriptor n : nsd) {
- System.out.println(n.getName());
- }
- admin.close();
- System.out.println("finished");
- }
- }
复制代码 程序截图
6.3-6
执行结果
6.3-7
删除定名空间-程序
- public class DeleteNamespace {
- public static void main(String[] args) throws IOException {
- //1、获取conf对象
- Configuration conf = HBaseConfiguration.create();
- //2、指定hbase的zk地址
- conf.set("hbase.zookeeper.quorum", "localhost");
- //3、获取connection
- Connection con = ConnectionFactory.createConnection(conf);
- //4、获取hbase的操作对象
- Admin admin = con.getAdmin();
- //5、删除namespace
- admin.deleteNamespace("test_ns");
- admin.close();
- System.out.println("finished");
- }
- }
复制代码 程序截图
6.3-8
执行结果
回到hbase的shell情况,测试定名空间test_ns是否存在。
6.3-9
6.4 HBase的Java API(2)
任务目的
掌握列出所有表的API
掌握创建表的API
掌握添加数据的API
任务清单
- 任务1:列出所有表
- 任务2:创建表
- 任务3:添加数据
任务步骤
任务1:列出所有表
列出所有表-程序
- public class ListTable {
- public static void main(String[] args) throws IOException {
- //1、获取conf对象
- Configuration conf = HBaseConfiguration.create();
- //2、指定hbase的zk集群地址
- conf.set("hbase.zookeeper.quorum", "localhost");
- //3、获取connection
- Connection con = ConnectionFactory.createConnection(conf);
- //4、获取hbase的操作对象
- Admin admin = con.getAdmin();
- //5、获取名为hbase的namespace下所有表
- HTableDescriptor[] htd = admin.listTableDescriptorsByNamespace("hbase");
- for (HTableDescriptor h: htd) {
- System.out.println(h.getNameAsString());
- }
- admin.close();
- System.out.println("finished");
- }
- }
复制代码 程序截图

6.4-1
执行结果

6.4-2
任务2:创建表
创建表-程序
- public class CreateTable {
- public static void main(String[] args) throws IOException {
- Configuration conf = HBaseConfiguration.create();
- conf.set("hbase.zookeeper.quorum", "localhost");
- //获取connection
- Connection con = ConnectionFactory.createConnection(conf);
- Admin admin = con.getAdmin();
- //获取表的描述器
- HTableDescriptor htd = new HTableDescriptor(TableName.valueOf("ns:t1"));
- //获取列簇描述器
- HColumnDescriptor hcd = new HColumnDescriptor("info".getBytes());
- HColumnDescriptor hcd1 = new HColumnDescriptor("data".getBytes());
- //为列簇设置属性
- hcd.setBlocksize(60000);
- hcd.setTimeToLive(36000000);
- //将列簇添加到表描述器中
- htd.addFamily(hcd);
- htd.addFamily(hcd1);
- //设置表的属性
- htd.setDurability(Durability.SKIP_WAL);//写数据时不用写wal
- //真正提交创建
- admin.createTable(htd);
- admin.close();
- System.out.println("finished");
- }
- }
复制代码 程序截图
6.4-3
执行结果-创建测试定名空间
手动创建测试定名空间,必要进入hbase目录下,执行如下指令。
- bin/hbase shell
- create_namespace 'ns'
复制代码
6.4-4
执行结果-结果
执行程序后,对于控制台的输出以及结果如下。
6.4-5
6.4-6
任务3:添加数据
添加数据-工具类
- public final class HbaseUtil {
- //获取连接方法
- public static Connection getConnection() throws IOException{
- //1、获取conf对象
- Configuration conf=HBaseConfiguration.create();
- //2、指定hbase的zk集群地址
- conf.set("hbase.zookeeper.quorum", "localhost");
- //3、指定hbase的zk集群的端口号
- conf.set("hbase.zookeeper.property.clientport", "2181");
- //4.获取连接
- Connection con = ConnectionFactory.createConnection(conf);
- return con;
- }
- //关闭连接方法
- public static void close(Connection con){
- if(con != null){
- try {
- con.close();
- } catch (IOException e) {
- e.printStackTrace();
- System.out.println("failed");
- }
- }
- }
- }
复制代码 添加数据-程序
- public class PutData {
- public static void main(String[] args) throws IOException {
- //获取连接
- Connection con=HbaseUtil.getConnection();
- //获取操作对象
- Table table=con.getTable(TableName.valueOf("ns:t1"));
- //获取Put对象
- Put put=new Put(Bytes.toBytes("r1"));
- //往put对象里添加值
- put.addColumn(Bytes.toBytes("info"),
- Bytes.toBytes("name"),Bytes.toBytes("tom"));
- put.addColumn(Bytes.toBytes("info"),
- Bytes.toBytes("age"),Bytes.toBytes("22"));
- put.addColumn(Bytes.toBytes("info"),
- Bytes.toBytes("sex"),Bytes.toBytes("woman"));
- //创建list集合
- List<Put> listput=new ArrayList<Put>();
- //将put对象添加到集合中
- listput.add(put);
- //插入数据
- table.put(listput);
- table.close();
- HbaseUtil.close(con);
- System.out.println("finished");
- }
- }
复制代码 程序截图
6.4-7
6.4-7
执行结果
运行程序后,到hbase的shell情况查看表中数据。
6.4-8
6.5 HBase的Java API(3)
任务目的
掌握修改数据的API
掌握查询数据的API
任务清单
任务1:修改数据
任务2:查询数据
任务步骤
任务1:修改数据
修改数据-程序
6.5-1
执行结果
6.5-2
任务2:查询数据
单行查询-程序
- public class GetData {
- public static void main(String[] args) throws IOException {
- //获取连接
- Connection con=HbaseUtil.getConnection();
- //获取操作对象
- Table table=con.getTable(TableName.valueOf("ns:t1"));
- //获取get对象
- Get get=new Get(Bytes.toBytes("r1"));
- //获取结果集
- Result rs=table.get(get);
- //循环输出
- for(Cell cell: rs.listCells()){
- System.out.println("rk:"+"r1"+"\t");
- System.out.print("cf:"+Bytes.toString(cell.getFamilyArray(),cell.getFamilyOffset(), cell.getFamilyLength())+"\t");
- System.out.print("column:"+Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength())+"\t");
- System.out.print("value:"+Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength())+"\t");
- System.out.println("timestamp:"+cell.getTimestamp());
- }
- table.close();
- //关闭连接
- HbaseUtil.close(con);
- }
- }
复制代码 程序截图

6.5-3
执行结果

6.5-4
扫描全表数据-准备工作
当下表内只有一个行键即r1,为了更好看到结果,必要再添加一些数据。执行PutData程序,为表添加以下数据。

6.5-5
扫描全表数据-程序
- public class ScanData {
- public static void main(String[] args) throws IOException {
- //调用方法
- getAllRowData("ns:t1");
- }
- public static void getAllRowData(String tableName) throws IOException{
- //获取连接信息
- Connection con = HbaseUtil.getConnection();
- //实例化Table操作对象,指定表名
- Table table=con.getTable(TableName.valueOf(tableName));
- //示例化扫描器
- Scan scan=new Scan();
- //实例化结果集传入扫描器
- ResultScanner rs=table.getScanner(scan);
- //对结果集遍历
- for(Result r : rs){
- //调用自定义方法
- getResult(r);
- }
- //关闭操作对象和连接信息
- table.close();
- HbaseUtil.close();
- }
- private static void getResult(Result r){
- if(r != null){
- for(Cell cell : r.listCells()){
- System.out.print("rk:"+new String(CellUtil.cloneRow(cell))+"\t");
- System.out.print("cf:"+new String(CellUtil.cloneFamily(cell))+"\t");
- System.out.print("column:"+new String(CellUtil.cloneQualifier(cell))+"\t");
- System.out.print("value:"+new String(CellUtil.cloneValue(cell))+"\t");
- System.out.println("timestamp:"+cell.getTimestamp());
- }
- }
- }
- }
复制代码 执行结果

6.5-6
范围数据查询-程序
- public class ScanRangeData {
- public static void main(String[] args) throws IOException {
- //调用方法
- getRangeData("ns:t1","r1","r2");
- }
- public static void getRangeRowData(String tablename,String startRow,String stopRow) throws IOException{
- Connection con = HbaseUtil.getConnection();
- Table table = con.getTable(TableName.valueOf(tablename));
- //获取scan对象
- Scan scan = new Scan();
- //定义要扫描的列
- scan.addColumn(Bytes.toBytes("info"), Bytes.toBytes("age"));
- scan.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name"));
- //设置开始行建
- scan.setStartRow(Bytes.toBytes(startRow));
- //设置结束行建
- scan.setStopRow(Bytes.toBytes(stopRow));
- ResultScanner rs = table.getScanner(scan);
- for(Result r : rs){
- getResult(r);
- }
- rs.close();
- HbaseUtil.close(con);
- }
- private static void getResult(Result r){
- if(r != null){
- for(Cell cell : r.listCells()){
- System.out.print("rk:"+new String(CellUtil.cloneRow(cell))+"\t");
- System.out.print("cf:"+new String(CellUtil.cloneFamily(cell))+"\t");
- System.out.print("column:"+new String(CellUtil.cloneQualifier(cell))+"\t");
- System.out.print("value:"+new String(CellUtil.cloneValue(cell))+"\t");
- System.out.println("timestamp:"+cell.getTimestamp());
- }
- }
- }
- }
复制代码 执行结果

6.5-7
6.6 HBase的Java API(4)
任务目的
掌握删除数据的API
掌握修改表的API
掌握删除表的API
任务清单
任务1:删除数据
任务2:修改表
任务3:删除表
任务步骤
任务1:删除数据
删除整行-程序
- //删除整行数据
- public class DeleteDate1 {
- public static void main(String[] args) throws IOException {
- //获取连接信息
- Connection conn=HbaseUtil.getConnection();
- //指定表名
- Table table=conn.getTable(TableName.valueOf("ns:t1"));
- //实例化Delete对象,指定要删除的行键
- Delete delete=new Delete(Bytes.toBytes("r2"));
- //执行删除
- table.delete(delete);
- //关闭连接
- table.close();
- HbaseUtil.close();
- System.out.println("finished")
- }
- }
复制代码 执行结果
6.6-1
删除单列数据-程序
- //删除单列数据
- public class DeleteDate2 {
- public static void main(String[] args) throws IOException {
- //获取连接信息
- Connection conn=HbaseUtil.getConnection();
- //指定表名
- Table table=conn.getTable(TableName.valueOf("ns:t1"));
- //实例化Delete对象,指定要删除的行键
- Delete delete=new Delete(Bytes.toBytes("r1"));
- //指定删除列族中哪个列
- delete.addColumn(Bytes.toBytes("info"), Bytes.toBytes("sex"));
- //执行删除
- table.delete(delete);
- //关闭连接
- table.close();
- HbaseUtil.close();
- System.out.println("finished")
- }
- }
复制代码 执行结果
6.6-2
任务2:修改表
新增列族-程序
- public class AddColumnFamily{
- public static void main(String[] args){
- //获取连接信息
- Connection con = HbaseUtil.getConnection();
- //实例化操作对象
- Admin admin = con.getAdmin();
- //指定表名
- TableName tableName = TableName.valueOf("ns:t1");
- //判断表是否存在
- if(admin.tableExists(tableName)){
- //实例化表描述器
- HTableDescriptor htd = admin.getTableDescriptor(tableName);
- //实例化列族描述器,并指定新的列族名
- HColumnDescriptor hcd = new HColumnDescriptor("animal".getBytes());
- //列族描述器传入表描述器
- htd.addFamily(hcd);
- //更新表
- admin.modifyTable(tableName,htd);
- }
- HbaseUtil.close(con);
- System.out.println("finished");
- }
- }
复制代码 执行结果
6.6-3
删除列族-程序
- public class DeleteColumnFamily{
- public static void main(String[] args){
- //获取连接信息
- Connection con = HbaseUtil.getConnection();
- //实例化操作对象
- Admin admin = con.getAdmin();
- //指定表名
- TableName tableName = TableName.valueOf("ns:t1");
- //操作对象调取删除列族的方法
- admin.deleteColumn(tableName,Bytes.toBytes("animal"));
- //关闭
- HbaseUtil.close(con);
- System.out.println("finished");
- }
- }
复制代码 执行结果
6.6-4
任务3:删除表
删除表-程序
- public class DeleteTable{
- public static void main(String[] args){
- //获取连接信息
- Connection con = HbaseUtil.getConnection();
- //实例化操作对象
- Admin admin = con.getAdmin();
- //指定表名
- TableName tableName = TableName.valueOf("ns:t1");
- //判断表是否存在
- if(admin.tableExists(tableName)){
- //存在就调用deleteTable方法进行删除
- admin.deleteTable(tableName);
- }
- //关闭
- HbaseUtil.close(con);
- System.out.println("finished");
- }
- }
复制代码 执行结果
6.6-5
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |