Hbase-1.2.4 javaAPI操作总结
来源:互联网 发布:进销存 java 编辑:程序博客网 时间:2024/05/16 15:00
一、 概述
关于Hbase的工作原理网上已经有很多详细介绍,就不在这里赘述了,我们直接研究代码
作为Hbase最新stable版,Hbase内部引入的部分hadoop2.5系列的jar包,这里且暂不去理会它,但是Java环境必须要8以上,我的正确运行环境为:
Centos-6.5
hadoop-2.6.5
Hbase-1.2.4
jdk1.8
二、代码设计
package com.unisk.bigdata.hbase;import java.io.IOException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.HBaseConfiguration;import org.apache.hadoop.hbase.HColumnDescriptor;import org.apache.hadoop.hbase.HConstants;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.HTable;import org.apache.hadoop.hbase.client.Put;import org.apache.hadoop.hbase.io.compress.Compression.Algorithm;import org.apache.hadoop.hbase.util.Bytes;public class Hbase { private static final String TABLE_NAME = "PEOPLE"; private static final String COLUMN_FAMILY = "baseINFO"; public static void createOrOverwrite(Admin admin, HTableDescriptor table) throws IOException { if (admin.tableExists(table.getTableName())) { admin.disableTable(table.getTableName()); admin.deleteTable(table.getTableName()); } admin.createTable(table); } public static void createSchemaTables(Configuration config) throws IOException { Connection connection = ConnectionFactory.createConnection(config); Admin admin = connection.getAdmin(); HTableDescriptor table = admin.getTableDescriptor(TableName.valueOf(TABLE_NAME)); table.addFamily(new HColumnDescriptor(COLUMN_FAMILY).setCompressionType(Algorithm.NONE)); System.out.println("Creating table......"); createOrOverwrite(admin, table); System.out.println("Done."); } @SuppressWarnings("deprecation") public static void insert(Configuration conf)throws IOException{ HTable table = new HTable(conf,TABLE_NAME.getBytes()); Put put = new Put(Bytes.toBytes("0001")); put.add("baseINFO".getBytes(), "name".getBytes(), "wangxiaoming".getBytes()); put.setAttribute("name", "wxm".getBytes()); table.setWriteBufferSize(1024*1024*1024); table.put(put); System.out.println("insert success!"); table.close(); } public static void modifySchema (Configuration conf) throws IOException { Connection connection = ConnectionFactory.createConnection(conf); Admin admin = connection.getAdmin(); TableName tableName = TableName.valueOf(TABLE_NAME); if (!admin.tableExists(tableName)) { System.out.println("Table does not exist."); System.exit(-1); } HTableDescriptor table = admin.getTableDescriptor(tableName); // Update existing table HColumnDescriptor newColumn = new HColumnDescriptor("NEWCF"); newColumn.setCompactionCompressionType(Algorithm.GZ); newColumn.setMaxVersions(HConstants.ALL_VERSIONS); admin.addColumn(tableName, newColumn); // Update existing column family HColumnDescriptor existingColumn = new HColumnDescriptor(COLUMN_FAMILY); existingColumn.setCompactionCompressionType(Algorithm.GZ); existingColumn.setMaxVersions(HConstants.ALL_VERSIONS); table.modifyFamily(existingColumn); admin.modifyTable(tableName, table); // Disable an existing table admin.disableTable(tableName); // Delete an existing column family admin.deleteColumn(tableName, COLUMN_FAMILY.getBytes("UTF-8")); // Delete a table (Need to be disabled first) admin.deleteTable(tableName); } public static void main(String... args) throws IOException { Configuration config = HBaseConfiguration.create(); //Add any necessary configuration files (hbase-site.xml, core-site.xml) //config.addResource(new Path(System.getenv("HBASE_CONF_DIR"), "hbase-site.xml")); //config.addResource(new Path(System.getenv("HADOOP_CONF_DIR"), "core-site.xml")); config.addResource("/wxm/software/hbase/hbase-1.2.4/conf/hbase-site.xml"); config.addResource("/wxm/software/hbase/hbase-1.2.4/conf/core-site.xml"); createSchemaTables(config); insert(config); //modifySchema(config); } }
三、代码分析
为了逻辑上严谨一点,这里写了createOrOverwrite方法,若初学API,大可不必浪费这几行空间,升级1.0之后,不建议使用HTablePool对象,可使用Admin来跟Hbase交互,另在main方法中,因为运行调用Hbase环境配置,故需要加入运行时参数,但简单起见,依然可以固定在代码里,关于put对象,以及HTableDescripter对象,可以以集合的形式传入从而增加效率,这个看需求,后期改进即可,后面如果有时间,我会将关于Hbase的通用增删改查的工具发布到github,大家有问题可以加qq1821088755一起交流。
0 0
- Hbase-1.2.4 javaAPI操作总结
- spark操作hbase的javaapi
- 利用JavaAPI对HBase操作
- HBase Shell及JavaAPI操作
- Hbase调用JavaAPI实现批量导入操作
- HBase伪分布式部署及JavaAPI操作
- hbase的JavaAPI操作:连接、创建、删除
- 关于Hbase在javaAPI操作表的操作
- Hbase调用JavaAPI实现批量导入操作(应用)
- 利用javaApI【eclipse】操作HBase时,出现异常的解决方案
- JavaAPI操作hbase遇到的java.lang.UnsupportedClassVersionError问题
- JavaAPI总结
- HBase的JavaAPI使用
- Hbase javaapi curd笔记
- Hbase的JavaAPI----HbaseDao
- HBase之JavaAPI
- Hbase 基本操作总结
- Hbase shell操作总结
- Spring MVC之@RequestMapping 详解
- JavaScript DOM编程艺术 学习笔记(十)用JavaScript实现动画效果
- ajaxfileupload.js的使用
- TCP之(chat)
- Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解
- Hbase-1.2.4 javaAPI操作总结
- vue
- UDP之(feiQ)
- Linux系统shell脚本编程——生产实战案例(批量检查在线IP与开放端口)
- (Unicode) UTF-8与UTF-16之间转换
- CodeForces - 740C
- 技巧:分享两个微信群加粉方法
- Spring MVC之@RequestBody, @ResponseBody 详解
- 电脑关机爬虫继续--screen