版权说明:  本文章版权归本人及博客园共同所有,转载请标明原文出处(http://www.cnblogs.com/mikevictor07/),以下内容为个人理解,仅供参考。

一、简介

Hbase是在HDFS上开发的面向列的分布式数据库,适用于随机读/写超大规模的数据集(通常这种数据压力传统RDBMS很难承受),可以在廉价的硬件上构成的集群上管理超大规模的稀疏表,并且可以水平扩展。

二、基础概念

1、Hbase把数据存放在表中,表由行列组成,表中的行是排序的(根据ASCII顺序),行键作为表的主键,对表的数据访问需要通过主键或者主键Range,故行键的设计很重要

2、列由“列族”组成(即对列分类),不同列族的数据通常放在不同的文件夹里,列族不宜过多,Hbase启动时就打开数据文件,并且一直保持打开状态(Linux 默认一个进程打开最大文件数为1024),不合理的设计将导致异常。定义表时必须定义一个可用的列族,用户可根据需要增加或删除列族,但是必须先disable。

3、Hbase为master/slave结构,依赖于zookeeper,master 管理着多个regionServer。

三、安装(standalone)

1、必须安装Java 1.6 或者更高版本。

2、可用修改~/.base_profile,export JAVA_HOME指向JAVA安装路径,也可修改conf/hbase-env.sh 中 export JAVA_HOME=/usr/java/jdk1.6.0/

3、默认情况下,hbase会使用/tmp/hbase-$USERID作为数据存储目录,有些系统重启会清空/tmp目录,可用通过更改hbase-site.xml来配置数据存储目录,如:

  1. <configuration>
  2. <property>
  3. <name>hbase.rootdir</name>
  4. <value>file:///opt/hbase_data</value>
  5. </property>
  6. </configuration>

4、修改bin下sh文件执行权限,通过 ./bin/start-hbase.sh即可启动hbase,通过tail -f 监听./log/hbase-root-master-hbase-xx.log来查看启动信息。

四、Hbase shell

使用 ./bin/hbase shell即可进入管理hbase,使用secureCRT会导致无法删除键入的错误命令(backspace delete键无法使用),笔者使用putty(v0.62)可正常使用,下面是一些示例:

下面以创建一个stations的表,这表的行键是stationid,  列包含info.name(名称)、info.countryCode(站点所属国家代号)

1、创建一个表与显示所有表

  1. hbase> create 'stations','info' --创建一个带有info列族的stations
    hbase> list --显示当前所有表

2、录入数据(如果录入同一行同一列则代表更新)

  1. hbase> put 'stations', '', 'info:name', 'HAILAR' --录入1001为行键、HAILAR为站点名称的记录
  1. hbase> put 'stations', '1001', 'info:countryCode', 'CH' --CH代表china

hbase> put 'stations', '1002', 'info:name', 'NENJIANG'
  hbase> put 'stations', '1002', 'info:countryCode', 'CH'

3、读取、删除数据

  1. hbase> scan 'stations' --读取表中所有数据
  2. hbase> get 'stations','' --得到行键为1001的所有列
    hbase> get 'stations','1002','info:name' --得到行键为1002info:name
    hbase> delete 'stations','1001','info:countryCode' --删除1001行的info:countryCode

 4、增加/删除列族

  1. hbase> disable 'stations'
  2. hbase> alter 'stations', {NAME=>'data'} --增加data列族,可以录入以data:作为prefix的列
  3. hbase> enable 'stations'
    hbase> describe 'stations' --列出表结构
  4.  
  5. ---删除列族
    hbase> disable 'stations'
    hbase> alter 'stations',{NAME=>'data', METHOD=>'delete'} --删除stations里面的data列族,列族下面的列将被全部删除

5、删除表

  1. hbase> disable 'stations' --需要把表disable
  2. hbase> drop 'stations'

通过http://hbase-master:60010/ 可查看hbase状态信息

五、Java 客户端

基本表的管理与访问,下面方法依赖一个静态变量:

  1. private static String host = "192.168.70.41"; --这里是Master 的地址

下面各段代码中有重复部分,关键的在try{}中,可举一反三。

1、创建表

  1. /**
  2. * create 'tableName','colFamily'
  3. */
  4. public static void createTable(String tableName, String colFamily) throws Exception{
  5. Configuration config = HBaseConfiguration.create();
  6. config.set("hbase.zookeeper.quorum", host);
  7. HBaseAdmin hadmin = null;
  8. try {
  9. hadmin = new HBaseAdmin(config);
  10. HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(Bytes.toBytes(tableName)));
  11. HColumnDescriptor hcd = new HColumnDescriptor(colFamily);
  12. htd.addFamily(hcd);
  13.  
  14. hadmin.createTable(htd);
  15. } catch (Exception e) {
  16. e.printStackTrace();
  17. } finally {
  18. if (hadmin != null)
  19. hadmin.close();
  20. }
  21. }

