- 浏览: 2183220 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (682)
- 软件思想 (7)
- Lucene(修真篇) (17)
- Lucene(仙界篇) (20)
- Lucene(神界篇) (11)
- Solr (48)
- Hadoop (77)
- Spark (38)
- Hbase (26)
- Hive (19)
- Pig (25)
- ELK (64)
- Zookeeper (12)
- JAVA (119)
- Linux (59)
- 多线程 (8)
- Nutch (5)
- JAVA EE (21)
- Oracle (7)
- Python (32)
- Xml (5)
- Gson (1)
- Cygwin (1)
- JavaScript (4)
- MySQL (9)
- Lucene/Solr(转) (5)
- 缓存 (2)
- Github/Git (1)
- 开源爬虫 (1)
- Hadoop运维 (7)
- shell命令 (9)
- 生活感悟 (42)
- shell编程 (23)
- Scala (11)
- MongoDB (3)
- docker (2)
- Nodejs (3)
- Neo4j (5)
- storm (3)
- opencv (1)
最新评论
-
qindongliang1922:
粟谷_sugu 写道不太理解“分词字段存储docvalue是没 ...
浅谈Lucene中的DocValues -
粟谷_sugu:
不太理解“分词字段存储docvalue是没有意义的”,这句话, ...
浅谈Lucene中的DocValues -
yin_bp:
高性能elasticsearch ORM开发库使用文档http ...
为什么说Elasticsearch搜索是近实时的? -
hackWang:
请问博主,有用solr做电商的搜索项目?
Solr中Group和Facet的用法 -
章司nana:
遇到的问题同楼上 为什么会返回null
Lucene4.3开发之第八步之渡劫初期(八)
Hbase是够建在HDFS之上的半结构化的分布式存储系统,具有HDFS的所有优点,同时也有自己的亮点,支持更快速的随机读写以及更灵活的Scan操作,而在HDFS上这一点我们是远远做不到的,因为HDFS仅支持Append追加操作,而且也不具备随机读写一条数据的功能,实际上HDFS扫描的范围按Block来算的,所以从某个角度来言,Hbase利用Schemal的方式做到了这一点。
一般情况下,我们使用Linux的shell命令,就可以非常轻松的操作Hbase,例如一些建表,建列簇,插值,显示所有表,统计数量等等,但有时为了提高灵活性,我们也需要使用编程语言来操作Hbase,当然Hbase通过Thrift接口提供了对大多数主流编程语言的支持,例如C++,PHP,Python,Ruby等等,那么本篇,散仙给出的例子是基于Java原生的API操作Hbase,相比其他的一些编程语言,使用Java操作Hbase,会更加高效一些,因为Hbase本身就是使用Java语言编写的。
下面,散仙给出源码,以供参考:
显示所有数据的打印输出如下:
由此,可以看出Hbase的对外的API提供接口,是非常简单易用的。
一般情况下,我们使用Linux的shell命令,就可以非常轻松的操作Hbase,例如一些建表,建列簇,插值,显示所有表,统计数量等等,但有时为了提高灵活性,我们也需要使用编程语言来操作Hbase,当然Hbase通过Thrift接口提供了对大多数主流编程语言的支持,例如C++,PHP,Python,Ruby等等,那么本篇,散仙给出的例子是基于Java原生的API操作Hbase,相比其他的一些编程语言,使用Java操作Hbase,会更加高效一些,因为Hbase本身就是使用Java语言编写的。
下面,散仙给出源码,以供参考:
package com.hbase; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.KeyValue; 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; /** * @author 三劫散仙 * * **/ public class Test { static Configuration conf=null; static{ conf=HBaseConfiguration.create();//hbase的配置信息 conf.set("hbase.zookeeper.quorum", "10.2.143.5"); //zookeeper的地址 } public static void main(String[] args)throws Exception { Test t=new Test(); //t.createTable("temp", new String[]{"name","age"}); //t.insertRow("temp", "2", "age", "myage", "100"); // t.getOneDataByRowKey("temp", "2"); t.showAll("temp"); } /*** * 创建一张表 * 并指定列簇 * */ public void createTable(String tableName,String cols[])throws Exception{ HBaseAdmin admin=new HBaseAdmin(conf);//客户端管理工具类 if(admin.tableExists(tableName)){ System.out.println("此表已经存在......."); }else{ HTableDescriptor table=new HTableDescriptor(tableName); for(String c:cols){ HColumnDescriptor col=new HColumnDescriptor(c);//列簇名 table.addFamily(col);//添加到此表中 } admin.createTable(table);//创建一个表 admin.close(); System.out.println("创建表成功!"); } } /** * 添加数据, * 建议使用批量添加 * @param tableName 表名 * @param row 行号 * @param columnFamily 列簇 * @param column 列 * @param value 具体的值 * * **/ public void insertRow(String tableName, String row, String columnFamily, String column, String value) throws Exception { HTable table = new HTable(conf, tableName); Put put = new Put(Bytes.toBytes(row)); // 参数出分别:列族、列、值 put.add(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(value)); table.put(put); table.close();//关闭 System.out.println("插入一条数据成功!"); } /** * 删除一条数据 * @param tableName 表名 * @param row rowkey * **/ public void deleteByRow(String tableName,String rowkey)throws Exception{ HTable h=new HTable(conf, tableName); Delete d=new Delete(Bytes.toBytes(rowkey)); h.delete(d);//删除一条数据 h.close(); } /** * 删除多条数据 * @param tableName 表名 * @param row rowkey * **/ public void deleteByRow(String tableName,String rowkey[])throws Exception{ HTable h=new HTable(conf, tableName); List<Delete> list=new ArrayList<Delete>(); for(String k:rowkey){ Delete d=new Delete(Bytes.toBytes(k)); list.add(d); } h.delete(list);//删除 h.close();//释放资源 } /** * 得到一条数据 * * @param tableName 表名 * @param rowkey 行号 * ***/ public void getOneDataByRowKey(String tableName,String rowkey)throws Exception{ HTable h=new HTable(conf, tableName); Get g=new Get(Bytes.toBytes(rowkey)); Result r=h.get(g); for(KeyValue k:r.raw()){ System.out.println("行号: "+Bytes.toStringBinary(k.getRow())); System.out.println("时间戳: "+k.getTimestamp()); System.out.println("列簇: "+Bytes.toStringBinary(k.getFamily())); System.out.println("列: "+Bytes.toStringBinary(k.getQualifier())); //if(Bytes.toStringBinary(k.getQualifier()).equals("myage")){ // System.out.println("值: "+Bytes.toInt(k.getValue())); //}else{ String ss= Bytes.toString(k.getValue()); System.out.println("值: "+ss); //} } h.close(); } /** * 扫描所有数据或特定数据 * @param tableName * **/ public void showAll(String tableName)throws Exception{ HTable h=new HTable(conf, tableName); Scan scan=new Scan(); //扫描特定区间 //Scan scan=new Scan(Bytes.toBytes("开始行号"),Bytes.toBytes("结束行号")); ResultScanner scanner=h.getScanner(scan); for(Result r:scanner){ System.out.println("=================================="); for(KeyValue k:r.raw()){ System.out.println("行号: "+Bytes.toStringBinary(k.getRow())); System.out.println("时间戳: "+k.getTimestamp()); System.out.println("列簇: "+Bytes.toStringBinary(k.getFamily())); System.out.println("列: "+Bytes.toStringBinary(k.getQualifier())); //if(Bytes.toStringBinary(k.getQualifier()).equals("myage")){ // System.out.println("值: "+Bytes.toInt(k.getValue())); //}else{ String ss= Bytes.toString(k.getValue()); System.out.println("值: "+ss); //} } } h.close(); } }
显示所有数据的打印输出如下:
================================== 行号: 1 时间戳: 1385597699287 列簇: name 列: myname 值: 秦东亮 ================================== 行号: 2 时间戳: 1385598393306 列簇: age 列: myage 值: 100 行号: 2 时间戳: 1385597723900 列簇: name 列: myname 值: 三劫散仙
由此,可以看出Hbase的对外的API提供接口,是非常简单易用的。
发表评论
-
关于Hbase多版本存储的一个注意点
2018-04-19 11:39 1648我们知道hbase是一个多版本的管理系统,在0.96的版本之前 ... -
Spark如何读取Hbase特定查询的数据
2017-06-29 21:42 4445最近工作需要使用到Spark操作Hbase,上篇文章已经写 ... -
如何使用scala+spark读写hbase?
2017-06-12 19:48 3446最近工作有点忙,所以文章更新频率低了点,希望大家可以谅解,好 ... -
Hadoop+Hbase集群数据迁移问题
2016-03-23 21:00 2523数据迁移或备份是任何 ... -
如何监控你的Hadoop+Hbase集群?
2016-03-21 16:10 4919前言 监控hadoop的框架 ... -
Hbase+Solr实现二级索引提供高效查询
2016-02-18 18:28 7084接着上一篇介绍协处理 ... -
Hbase协处理器介绍
2016-02-18 11:43 3835(一)Hbase协处理器的 ... -
Spark读取Hbase数据
2016-01-21 15:39 2583直接上代码:可以上传jar包,给远程的spark集群,这样 ... -
Spark SQL+Hive历险记
2016-01-21 11:40 6127基础依赖环境 Apache Hadoop2.7.1 Apa ... -
Apache Phoenix安装使用
2016-01-08 16:59 2602前提Hadoop+Hbase集群已经 ... -
一次bug死磕经历之Hbase堆内存小导致regionserver频繁挂掉
2016-01-05 19:11 2762环境如下: Centos6.5 Apac ... -
Hadoop2.7.1和Hbase0.98添加LZO压缩
2016-01-04 17:46 26031,执行命令安装一些依赖组件 yum install -y ... -
Hbase设置Snappy压缩测试
2015-12-30 15:31 3447在DT大数据时代,海量数据的存储和分析是一个巨大的挑战,给我 ... -
Hbase1.1.2高可用配置Hmaster容错
2015-11-12 17:05 1493Hbase的Hmaster配置HA相比Hadoop的Name ... -
设置Hadoop+Hbase集群pid文件存储位置
2015-10-20 13:40 2848有时候,我们对运行几 ... -
hadoop2.2生态系统快速安装脚本
2014-09-23 15:08 1974对于使用hadoop进行开发的朋友们,可能要自己搭建一套had ... -
Hadoop2.2.0+Hive0.13+Hbase0.96.2集成
2014-08-06 20:49 1854本篇,散仙主要讲的是使用Hive如何和Hbase集成,Hbas ... -
如何使用Java API操作Hbase(基于0.96新的api)
2014-07-24 20:16 7456写了个Hbase新的api的增删改查的工具类,以供参考,直接拷 ... -
Hadoop2.2.0+Hbase0.96.2分布式集群搭建
2014-07-23 21:39 1583最近项目有用到Hbase存储数据,由于现在的hadoop 的集 ... -
Java连接Hbase0.96异常
2014-07-14 13:43 2025在Windows上直接使用JAVA API连接Hbase0.9 ...
相关推荐
Java API 用于读写 HBase 是 Java 开发者在大数据领域中常见的操作,尤其是在处理海量分布式数据时。HBase 是一个非关系型数据库(NoSQL),基于 Google 的 Bigtable 模型,设计用于大规模分布式环境,是 Apache ...
本篇文章将深入探讨如何使用Java API与HBase进行交互。 首先,我们需要了解HBase的主要组件: 1. **表(Table)**:HBase中的数据存储在表中,表由行和列族组成。 2. **行(Row)**:行由行键(Row Key)唯一标识...
在Java API中访问HBase是大数据处理中常见的一项任务,HBase作为一个分布式、列式存储的NoSQL数据库,常用于海量数据的实时读写。在这个Java API访问HBase的Maven项目中,我们将探讨如何配置项目,引入依赖,以及...
**Java API** 是Java编程语言提供的应用程序接口,允许开发者使用Java来访问和操作Hadoop和HBase的功能。对于Hadoop,Java API主要包括`org.apache.hadoop.mapreduce`包下的类,如Job、Mapper、Reducer等,用于实现...
本压缩包"javaApi_sparkhiveAPI_hbaseAPI.zip"包含了2019年8月至10月期间针对这些技术的Java版API实现,以及与Spark相关的Hive和HBase API。以下是关于这些技术的详细知识: 1. **Java API for Hive**: - **Hive*...
在本文中,我们将深入探讨如何使用Java通过Thrift2接口操作HBase数据库。HBase是一个分布式、可扩展的大数据存储系统,它构建于Hadoop之上,支持实时读写。Thrift是一个轻量级的框架,用于跨语言服务开发,允许不同...
HBase Java API HBase 是 Hadoop 的数据库,能够对大数据提供随机、实时读写访问。他是开源的,分布式的,多版本的,面向列的,存储模型。HBase 的整体结构主要包括 HBase Master、HRegion 服务器和 HRegion Server...
在Java中操作HBase,我们需要使用HBase的Java客户端API。首先,确保引入了所有必要的jar包,这些包通常包括hbase-client、hbase-common、hadoop-client等。这些依赖可以使用Maven或Gradle等构建工具管理,或者直接在...
本主题将深入探讨如何使用Java客户端API与HBase进行交互,包括集成Spring、MapReduce实例以及协处理器的使用。 首先,让我们从HBase的基础开始。HBase是构建在Hadoop文件系统(HDFS)之上的开源NoSQL数据库,它为非...
在Java中,我们可以使用HBase的Java API来与HBase交互,进行数据的读写操作。下面将详细介绍HBase Java API的核心概念和常用方法。 1. **连接HBase** 要连接到HBase,你需要创建一个`Configuration`对象,然后通过...
HBase数据查询API HBase是一种分布式的、面向列的NoSQL数据库,主要应用于存储大量的半结构化数据。HBase提供了多种查询方式,包括单条查询和批量查询。 单条查询 单条查询是通过rowkey在table中查询某一行的数据...
本文将详细讨论如何使用Java编程语言实现从Hive到HBase的快速数据导入方案。 首先,Hive是一个基于Hadoop的数据仓库工具,它可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,适合大规模数据的离线...
优化HBase Java API的使用,可以考虑以下几点:批量操作、使用BufferedMutator、调整缓存设置、选择合适的分区策略等。 总结,HBase的Java API是开发人员与HBase进行交互的主要工具,通过理解和熟练运用这些API,...
对HBase的API做了一层抽象,统一了HBase1.x和HBase2.x的实现,并提供了读写HBase的ORM的支持,同时,sdk还对HBase thrift 的客户端API进行了池化封装,(类似JedisPool),消除了直接使用原生API的各种问题,使之...
Apache HBase提供了Java API供开发者使用,包括HBase客户端库,允许开发者通过Java代码来创建表、插入数据、查询数据以及执行其他操作。例如,`HTable`类用于与特定的表进行交互,`Put`和`Get`对象分别用于写入和...
然而,由于HBase的原生API是用Java编写的,对于非Java语言如Python、C++等,直接使用会比较复杂。这时,Apache Thrift就派上用场了。 Thrift是一个接口定义语言和跨语言的通信框架,它可以生成多种编程语言的代码,...
以下是关于使用Java开发HBase 1.2.1时所需的一些关键知识点: 1. **HBase依赖**: 开发HBase应用程序时,首先需要在项目中引入HBase的客户端库。HBase 1.2.1的jar包通常包括`hbase-client.jar`,它包含了与HBase通信...
在HBase Java API使用方面,HBaseConfiguration对象是每个HBase客户端都需要使用的,它代表了HBase的配置信息。可以通过默认构造函数来创建HBaseConfiguration对象,它会尝试从类路径中的hbase-default.xml和hbase-...
在使用 HBase 时,用户需要熟悉 HBase Shell 命令行工具或者 HBase 提供的 Java API 来进行数据的读写操作。HBase Shell 提供了一个交互式的界面,允许用户执行数据操作、管理表结构、以及维护集群状态等。Java API ...