Hbase深入学习(六) ―― Java操作HBase

本文讲述如何用hbase shell命令和hbase java api对hbase服务器进行操作。

先看以下读取一行记录hbase是如何进行工作的,首先hbaseclient端会连接zookeeper qurom,例如hbase_config.set(“hbase.zookeeper.quorum”,”192.168.50.216”)).通过zookeeper组件client能获知哪个server管理root-region。那么client就去访问管理root的server,在meta中记录了hbase中所有表信息,可以使用scan ‘meta’命令列出你创建的所有表的相信信息,从而获取region分布的新。一旦client获取了这一行的位置信息,比如这一行属于哪个region,client将会缓存这个信息并直接访问hregionserver.久而久之client缓存的信息渐渐增多,即使不妨问,meta表也能知道去访问哪个hregionserver.hbase中包含两种基本类型的文件,一种用于存储wal的log,另一种用于存储具体的数据,这些数据都通过dfs client和分布式的文件系统hdfs进行交互实现存储。

Hbase的一些内存实现原理:

* HMaster— HBase中仅有一个Master server。
    * HRegionServer—负责多个HRegion使之能向client端提供服务,在HBase cluster中会存在多个HRegionServer。
    * ServerManager—负责管理Region server信息,如每个Region server的HServerInfo(这个对象包含HServerAddress和startCode),已load Region个数,死亡的Region server列表
    * RegionManager—负责将region分配到region server的具体工作,还监视root和meta 这2个系统级的region状态。
    * RootScanner—定期扫描root region,以发现没有分配的meta region。
    * MetaScanner—定期扫描meta region,以发现没有分配的user region。

HBase基本命令
下面我们再看看看HBase的一些基本操作命令,我列出了几个常用的HBaseShell命令,如下:

名称

命令表达式

创建表

create '表名称', '列名称1','列名称2','列名称N'

添加记录

put '表名称', '行名称', '列名称:', '值'

查看记录

get '表名称', '行名称'

查看表中的记录总数

count  '表名称'

删除记录

delete  '表名' ,'行名称' , '列名称'

删除一张表

先要屏蔽该表,才能对该表进行删除,第一步 disable '表名称' 第二步  drop '表名称'

查看所有记录

scan "表名称"

查看某个表某个列中所有数据

scan "表名称" , ['列名称:']

更新记录

就是重写一遍进行覆盖

可以进入 hbase 的shell 模式中你可以输入 help 命令查看到你可以执行的命令和对该命令的说明,例如对scan这个命令,help中不仅仅提到有这个命令,还详细的说明了scan命令中可以使用的参数和作用,例如,根据列名称查询的方法和带LIMIT 、STARTROW的使用方法:
scan   Scan a table; pass table name and optionally a dictionary ofscanner specifications.  Scanner specifications may include one or moreof  the following: LIMIT, STARTROW, STOPROW, TIMESTAMP, or COLUMNS. If no columns are specified, all columns will be scanned.  To scan allmembers of a column family, leave the qualifier empty as in 'col_family:'.  Examples:
            hbase>scan '.META.'
            hbase>scan '.META.', {COLUMNS => 'info:regioninfo'}
            hbase>scan 't1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => 'xyz'}

使用JavaAPI对HBase服务器进行操作

需要下列jar包
     hbase-0.20.6.jar
     hadoop-core-0.20.1.jar
     commons-logging-1.1.1.jar
     zookeeper-3.3.0.jar
     log4j-1.2.91.jar

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;

importorg.apache.hadoop.hbase.HColumnDescriptor;

importorg.apache.hadoop.hbase.HTableDescriptor;

import org.apache.hadoop.hbase.KeyValue;

importorg.apache.hadoop.hbase.client.HBaseAdmin;

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

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

importorg.apache.hadoop.hbase.client.ResultScanner;

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

@SuppressWarnings("deprecation")

public class HbaseCaseTest {

static HBaseConfiguration cfg = null;

static {

Configuration HBASE_CONFIG = new Configuration();

HBASE_CONFIG.set("hbase.zookeeper.quorum", "retailvm1d.nam.nsroot.net");

HBASE_CONFIG.set("hbase.zookeeper.property.clientPort", "2181");

cfg = new

HBaseConfiguration
(HBASE_CONFIG);

}

public static void creatTable(String tablename) throws Exception {

HBaseAdmin admin = new HBaseAdmin(cfg);

if (admin.tableExists(tablename)){

System.out.println("table   Exists!!!");

}

else{

HTableDescriptor tableDesc = new HTableDescriptor(tablename);

tableDesc.addFamily(new HColumnDescriptor("name:"));

admin.createTable(tableDesc);

System.out.println("createtable ok .");

}

}

public static void getAllData (String tablename) throws Exception{

HTable table = new HTable(cfg, tablename);

Scan s = new Scan();

ResultScanner ss =table.getScanner(s);

for(Result r:ss){

for(KeyValue kv:r.raw()){

System.out.print(new String(kv.getFamily()));

System.out.println(new String(kv.getValue()    ));

}

}

}

public static void  main (String [] agrs) {

try {

String tablename="tablename";

HbaseCaseTest.creatTable(tablename);

HbaseCaseTest.getAllData(tablename);

}

catch (Exception e) {

e.printStackTrace();

}

}

}

