package com.my.hbase; import java.io.IOException; import java.util.*; import org.apache.hadoop.conf.Configuration; 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.*; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.Cell; public class HbaseUtils { private static Configuration conf = null; private static HConnection conn = null; private final static int BATCH_SIZE = 1000; static { try { conf = HBaseConfiguration.create(); conn = HConnectionManager.createConnection(conf); conf.set("hbase.zookeeper.quorum","master"); conf.set("hbase.zookeeper.property.clientPort", "2181"); } catch (IOException e) { e.printStackTrace(); } } // 创建数据库表 public void createTable(String tableName, String[] columnFamilys) throws Exception { // 新建一个数据库管理员 HBaseAdmin hAdmin = new HBaseAdmin(conf); if (hAdmin.tableExists(tableName)) { System.out.println("表已经存在"); System.exit(0); } else { // 新建一个 scores 表的描述 HTableDescriptor tableDesc = new HTableDescriptor(TableName.valueOf(tableName)); // 在描述里添加列族 for (String columnFamily : columnFamilys) { tableDesc.addFamily(new HColumnDescriptor(columnFamily)); } // 根据配置好的描述建表 hAdmin.createTable(tableDesc); System.out.println("创建表成功"); } hAdmin.close(); } // 删除数据库表 public void deleteTable(String tableName) { // 新建一个数据库管理员 try { HBaseAdmin hAdmin = new HBaseAdmin(conf); if (hAdmin.tableExists(tableName)) { // 关闭一个表 hAdmin.disableTable(tableName); // 删除一个表 hAdmin.deleteTable(tableName); System.out.println("删除表成功"); } else { System.out.println("删除的表不存在"); System.exit(0); } hAdmin.close(); } catch (IOException e) { e.printStackTrace(); } finally { } } // 添加一条数据 public void addRow(String tableName, String row, String columnFamily, String column, String value) throws Exception { HTableInterface table =conn.getTable(tableName); Put put = new Put(Bytes.toBytes(row)); // 参数出分别:列族、列、值 put.add(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(value)); table.put(put); table.close(); } // 批量添加数据 private void write(String hbaseTableName,String rowPrefix, String columnFamily, String qualifier, Collection<String> contents) { HTableInterface table = null; try { table = conn.getTable(hbaseTableName); List<Put> putList = new ArrayList<Put>(); int idx = 0; //row自行定义 for (String line : contents) { String rowKey = rowPrefix + idx; if (contents.size() == 1) rowKey = rowPrefix; idx++; Put put = new Put(rowKey.getBytes()); put.add(columnFamily.getBytes(), qualifier.getBytes(), line.getBytes()); putList.add(put); if (putList.size() >= BATCH_SIZE) { table.put(putList); table.flushCommits(); putList.clear(); } } table.put(putList); table.flushCommits(); } catch (Throwable e) { e.printStackTrace(); } finally { if (table != null) { try { table.close(); } catch (IOException e) { e.printStackTrace(); } } } } // 删除一条数据 public void delRow(String tableName, String row) throws Exception { HTableInterface table =conn.getTable(tableName); Delete del = new Delete(Bytes.toBytes(row)); table.delete(del); table.close(); } // 删除多条数据 public void delMultiRows(String tableName, String[] rows) throws Exception { HTableInterface table =conn.getTable(tableName); List<Delete> list = new ArrayList<Delete>(); for (String row : rows) { Delete del = new Delete(Bytes.toBytes(row)); list.add(del); } table.delete(list); table.close(); } // get row public Map<String, String> getRow(String tableName, String row) throws Exception { HTableInterface table =conn.getTable(tableName); Get get = new Get(Bytes.toBytes(row)); Result result = table.get(get); Map<String, String> returnResult = new HashMap<String, String>(); // 输出结果 for (Cell rowKV : result.rawCells()) { returnResult.put(new String(CellUtil.cloneRow(rowKV)), new String(CellUtil.cloneValue(rowKV))); } table.close(); return returnResult; } // get all records public Map<String, String> getAllRows(String tableName) throws Exception { HTableInterface table =conn.getTable(tableName); Scan scan = new Scan(); ResultScanner results = table.getScanner(scan); Map<String, String> returnResult = new HashMap<String, String>(); // 输出结果 for (Result result : results) { for (Cell rowKV : result.rawCells()) { returnResult.put(new String(CellUtil.cloneRow(rowKV)), new String(CellUtil.cloneValue(rowKV))); } } table.close(); return returnResult; } private String getFirst(Map<String, String> dataMap) { if (dataMap == null || dataMap.size() == 0) return null; else { for (String s : dataMap.values()) { return s; } } return null; } // main public static void main(String[] args) { try { HbaseUtils hbaseUtils=new HbaseUtils(); String tableName = "users2"; // 第一步:创建数据库表:“users2” String[] columnFamilys = { "info", "course" }; hbaseUtils.createTable(tableName, columnFamilys); // 第二步:向数据表的添加数据 // 添加第一行数据 hbaseUtils.addRow(tableName, "tht", "info", "sex", "boy"); hbaseUtils.addRow(tableName, "tht", "course", "china", "97"); hbaseUtils.addRow(tableName, "tht", "course", "math", "128"); hbaseUtils.addRow(tableName, "tht", "course", "english", "85"); // 添加第二行数据 hbaseUtils.addRow(tableName, "xiaoxue", "info", "age", "19"); hbaseUtils.addRow(tableName, "xiaoxue", "info", "sex", "boy"); hbaseUtils.addRow(tableName, "xiaoxue", "course", "china", "90"); hbaseUtils.addRow(tableName, "xiaoxue", "course", "math", "120"); hbaseUtils .addRow(tableName, "xiaoxue", "course", "english", "90"); // 添加第三行数据 hbaseUtils.addRow(tableName, "qingqing", "info", "age", "18"); hbaseUtils.addRow(tableName, "qingqing", "info", "sex", "girl"); hbaseUtils.addRow(tableName, "qingqing", "course", "china", "100"); hbaseUtils.addRow(tableName, "qingqing", "course", "math", "100"); hbaseUtils.addRow(tableName, "qingqing", "course", "english","99"); // 第三步:获取一条全部版本数据 System.out.println("获取一条数据"); hbaseUtils.getRow(tableName, "tht"); // 第三步:获取一条有效数据 hbaseUtils.getFirst(hbaseUtils.getRow(tableName, "tht")); // 第四步:获取所有数据 System.out.println("获取所有数据"); hbaseUtils.getAllRows(tableName); // 第五步:删除一条数据 System.out.println("删除一条数据"); hbaseUtils.delRow(tableName, "tht"); hbaseUtils.getAllRows(tableName); // 第六步:删除多条数据 System.out.println("删除多条数据"); String[] rows = { "xiaoxue", "qingqing" }; hbaseUtils.delMultiRows(tableName, rows); hbaseUtils.getAllRows(tableName); // 第八步:删除数据库 System.out.println("删除数据库"); hbaseUtils.deleteTable(tableName); } catch (Exception err) { err.printStackTrace(); } } }
相关推荐
在本文档中,我们将深入探讨如何使用Java API与HBase数据库进行交互,特别是关于如何创建表、修改表结构以及批量插入数据。HBase是Apache的一个分布式、可扩展的大数据存储系统,它基于谷歌的Bigtable设计,适用于...
在本文中,我们将深入探讨如何使用Java API连接到运行在虚拟机上的HBase数据库,并进行相关的数据操作。HBase是一个分布式的、版本化的、基于列族的NoSQL数据库,它构建于Hadoop之上,适用于处理大规模的数据存储和...
Java访问Hbase数据库是大数据处理中的常见操作,尤其在分布式存储和实时数据分析场景下。HBase,一个基于Google Bigtable模型的开源非关系型数据库,是Apache Hadoop生态系统的一部分,提供高并发、低延迟的数据存储...
HBase,全称为Apache HBase,是一款开源的分布式数据库,基于Google的Bigtable设计思想,是Apache Hadoop生态系统的一部分。HBase提供高可靠性、高性能、列式存储、可伸缩性和实时读写能力,适用于大数据处理场景。...
在Java中操作HBase,尤其是基于0.96版本的新API,涉及到许多核心概念和方法。HBase是一个分布式的、可扩展的列式数据库,它建立在Hadoop之上,适用于实时读写大数据。本篇文章将深入探讨如何使用Java API与HBase进行...
以下是一些关于如何使用Java连接远程HBase数据库的重要知识点: 1. **引入依赖**: 标签中的"java habse"暗示我们需要Java的HBase客户端库。描述中提到的"所有jar"通常指的是这些库。在Java项目中,这些依赖可以通过...
这篇博客“Hbase调用Java API实现批量导入操作”聚焦于如何利用Java编程语言高效地向HBase中批量导入数据。在这个过程中,我们将探讨以下几个关键知识点: 1. **HBase架构**: HBase是基于列族的存储模型,数据被...
【HBase数据库设计】 HBase是一种基于列存储的分布式数据库,它是Apache Hadoop生态系统的一部分,设计用于处理海量数据。HBase的主要特征包括: 1. **分布式存储**:HBase构建在Hadoop的HDFS(Hadoop Distributed...
在本文中,我们将深入探讨如何使用Java通过Thrift2接口操作HBase数据库。HBase是一个分布式、可扩展的大数据存储系统,它构建于Hadoop之上,支持实时读写。Thrift是一个轻量级的框架,用于跨语言服务开发,允许不同...
在Java API中访问HBase是大数据处理中常见的一项任务,HBase作为一个分布式、列式存储的NoSQL数据库,常用于海量数据的实时读写。在这个Java API访问HBase的Maven项目中,我们将探讨如何配置项目,引入依赖,以及...
4. 无SQL语言支持:HBase没有自己的SQL语言,但是提供了Java API供开发者操作数据。 5. 多版本支持:HBase存储每个数据行的多个版本,允许在不同的时间点进行数据快照。 6. 分布式多层次映射表结构:HBase的数据模型...
在Java中操作HBase,我们需要使用HBase的Java客户端API。首先,确保引入了所有必要的jar包,这些包通常包括hbase-client、hbase-common、hadoop-client等。这些依赖可以使用Maven或Gradle等构建工具管理,或者直接在...
Java 操作 Hbase 进行建表、删表以及对...本文介绍了使用 Java 操作 Hbase 进行建表、删表以及对数据进行增删改查的操作。这些操作都是基于 Hbase 的 API 实现的。同时,也介绍了使用 Filter 对象进行条件查询的方法。
- **Region Server**:HBase将数据分布在多个Region Server上,Java API允许开发者管理这些服务器并执行跨服务器的操作。 - **Scan和Get操作**:通过API,可以执行扫描(Scans)来获取多行数据,或者使用Get方法...
java调用hbase数据库,完成对hbase常用api的封装和对hbase数据库的增删改查等操作,经测试绝对可用。
这个名为“Hbasetest”的压缩包文件很可能包含了上述操作的完整示例代码,你可以通过查看和运行代码来加深对Java操作HBase的理解。务必注意,根据你的HBase集群配置,可能需要调整代码中的连接参数,以确保正确连接...
在本项目中,我们将关注如何使用C#语言通过Thrift2来操作Hbase数据库,实现数据的增、删、改、查(CRUD)功能。 1. **Thrift2与Hbase的交互** Thrift2提供了一种灵活的方式与Hbase进行交互。首先,我们需要在Hbase...
在本文中,我们将深入探讨如何使用HBase的Java API进行数据的增加、修改和删除操作。HBase是一个基于Google Bigtable设计的开源分布式数据库,它属于Apache Hadoop生态系统的一部分,适用于处理大规模数据存储。通过...
本篇文章将深入探讨如何在集群环境中使用Java API来操作HBase 0.98版本,主要包括创建表格、删除表格等基本操作。 首先,为了在Java中调用HBase的API,我们需要添加HBase的依赖库到项目中。对于HBase 0.98,你需要...
标题“C#使用Thrift2操作HBase数据库”表明我们将讨论如何在C#环境下利用Thrift2库与HBase进行交互,执行基本的数据操作,如添加(Insert)、删除(Delete)、更新(Update)和查询(Select)。 首先,我们需要理解...