hbase 0.98 java_Hadoop上路-04_HBase0.98.0入门

以下操作在Hadoop分布式集群基础上进行。

一。分布式环境搭建

1.在master主控机安装HBase

1)解压

SHELL$tar -zxvf hbase-0.98.0-hadoop2-bin.tar.gz

SHELL$mv hbase-0.98.0-hadoop2 ~/hbase0.98.0hadoop2

2)配置环境变量

(1)修改/etc/profile文件

SHELL$sudo gedit /etc/profile

8c9729aa2006473d146e6a7ed20982f2.png

(2)验证

2b38c1aa442eeff76919588297ed93f6.png

3)修改%HBASE%/conf/hbase-env.sh

96ef5b31351129413a59b02302be77f0.png

4)修改$HBASE_HOME/conf/hbase-site.xml

hbase.master

hdfs://192.168.1.240:60000

hbase.rootdir

hdfs://192.168.1.240:9000/hbase

hbase.cluster.distributed

true

hbase.zookeeper.quorum

192.168.1.241,192.168.1.242,192.168.1.243

hbase.tmp.dir

/home/hadoop/hbase0.98.0hadoop2/hbase-tmp

hbase.zookeeper.property.dataDir

/home/hadoop/hbase0.98.0hadoop2/zookeeper-temp

5)$HBASE_HOME/conf/regionservers 文件增加

2ac10dba87abba82139c69fe84831632.png

2.把HBase复制到slave从属机

SHELL$sudoscp -rpv /home/hadoop/hbase0.98.0hadoop2/ hadoop@hapslave*:/home/hadoop/

3.启动HBase集群

在Hadoop集群启动后,再启动HBase集群。

SHELL$start-hbase.sh

7db7505576a195d9fdd0e6522343e64d.png

在主控机通过web界面查看(本例配置4个节点):

a3905b76f12d31b2eec51b90c29574d8.png

4.停止HBase集群

SHELL$stop-hbase.sh

16ecfdf7bf70f90046a8b5d5f9ba8b6b.png

二。HBase Shell

SHELL$hbase shell

ce3b5dcd1447cd85e4ce93e81c7a7996.png

1.建表create

fd64f1f783c62bd9b1dd76a45fb79d8d.png

2.列出全部表list

f291d7aa41bce45f5498e5da413ce19d.png

3.表描述describe

c01cba7501b790f8dfe1e3ca89a439df.png

4.删除表disable,drop

0e79edfe1c76b9bfc203b0dbf2bb2f78.png

5.插入条目put

4e8aee15c06b703c3beba254f13f2b5b.png

6.展示全表scan

ab8d097edf6530b9e2904c0d66494b0f.png

7.查询条目get

2e9ed3b73a70c4e28572751e0c248068.png

8.更新条目put

90002692cd30998f18c5da251fb2455d.png

9.删除条目delete

21f9b1b666c904e95e1680f16698588e.png

清空表:

5eba8110ae3dfb95dca4f480dc2e5627.png

truncate是一个能够快速清空资料表内所有资料的SQL语法。并且能针对具有自动递增值的字段,做计数重置归零重新计算的作用

10.统计参数

f429c84178d4c83f764df1d16c3a7205.png

三。JavaAPI

全部API在%HBase%/docs目录里,完全是英文的。

本例所须全部jar都可以在%HBase安装目录%/lib目录中找到。图省事,我一股脑儿全导入了。

7d927d128b61dad79c622fc117c763b7.png

1.创建一张表

package com.cuiweiyou.test;

// www.cuiweiyou.com

import java.io.IOException;

import java.util.Iterator;

import java.util.List;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.Cell;

import org.apache.hadoop.hbase.CellUtil;

import org.apache.hadoop.hbase.HBaseConfiguration;

import org.apache.hadoop.hbase.HColumnDescriptor;

import org.apache.hadoop.hbase.HTableDescriptor;

import org.apache.hadoop.hbase.TableName;

import org.apache.hadoop.hbase.client.Delete;

import org.apache.hadoop.hbase.client.Get;

import org.apache.hadoop.hbase.client.HBaseAdmin;

import org.apache.hadoop.hbase.client.HTable;

import org.apache.hadoop.hbase.client.Put;

import org.apache.hadoop.hbase.client.Result;

import org.apache.hadoop.hbase.client.ResultScanner;

import org.apache.hadoop.hbase.client.Scan;

import org.apache.hadoop.hbase.util.Bytes;

import org.junit.Test;