2、列出所有表名

  1. /**
  2. * list
  3. */
  4. public static void list() throws Exception{
  5. Configuration config = HBaseConfiguration.create();
  6. config.set("hbase.zookeeper.quorum", host);
  7. HBaseAdmin hadmin = null;
  8.  
  9. try {
  10. hadmin = new HBaseAdmin(config);
  11. HTableDescriptor[] tables = hadmin.listTables();
  12.  
  13. for (HTableDescriptor table : tables) {
  14. System.out.println(new String(table.getName()));
  15. }
  16. } catch (Exception e) {
  17. e.printStackTrace();
  18. } finally {
  19. if (hadmin != null)
  20. hadmin.close();
  21. }
  22. }

3、录入数据

  1. /**
  2. * put 'tableName','row','colFamily:qualifier','value'
  3. */
  4. public static void put(String tableName,String row, String colFamily, String qualifier, String value) throws Exception {
  5. Configuration config = HBaseConfiguration.create();
  6. config.set("hbase.zookeeper.quorum", host);
  7. HBaseAdmin hadmin = null;
  8. HTable table = null;
  9. try {
  10. table = new HTable(config, tableName);
  11. Put put = new Put(Bytes.toBytes(row));
  12. put.add(Bytes.toBytes(colFamily), Bytes.toBytes(qualifier), Bytes.toBytes(value));
  13.  
  14. table.put(put);
  15. } catch (Exception e) {
  16. e.printStackTrace();
  17. } finally {
  18. if (table != null)
  19. table.close();
  20. if (hadmin != null)
  21. hadmin.close();
  22. }
  23. }

4、获取数据

  1. /**
  2. * get 'tableName', 'row', 'colFamily:qualifier'
  3. */
  4. public static void get(String tableName,String row, String colFamily, String qualifier) throws Exception {
  5. Configuration config = HBaseConfiguration.create();
  6. config.set("hbase.zookeeper.quorum", host);
  7. HBaseAdmin hadmin = null;
  8. HTable table = null;
  9. try {
  10. table = new HTable(config, tableName);
  11. Get get = new Get(Bytes.toBytes(row));
  12. get.addColumn(Bytes.toBytes(colFamily), Bytes.toBytes(qualifier));
  13.  
  14. Result result = table.get(get);
  15. String value = Bytes.toString(result.getValue(Bytes.toBytes(colFamily), Bytes.toBytes(qualifier)));
  16. System.out.println(value);
  17.  
  18. } catch (Exception e) {
  19. e.printStackTrace();
  20. } finally {
  21. if (table != null)
  22. table.close();
  23. if (hadmin != null)
  24. hadmin.close();
  25. }
  26. }

5、删除数据

  1. /**
  2. * delete 'tableName', 'row', 'colFamily:qualifier'
  3. */
  4. public static void delete(String tableName,String row, String colFamily, String qualifier) throws Exception {
  5. Configuration config = HBaseConfiguration.create();
  6. config.set("hbase.zookeeper.quorum", host);
  7. HBaseAdmin hadmin = null;
  8. HTable table = null;
  9. try {
  10. table = new HTable(config, tableName);
  11. Delete delete = new Delete(Bytes.toBytes(row));
  12.  
  13. delete.deleteColumn(Bytes.toBytes(colFamily), Bytes.toBytes(qualifier));
  14.  
  15. table.delete(delete);
  16. System.out.println("delete successful");
  17.  
  18. } catch (Exception e) {
  19. e.printStackTrace();
  20. } finally {
  21. if (table != null)
  22. table.close();
  23. if (hadmin != null)
  24. hadmin.close();
  25. }
  26. }

6、扫描全表

  1. /**
  2. * scan 'tableName'
  3. */
  4. public static void scan(String tableName) throws Exception {
  5. Configuration config = HBaseConfiguration.create();
  6. config.set("hbase.zookeeper.quorum", host);
  7. HBaseAdmin hadmin = null;
  8. HTable table = null;
  9. try {
  10. table = new HTable(config, tableName);
  11. Scan scan = new Scan();
  12. ResultScanner rc = table.getScanner(scan);
  13.  
  14. for (Result result : rc) {
  15. System.out.println(result);
  16. }
  17.  
  18. } catch (Exception e) {
  19. e.printStackTrace();
  20. } finally {
  21. if (table != null)
  22. table.close();
  23. if (hadmin != null)
  24. hadmin.close();
  25. }
  26. }

