Hbase 基本操作用 在java 上的实现
1.首先确保hbase处于开启状态
2.创建maven 项目 导入依赖
<dependencies> <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client --> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>1.2.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-server --> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-server</artifactId> <version>1.2.0</version> </dependency>
3.在resources文件下添加两个文件
1.hbase-site.xml
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>hbase.zookeeper.quorum</name> <value>master,slave1,slave2</value> <description>The directory shared by RegionServers.</description> </property> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> </property> </configuration>
2.log4j.properties
# Global logging configuration log4j.rootLogger=INFO, stdout # MyBatis logging configuration... log4j.logger.org .mybatis.example.BlogMapper=TRACE # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
4.实现基本操作
package com.test.bd17; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.NavigableMap; import java.util.Random; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.CellScanner; 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.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.Table; import org.apache.hadoop.hbase.util.Bytes; public class HbaseTest { public Connection connection; //用hbaseconfiguration初始化配置信息时会自动加载当前应用classpath下的hbase-site.xml public static Configuration configuration = HBaseConfiguration.create(); public Table table; public Admin admin; public HbaseTest() throws Exception{ //对connection初始化 connection = ConnectionFactory.createConnection(configuration); admin = connection.getAdmin(); } //创建表 public void createTable(String tablename,String... cf1) throws Exception{ //获取admin对象 Admin admin = connection.getAdmin(); //创建tablename对象描述表的名称信息 TableName tname = TableName.valueOf(tablename);//bd17:mytable //创建HTableDescriptor对象,描述表信息 HTableDescriptor tDescriptor = new HTableDescriptor(tname); //判断是否表已存在 if(admin.tableExists(tname)){ System.out.println("表"+tablename+"已存在"); return; } //添加表列簇信息 for(String cf:cf1){ HColumnDescriptor famliy = new HColumnDescriptor(cf); tDescriptor.addFamily(famliy); } //调用admin的createtable方法创建表 admin.createTable(tDescriptor); System.out.println("表"+tablename+"创建成功"); } //删除表 public void deleteTable(String tablename) throws Exception{ Admin admin = connection.getAdmin(); TableName tName = TableName.valueOf(tablename); if(admin.tableExists(tName)){ admin.disableTable(tName); admin.deleteTable(tName); System.out.println("删除表"+tablename+"成功!"); }else{ System.out.println("表"+tablename+"不存在。"); } } //新增数据到表里面Put public void putData() throws Exception{ TableName tableName = TableName.valueOf("bd17:fromjava"); Table table = connection.getTable(tableName); Random random = new Random(); List<Put> batPut = new ArrayList<Put>(); for(int i=0;i<10;i++){ //构建put的参数是rowkey rowkey_i (Bytes工具类,各种java基础数据类型和字节数组之间的相互转换) Put put = new Put(Bytes.toBytes("rowkey_"+i)); put.addColumn(Bytes.toBytes("i"), Bytes.toBytes("username"), Bytes.toBytes("un_"+i)); put.addColumn(Bytes.toBytes("i"), Bytes.toBytes("age"), Bytes.toBytes(random.nextInt(50)+1)); put.addColumn(Bytes.toBytes("i"), Bytes.toBytes("birthday"), Bytes.toBytes("20170"+i+"01")); put.addColumn(Bytes.toBytes("j"), Bytes.toBytes("phone"), Bytes.toBytes("电话_"+i)); put.addColumn(Bytes.toBytes("j"), Bytes.toBytes("email"), Bytes.toBytes("email_"+i)); //单记录put // table.put(put); batPut.add(put); } table.put(batPut); System.out.println("表插入数据成功!"); } public void getData() throws Exception{ TableName tableName = TableName.valueOf("bd17:fromjava"); table = connection.getTable(tableName); //构建get对象 List<Get> gets = new ArrayList<Get>(); for(int i=0;i<5;i++){ Get get = new Get(Bytes.toBytes("rowkey_"+i)); gets.add(get); } Result[] results = table.get(gets); for(Result result:results){ //一行一行读取数据 // NavigableMap<byte[],NavigableMap<byte[],NavigableMap<Long,byte[]>>> maps = result.getMap(); // for(byte[] cf:maps.keySet()){ // NavigableMap<byte[],NavigableMap<Long,byte[]>> valueWithColumnQualify = maps.get(cf); // for(byte[] columnQualify:valueWithColumnQualify.keySet()){ // NavigableMap<Long,byte[]> valueWithTimeStamp = valueWithColumnQualify.get(columnQualify); // for(Long ts:valueWithTimeStamp.keySet()){ // byte[] value = valueWithTimeStamp.get(ts); // System.out.println("rowkey:"+Bytes.toString(result.getRow())+",columnFamliy:"+ // Bytes.toString(cf)+",comlumnQualify:"+Bytes.toString(columnQualify)+",timestamp:" // +new Date(ts)+",value:"+Bytes.toString(value) // ); // } // } // } //使用字段名称和列簇名称来获取value值 // System.out.println("rowkey:"+Bytes.toString(result.getRow())+",columnfamily:i,columnqualify:username,value:"+ // Bytes.toString(result.getValue(Bytes.toBytes("i"), Bytes.toBytes("username"))) // ); // System.out.println("rowkey:"+Bytes.toString(result.getRow())+",columnfamily:i,columnqualify:age,value:"+ // Bytes.toInt(result.getValue(Bytes.toBytes("i"), Bytes.toBytes("age"))) // ); //使用cell获取result里面的数据 CellScanner cellScanner = result.cellScanner(); while(cellScanner.advance()){ Cell cell = cellScanner.current(); //从单元格cell中把数据获取并输出 //使用 CellUtil工具类,从cell中把数据获取出来 String famliy = Bytes.toString(CellUtil.cloneFamily(cell)); String qualify = Bytes.toString(CellUtil.cloneQualifier(cell)); String rowkey = Bytes.toString(CellUtil.cloneRow(cell)); String value = Bytes.toString(CellUtil.cloneValue(cell)); System.out.println("rowkey:"+rowkey+",columnfamily:"+famliy+",qualify:"+qualify+",value:"+value); } } } //关闭连接 public void cleanUp() throws Exception{ connection.close(); } public static void main(String[] args) throws Exception { HbaseTest hbaseTest = new HbaseTest(); // hbaseTest.createTable("bd17:fromjava", "i","j"); // hbaseTest.deleteTable("bd17:fromjava"); // hbaseTest.putData(); hbaseTest.getData(); hbaseTest.cleanUp(); } }

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
万亿级日志与行为数据存储查询技术剖析——Hbase系预聚合方案、Dremel系parquet列存储、预聚合系、Lucene系
转自:http://www.infoq.com/cn/articles/trillion-log-and-data-storage-query-techniques?utm_source=infoq&utm_medium=popular_widget&utm_campaign=popular_content_list&utm_content=homepage 目前大数据存储查询方案大概可以分为:Hbase系、Dremel系、预聚合系、Lucene系,笔者就自身的使用经验说说这几个系的优缺点,如有纰漏,欢迎一起探讨。 数据查询包括大体可以分为两步,首先根据某一个或几个字段筛选出符合条件的数据,然后根据关联填充其他所需字段信息或者聚合其他字段信息,本文中提到的大数据技术,都将围绕这两方面。 一、Hbase系 笔者认为Hbase系的解决方案(例如Opentsdb和Kylin)适合相对固定的业务报表类需求,只需要统计少量维度即可满足业务报表需求,对于单值查询有优势,但很难满足灵活聚合数据的场景。 而在需要聚合的场景,对于Hbase而言恰恰需要大量scan数据,会非常影...
- 下一篇
云栖技术之家
云栖的一年 2016年 阿里总部以上技术分享 感受到了阿里人的热情与钻研; 体验了别样的分享模式和理念 爱上了阿里 也 结识了云栖 201702 第一个留言: 云HBase的使用场景及HBase的发展前景 共2617条站内消息我的博客 201112 开始 使用CSDN 从千里之外、到榜上有名、到资源分享 直到2017-03-15 09:57:05 云栖创建第一篇话题 博客入驻 云栖 开始了云栖学习影响之旅 第一篇博客 Android Studio 那些年你常用的神奇快捷键及遇到的糗事儿我的话题 点滴成长 感谢小编:感谢包容和耐心,是他的热心,让我们在工作之余能够抽出时间,来总结和分享一些东西,得以坚持,从中收获; 感谢平台:这个平台提供了太多丰富的知识,和最新前沿的思想和技术交流,让自己能够随时跟上时代的脚步; 开放的环境,凝聚了一批共同的朋友,开心的交流,快乐的沟通,这也是云栖中最大的收获和成长; 这一年的过程,从最初的谈了基本软件使用、到技术开发、病毒入侵、测试行业、大数据、云计算、人工智能、语言语法,世界变化太快,我们不光要学习,更要懂得思考,明白总结; 这里就是我们总结分享的平...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7设置SWAP分区,小内存服务器的救世主
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS关闭SELinux安全模块