public class HBaseTest {

//创建表    @Test

public void creatTable() throws Exception {

String strTBName = "tb_test";    //表        String strColFamily = "cf";        //列族//配置        Configuration conf = HBaseConfiguration.create();

conf.set("hbase.zookeeper.quorum", "192.168.1.241,192.168.1.242,192.168.1.243");

//管理员        HBaseAdmin hbaseAdmin = new HBaseAdmin(conf);

//addColumn(String tableName, HColumnDescriptor column)//向一个已经存在的表添加咧//checkHBaseAvailable(HBaseConfiguration hbaseConf)//静态函数,查看HBase是否处于运行状态//deleteTable(byte[] tableName)//删除一个已经存在的表//enableTable(byte[] tableName)//使表处于有效状态//disableTable(byte[] tableName)//使表处于无效状态//HTableDescriptor[] listTables()//列出所有用户控件表项//modifyTable(byte[] tableName, HTableDescriptor tableDesc)//修改表的模式,是异步的操作,耗时//tableExists(String tableName)//检查表是否存在//表名称        TableName tableName = TableName.valueOf(strTBName);

//表描述器        HTableDescriptor tableDesc = new HTableDescriptor(tableName);

//removeFamily(byte[] column)//移除一个列族//getName()//获取表的名字//getValue(byte[] key)//获取属性的值//setValue(String key, String value)//设置属性的值        tableDesc.addFamily(new HColumnDescriptor(strColFamily));//添加列族//创建一个表,同步操作        hbaseAdmin.createTable(tableDesc);

System.out.println("创建表" +  strTBName + "成功");

}

}

4bb3cce86ac0cc3cfca6170febcdddae.png

2.添加一条记录

//为表添加数据    @Test

public void addData() throws IOException {

String strTBName = "tb_test";

String strColFamily = "cf";

String strColumn = "col";        //列名        String strRowKey = "row1";        //行号        String strValue = "values";        //值

Configuration conf = HBaseConfiguration.create();

conf.set("hbase.zookeeper.quorum", "192.168.1.241,192.168.1.242,192.168.1.243");

//表实例        HTable table = new HTable(conf, strTBName);

//close()                                                        释放所有的资源或挂起内部缓冲区中的更新//exists(Get get)                                                检查Get实例所指定的值是否存在于HTable的列中//get(Get get)                                                    获取指定行的某些单元格所对应的值//getEndKeys()                                                    获取当前一打开的表每个区域的结束键值//getScanner(byte[] family)                                        获取当前给定列族的scanner实例//getTableDescriptor()                                            获取当前表的HTableDescriptor实例//getTableName()                                                获取表名//isTableEnabled(HBaseConfiguration conf, String tableName)        检查表是否有效//获取所有的列族        HColumnDescriptor[] columnFamilies = table.getTableDescriptor().getColumnFamilies();

//HColumnDescriptor的常用方法://getName()//获取列族的名字//getValue(byte[] key)//获取对应的属性的值//setValue(String key, String value)//设置对应属性的值//插入器        Put put = new Put(Bytes.toBytes(strRowKey));//设置行号,RowKey//add(byte[] family, byte[] qualifier, byte[] value)            将指定的列和对应的值添加到Put实例中//add(byte[] family, byte[] qualifier, long ts, byte[] value)    将指定的列和对应的值及时间戳添加到Put实例中//getRow()                                                        获取Put实例的行//getRowLock()                                                    获取Put实例的行锁//getTimeStamp()                                                获取Put实例的时间戳//isEmpty()                                                        检查familyMap是否为空//setTimeStamp(long timeStamp)                                    设置Put实例的时间戳

for (int i = 0; i 

String familyName = columnFamilies[i].getNameAsString(); //获取列族名//指定列族            if (familyName.equals(strColFamily)) {

//插入                put.add(Bytes.toBytes(familyName), Bytes.toBytes(strColumn), Bytes.toBytes(strValue));

}

}

table.put(put);    //运行插入器

System.out.println("存入数据完毕");

}

6ac82339d82fab2c97013d9971d459a7.png

3.读取指定行记录

//根据RowKey查询整行    @Test