Hbase深入学习(六) Java操作HBase的更多相关文章

  1. HBase之四--(1):Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询

    1.搭建环境 新建JAVA项目,添加的包有: 有关Hadoop的hadoop-core-0.20.204.0.jar 有关Hbase的hbase-0.90.4.jar.hbase-0.90.4-tes ...

  2. java操作Hbase实例

    所用HBase版本为1.1.2,hadoop版本为2.4 /* * 创建一个students表,并进行相关操作 */ import java.io.IOException; import java.u ...

  3. Java操作hbase总结

    用过以后,总得写个总结,不然,就忘喽. 一.寻找操作的jar包. java操作hbase,首先要考虑到使用hbase的jar包. 因为咱装的是CDH5,比较方便,使用SecureCRT工具,远程连接到 ...

  4. 错误: 找不到或无法加载主类 java操作hbase出错

    用java操作hbase 利用maven引入hbase包后发现无法启动程序,然后网上说是包的冲突. 我引入了下面三个包然后程序就不能运行了. <dependency> <groupI ...

  5. Java 操作 HBase 教程

    Java 操作 HBase 教程 一.简介 二.hbase-client 引入 三.连接操作 四.表操作 五.运行测试 相关博文原文地址: 博客园:美码师:HBase(2) Java 操作 HBase ...

  6. Hbase深入学习(一) 什么是hbase

    Hbase深入学习(一) 什么是hbase 一.hbase是什么?      首先hbase是一个在Hadoop的HDFS分布式存储系统上介于映射(key/value)的nosql的分布式数据库:它通 ...

  7. HBASE学习d端口master:16010(java操作hbase)https://www.cnblogs.com/junrong624/p/7323483.html

    HBase提示已创建表,但是list查询时,却显示表不存在. https://blog.csdn.net/liu16659/article/details/80216085 下载网址 http://a ...

  8. 【hbase】——Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询

    1.搭建环境 新建JAVA项目,添加的包有: 有关Hadoop的hadoop-core-0.20.204.0.jar 有关Hbase的hbase-0.90.4.jar.hbase-0.90.4-tes ...

  9. (转)Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询

    1.搭建环境 新建JAVA项目,添加的包有: 有关Hadoop的hadoop-core-0.20.204.0.jar 有关Hbase的hbase-0.90.4.jar.hbase-0.90.4-tes ...

随机推荐

  1. iOS 7 自定义Back按钮 与 Pop interactive gesture 问题

    1.自定义Back按钮 iOS中很多时候我们都会自定义返回按钮,也是一件easy的事,类似如下: // 返回按钮 1 - (void)showNavBackButton { UIButton *bac ...

  2. linux命令——scp 两台linux机器间文件或目录传输

    不同的Linux之间copy文件常用有3种方法: 第一种:ftp,也就是其中一台Linux安装ftpServer,这样可以另外一台使用ftp的client程序来进行文件的copy. 第二种:采用sam ...

  3. UIImage 缩放等效果处理

    //等比率缩放 - (UIImage *)scaleToSize:(UIImage *)img size:(CGSize)size{ // 创建一个bitmap的context // 并把它设置成为当 ...

  4. JavaScript UI技术选型

    ExtJS l ExtJS(TODO:找旧版本,类似现在EasyUI插件的旧版本)简介:纯JS支持:IE6授权:GPLv3授权.商业授权($329/人) l Ext.NET简介:ExtJS的NET封装 ...

  5. [原创]谷歌插件 - YE启动助手(YeLauncher)

    版本:v1.1 更新时间:2013/11/01 * 代码完善 + 右键关于显示当前版本号,点击并链接到软件帮助页 版本:v1.0 更新时间:2013/10/20 + 插件原型

  6. ili9341 横屏驱动代码

    void ili9341_Initializtion(void) { u16 i; RCC->APB2ENR|=<<; //使能PORTB时钟 GPIOB->CRH&= ...

  7. Vim小知识

    在退出vim编辑的时候,强制退出是q! 感叹号在前,即!q,表示执行外部shell命令,感叹号在后,即q!,表示强制执行vi命令.

  8. 微软Azure开始支持Docker技术

    前一段时间还在与微软的技术人员讨论媒体转换服务的效率问题,如果应用 Docker将会有质的提高,没想到国外的Azure已经开始支持了,相信国内Azure支持也不远了.微软正在努力确保Azure成为开发 ...

  9. Ubuntu 软件包管理详解

    原文转载自:http://www.cppblog.com/jb8164/archive/2009/01/09/71583.html Ubuntu 方便宜用,最值得让人称道的便是其安装软件的方式, 一条 ...

  10. 重新执笔,已是大三!Jekyll自定义主题开发

    前言 “一转眼忘了时间 丢了感觉 黑了世界 再逞强 再疯狂 也会伤 不知 不觉 后知 后觉 然后 发现 失去 知觉 ”——<一吻不天荒> 感言 时间是把双刃剑,什么解决不了,忧烦的,慢慢变 ...