HBASE

HBASE操作
JAVAAPI操作HBASE
添加maven依赖:

<!-->
    hbase连接依赖
</-->

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.7.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.7.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>2.7.4</version>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.8.2</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-jdbc</artifactId>
            <version>2.3.2</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-auth</artifactId>
            <version>2.6.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>2.0.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-common</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-protocol</artifactId>
            <version>2.0.0</version>
        </dependency>

通过相应的语法进行操作:
一、连接:
1、通过创建connection,创建configuration进行连接:

Configuration hBaseConfiguration = HBaseConfiguration.create();
hBaseConfiguration.setInt("hbase.client.retries.number", 1);
hBaseConfiguration.set("hbase.zookeeper.property.clientPort","2181");//连接端口
hBaseConfiguration.set("hbase.zookeeper.quorum","集群节点1:2181,集群节点2:2181,集群节点3:2181,集群节点4:2181,集群节点5:2181");
hBaseConfiguration.set("zookeeper.session.timeout", "5000");/ZK连接超时时间
hBaseConfiguration.set("hbase.zookeeper.property.maxclientcnxns", "300");
hBaseConfiguration.set("hbase.ipc.client.socket.timeout.connect", "10000");//HBASE连接超时时间
hBaseConfiguration.set("hbase.regionserver.handler.count", "500");
connection = ConnectionFactory.createConnection(hBaseConfiguration);

2、通过导入配置连接:

hBaseConfiguration.addResource(new Path(ClassLoader.getSystemResource("hbase-site.xml").toURI()));
hBaseConfiguration.addResource(new Path(ClassLoader.getSystemResource("core-site.xml").toURI()));
connection = ConnectionFactory.createConnection(hBaseConfiguration);

PS!!!依赖包的版本一定要配套

二、操作:
1、SCAN:通过上边连接获取到的连接(connection),我们可以获取到操作用户

Admin admin = connection.getAdmin();

通过admin我们可以获取到表属性和列簇属性

TableName[] tableNames = admin.listTableNames();//查看所有表名
HTableDescriptor[] hTableDescriptors = admin.listTables();//查看所有表属性

Scan scan = new Scan();//创建一个SCAN操作对象
Table table = connection.getTable(TableName.valueOf("表名"));//通过获取到的连接和表名获取到表操作对象
System.out.println(table.getName());
ResultScanner scanner = table.getScanner(scan);//执行scan操作
for (Result result : scanner){ //每一个result都是查询出来的一行数据结果
    System.out.println(new String(result.getRow()));//获取到表中的所有行键[行键建后文 PS行键]
    byte[] value = result.getValue(Bytes.toBytes("info"), Bytes.toBytes("id"));//可以通过result获取到具体的数据
    System.out.println(new String(value));//HBASE中的所有事物都是以二进制存放在文件内存区中的,所以取出时需要进行转换
}

2、GET操作:

Get get = new Get(Bytes.toBytes("表名"));//创建GET操作对象
get.addFamily(Bytes.toBytes("info"));//添加列簇筛选条件
Result result = table.get(get);//执行GET操作,获取到结果
Cell[] cells = result.rawCells();//获取属性操作,这个可以获取到result中的列簇,属性,行键等
byte[] row = result.getRow();//获取行键
System.out.println(new String(row));
byte[] value = result.getValue(Bytes.toBytes("info"), Bytes.toBytes("id"));//获取到info列簇下对应id列的值
System.out.println(new String(value));

3、DELETE删除操作:

 // 创建一个删除请求
Delete delete = new Delete(Bytes.toBytes("行键"));
// 可以自定义一些筛选条件
delete.addFamily(Bytes.toBytes("列簇名"));
table.delete(delete);
// 停用表
admin.disableTable(tableName);
// 删除列族
admin.deleteColumnFamily(tableName, "列簇名".getBytes());
// 删除表
admin.deleteTable(tableName);

4、PUT新增操作:

TableDescriptor tableDescriptor = TableDescriptorBuilder.newBuilder(TableName.valueOf("表名")).build();
admin.createTable(tableDescriptor);//新增表,这个是1.3之后版本的用法

TableName tableName = TableName.valueOf("表名");
HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);
// 新建一个列族名为test的列族
HColumnDescriptor test= new HColumnDescriptor("test");
// 将列族添加到表中
tableDescriptor.addFamily(test);
admin.createTable(tableDescriptor);//老版本API用法

// 创建一个put请求,用于添加数据或者更新数据
Put put = new Put(Bytes.toBytes("行键"));
put.addColumn(Bytes.toBytes("列簇"), Bytes.toBytes("数据列名"), Bytes.toBytes("数据"));
table.put(put);
// 创建一个append请求,用于在数据后面添加内容
Append append = new Append(Bytes.toBytes("行键"));
append.add(Bytes.toBytes("列簇"), Bytes.toBytes("数据列名"), Bytes.toBytes("数据"));
table.append(append);

HBASE shell命令:

hbase shell //进入HBASE的shell命令客户端,exit为退出
create_namespace '表空间名'  //创建一个表空间
drop_namespace '表空间名'  //删除一个表空间
describe_namespace '表空间名'   //查看一个表空间
list_namespace   //查看所有表空间
create '表空间名:表名', '列簇名'  //在对应表空间下创建表
list_namespace_tables '表名'   //查看一个表空间下的某个表
create '表名','列簇名','列簇名'  //创建表
list   //列出所有表
disable '表名'  //禁用表
alter '表名', '列族名' //修改列簇
alter '表名', {NAME=> '列族名', METHOD=> 'delete'}   //删除列簇
# 修改f1列族的版本为5
alter 't1', NAME => 'f1', VERSIONS => 5
# 修改多个列族,修改f2为内存,版本号为5
alter 't1', 'f1', {NAME => 'f2', IN_MEMORY => true}, {NAME => 'f3', VERSIONS => 5}
describe '表名' //获取表的描述
exists '表名'  //判断表是否存在
enable '表名'     //启用表,和禁用表对应
drop '表名'     表的删除需要先禁用,启用的表是不允许删除的
put '表名', '行键', '列族名', '列值'
put '表名', '行键', '列族名:列名', '列值'  //插入数据语法
scan '表名'     //全表扫描
scan '表名', {COLUMN=>'列族名:列名'}     //扫描某个列簇对应的列
get '表名', '行键', '列族名'
get '表名', '行键'     //查询数据
delete '表名', '行键', '列族名:列名'     //删除某个列簇下的列
deleteall '表名', '行键'     //删除某行数据
truncate '表名'     //清空表数据,底层为先禁用再删除再重新创建
count '表名'     //查询有多少行数据
scan '表名', { LIMIT => 行数} //指定行数扫描

简单错误排查。
有问题建议先检查节点和端口是否都正常,然后查看ZK运转是否正常
RIT问题:一般可以先使用 hbase hbck进行错误扫描,一般出现这个问题,都是由于数据读写异常或者是内存异常或大量短连接造成的,一般来说重启节点就能解决问题。还是没有解决,建议手动排查一下引用文件是否出了问题,如果是的话,删除异常的引用文件
hbase2.0以下的hbase可以使用hbase hbck -fix进行自我修复。
hbase2.03以上版本可以使用hbck2工具进行修复,如果是hbase2.0的话,目前我还没有找到可以使用的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343