public void getRow() throws IOException {

String strTBName = "tb_test";

String strRowKey = "row1";

Configuration conf = HBaseConfiguration.create();

conf.set("hbase.zookeeper.quorum", "192.168.1.241,192.168.1.242,192.168.1.243");

HTable table = new HTable(conf, strTBName);    //获取表实例//查询器        Get get = new Get(Bytes.toBytes(strRowKey));    //查询指定行//addColumn(byte[] family, byte[] qualifier)    获取指定列族和列修饰符对应的列//addFamily(byte[] family)                        通过指定的列族获取其对应列的所有列//setTimeRange(long minStamp,long maxStamp)        获取指定取件的列的版本号//setFilter(Filter filter)                        当执行Get操作时设置服务器端的过滤器

Result result = table.get(get);

//containsColumn(byte[] family, byte[] qualifier)        检查指定的列是否存在//getFamilyMap(byte[] family)                            获取对应列族所包含的修饰符与值的键值对//getValue(byte[] family, byte[] qualifier)                获取对应列的最新值

List listCells = result.listCells();    //指定行、全部列族的全部列

for (Cell cell : listCells) {

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("时间戳:" + cell.getTimestamp());

}

}

6e7174fe84a435fb646601312daa8773.png

4.显示所有数据

//遍历全部条目    @Test

public void getAllRows() throws IOException {

String strTBName = "tb_test";

Configuration conf = HBaseConfiguration.create();

conf.set("hbase.zookeeper.quorum", "192.168.1.241,192.168.1.242,192.168.1.243");

HTable table = new HTable(conf, strTBName);    //获取表实例//扫描器        ResultScanner resultScanner = table.getScanner(new Scan());    //针对全表的查询器        Iterator results = resultScanner.iterator();

while(results.hasNext()) {

Result result = results.next();

List cells = result.listCells();

for(Cell cell : cells) {

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("时间戳:" + cell.getTimestamp() + "\n------------------");

}

}

}

88efc253c93cb1f00f7cd062e6def0f5.png

5.更新条目

//更新表中某行的某一列    @Test

public void updateTable() throws IOException {

String strTBName = "tb_test";

String strColFamily = "cf";

String strColumn = "col";

String strRowKey = "row1";

String strNewValue = "NewValues";

Configuration conf = HBaseConfiguration.create();

conf.set("hbase.zookeeper.quorum", "192.168.1.241,192.168.1.242,192.168.1.243");

HTable table = new HTable(conf, strTBName);    //获取表实例

Put put = new Put(Bytes.toBytes(strRowKey));

//仍然是插入操作(已知列族,已知列,新值)        put.add(Bytes.toBytes(strColFamily), Bytes.toBytes(strColumn), Bytes.toBytes(strNewValue));

table.put(put);

System.out.println("更新结束");

}

39dca067918fa53a88a6661a7f35c5d2.png

6.删除单元格

//删除指定行的指定的列(删除单元格)    @Test

public void deleteColumn() throws IOException {

String strTBName = "tb_test";

String strColFamily = "cf";

String strColumn = "col";

String strRowKey = "row1";

Configuration conf = HBaseConfiguration.create();

conf.set("hbase.zookeeper.quorum", "192.168.1.241,192.168.1.242,192.168.1.243");

HTable table = new HTable(conf, strTBName);    //获取表实例//删除器        Delete del = new Delete(Bytes.toBytes(strRowKey));

del.deleteColumns(Bytes.toBytes(strColFamily), Bytes.toBytes(strColumn));

table.delete(del);

System.out.println("行:" + strRowKey + ",列族:"+ strColFamily +",列:"+ strColumn +",删除完毕");

}

6a7665796254f1f583e3f6726255e885.png

7.删除整行

//删除整行    @Test

public void deleteAllColumn() throws IOException {

String strTBName = "tb_test";

String strRowKey = "row1";

Configuration conf = HBaseConfiguration.create();

conf.set("hbase.zookeeper.quorum", "192.168.1.241,192.168.1.242,192.168.1.243");

HTable table = new HTable(conf, strTBName);    //获取表实例

Delete deleteAll = new Delete(Bytes.toBytes(strRowKey));

table.delete(deleteAll);

System.out.println("这一行全删除了");

}

1e92bb47edc13a225401e9a3066182b5.png

8.删除表单

//删除表    @Test

public void deleteTable() throws IOException {

String strTBName = "tb_test";

Configuration conf = HBaseConfiguration.create();

conf.set("hbase.zookeeper.quorum", "192.168.1.241,192.168.1.242,192.168.1.243");

HBaseAdmin admin = new HBaseAdmin(conf);

admin.disableTable(strTBName);

admin.deleteTable(strTBName);

System.out.println(strTBName + "表 删除了");

}

86d0f2fd3748c739802bb98a7061b8d2.png

- end威格灵博客:www.cuiweiyou.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值