Hbase 基础 - shell 与 客户端的更多相关文章

  1. HBASE 基础命令总结

    HBASE基础命令总结 一,概述 本文中介绍了hbase的基础命令,作者既有记录总结hbase基础命令的目的还有本着分享的精神,和广大读者一起进步.本文的hbase版本是:HBase 1.2.0-cd ...

  2. HBASE基础知识总结

    HBASE基础知识总结 一,概要说明 文章首先回顾HBase 的数据模型和数据层级结构,对数据的每个层级的作用和架构进行了详细阐述:随后介绍了数据写入和读取的详细流程.先把架构图和流程图来坐镇. 架构 ...

  3. 大数据存储利器 - Hbase 基础图解

    由于疫情原因在家办公,导致很长一段时间没有更新内容,这次终于带来一篇干货,是一篇关于 Hbase架构原理 的分享. Hbase 作为实时存储框架在大数据业务下承担着举足轻重的地位,可以说目前绝大多数大 ...

  4. HBase基本shell命令

    HBase基本shell命令 以下shell命令都是经过测试,正常展示,若有不足,还望指点! 1.创建表 create ‘表名称’,‘列族名称1’,‘列族名称1’create 'test_M_01', ...

  5. HBASE基础知识

    HBASE的集群的搭建HBASE的表设计HBASE的底层存储模型 HBase 是一个高可靠.高性能.面向列.可伸缩的分布式缓存系统.利用HBase 技术可在廉价PC Server上搭建起大规模结构化存 ...

  6. hbase运行shell时ERROR:org.apache.hadoop.hbase.PleaseHoldException: Master is initializing 的解决办法

    这个问题困扰了我一天多的时间,百度搜索的前几条的答案也是很扯淡的,说什么把/etc/hosts文件下的127.0.1.1改成127.0.0.1就行了,我也只能呵呵了.今天早上起得很晚,中午迪哥请我们去 ...

  7. HBase的shell命令行界面按退格键(Backspace)无法删除问题

    在HBase的shell命令行界面输入错误项按"退格键"删除,却怎么也删除不了: 解决办法: 第一步,修改SecureCRT的设置参数: 第二步,按"Ctrl+退格键(B ...

  8. HBase的Shell命令

    1.HBase提供了一个shell的终端给用户交互 2.HBase Shell的DDL操作 (1)先进入HBase的 Shell命令行,即HBASE_HOME/bin/hbase shell …… & ...

  9. HBase之Table.put客户端流程(续)

    上篇博文中已经谈到,有两个流程没有讲到.一个是MetaTableAccessor.getRegionLocations,另外一个是ConnectionImplementation.cacheLocat ...

随机推荐

  1. Spring AOP拦截对Controller的请求时的配置失败

    简单的说,就是父子容器的问题,将AOP的配置信息放在applicationContext.xml中,该配置文件被ContextLoaderListener加载,Spring会创建一个WebApplic ...

  2. 东北育才 DAY2组合数取mod (comb)

    组合数取模(comb) [问题描述] 计算C(m,n)mod 9901的值 [输入格式] 从文件comb.in中输入数据. 输入的第一行包含两个整数,m和n [输出格式] 输出到文件comb.out中 ...

  3. PHPCMS V9 导航栏当前栏目高亮

    实际上这个东西可有可无,很多站点看似导航栏当鼠标指向后都会变化等高亮处理,一般都比较醒目,但是实质点击过去后,都还是只是刚才的样式,因为这些站点的导航栏都没有对当前选中栏目做CSS的指定变化处理. 该 ...

  4. memcached可视化客户端工具

    TreeNMS是一款redis,Memcache可视化客户端工具,采用JAVA开发,实现基于WEB方式对Redis, Memcached数据库进行管理.维护. 功能包括:NoSQL数据库的展示,库表的 ...

  5. 【JavaScript学习】-事件响应,让网页交互

    什么是事件: JavaScript 创建动态页面.事件是可以被 JavaScript 侦测到的行为. 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件. 比如说,当用户单 ...

  6. JS面向对象笔记二

    菜单导航,<JS面向对象笔记一>,  参考书籍:阮一峰之<JavaScript标准参考教程> 一.构造函数和new命令 二.this关键字 三.构造函数和new命令 四.构造函 ...

  7. 【LeetCode】2. Two Sum

    题目: Given an array of integers, find two numbers such that they add up to a specific target number. ...

  8. meta小结

    mate 标签定义及使用说明 元数据(Metadata)是数据的数据信息. 标签提供了 HTML 文档的元数据.元数据不会显示在客户端,当时会被浏览器解析. META元素通常用于指定网页的描述,关键词 ...

  9. Dubbo高级特性实践-泛化调用

    引言 当后端Java服务用Dubbo协议作为RPC方案的基础,但部分消费方是前端Restful的PHP服务,不能直接调用,于是在中间架设了Router服务提供统一的基于HTTP的后端调用入口. 而Ro ...

  10. java 重载与重写 【转】

    首先我们来讲讲:重载(Overloading) (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态 ...