`
郑云飞
  • 浏览: 814589 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用 Java 对 hbase 进行CRUD增删改查操作

 
阅读更多

本文以HBase 0.90.2为例,介绍如何在Windows系统,Eclipse IDE集成环境下,使用Java语言,进行HBase客户端编程,包含建立表、删除表、插入记录、删除记录、各种方式下的查询操作等。

 

1. 准备工作

1、下载后安装jdk包(这里使用的是jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008);

2、下载eclipse,解压到本地(这里使用的是eclipse-java-helios-SR2-win32);

3、下载HBase包,解压安装包到本地(这里使用的是hbase-0.90.2)。

2. 搭建开发环境

1、运行Eclipse,创建一个新的Java工程“HBaseClient”,右键项目根目录,选择“Properties”->“Java Build Path”->“Library”->“Add External JARs”,将HBase解压后根目录下的hbase-0.90.2.jar、hbase-0.90.2-tests.jar和lib子目录下所有jar包添加到本工程的Classpath下。

2、按照步骤1中的操作,将自己所连接的HBase的配置文件hbase-site.xml添加到本工程的Classpath中,如下所示为配置文件的一个示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<configuration>
<property>
<name>hbase.rootdir</name>
<value> hdfs://hostname:9000/hbase </value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>*.*.*.*, *.*.*.*, *.*.*.*</value>
</property>
<propertyskipInDoc="true">
<name>hbase.defaults.for.version</name>
<value>0.90.2</value>
</property>
</configuration>

3、下面可以在Eclipse环境下进行HBase编程了。

3. HBase基本操作代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
import java.io.IOException;
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.MasterNotRunningException;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
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;
 
public class CreateTable {
    private static Configuration conf = null;
    // 初始化配置
    static {
        conf = HBaseConfiguration.create();
    }
 
    // 1、建表
    public static void createTable(String tablename, String[] cfs)
            throws IOException {
        HBaseAdmin admin = new HBaseAdmin(conf);
        if (admin.tableExists(tablename)) {
            System.out.println("表已经存在!");
        } else {
            HTableDescriptor tableDesc = new HTableDescriptor(tablename);
            for (int i = 0; i < cfs.length; i++) {
                // 表建好后,列簇不能动态增加,而列是可以动态增加的,这是hbase伸缩性的一个体现。
                tableDesc.addFamily(new HColumnDescriptor(cfs[i]));
            }
            admin.createTable(tableDesc);
            System.out.println("表创建成功!");
        }
    }
 
    // 2、插入数据
    public static void writeRow(String tablename, String[] cfs) {
        try {
            HTable table = new HTable(conf, tablename);
            Put put = new Put(Bytes.toBytes("rows1"));
            for (int j = 0; j < cfs.length; j++) {
                put.add(Bytes.toBytes(cfs[j]), // 指定列簇
                        Bytes.toBytes(String.valueOf("列1")),// 指定列名
                        Bytes.toBytes("value_13"));// 指定列值
                put.add(Bytes.toBytes(cfs[j]),
                        Bytes.toBytes(String.valueOf("lie2")),
                        Bytes.toBytes("value_24"));
                table.put(put);
                System.out.println("插入数据成功");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    // 3、删除一行数据
    public static void deleteRow(String tablename, String rowkey)
            throws IOException {
        HTable table = new HTable(conf, tablename);
        List list = new ArrayList();
        Delete d1 = new Delete(rowkey.getBytes());
        list.add(d1);
        table.delete(list);
        System.out.println("删除行成功!");
    }
 
    // 4、查找一行数据
    public static void selectRow(String tablename, String rowKey)
            throws IOException {
        HTable table = new HTable(conf, tablename);
        Get g = new Get(rowKey.getBytes());
        Result rs = table.get(g);
        for (KeyValue kv : rs.raw()) {
            System.out.print(new String(kv.getRow()) + "  ");// 行号
            System.out.print(new String(kv.getFamily()) + ":");// 列簇名
            System.out.print(new String(kv.getQualifier()) + "  ");// 列名
            System.out.print(kv.getTimestamp() + "  ");// 时间戳
            System.out.println(new String(kv.getValue()));// 单元格的值
        }
    }
 
    // 5、查找全部数据
    public static void scanerTable(String tablename) {
        try {
            HTable table = new HTable(conf, tablename);
            Scan s = new Scan();
            ResultScanner rs = table.getScanner(s);
            for (Result r : rs) {
                KeyValue[] kv = r.raw();
                for (int i = 0; i < kv.length; i++) {
                    System.out.print(new String(kv[i].getRow()) + "  ");
                    System.out.print(new String(kv[i].getFamily()) + ":");
                    System.out.print(new String(kv[i].getQualifier()) + "  ");
                    System.out.print(kv[i].getTimestamp() + "  ");
                    System.out.println(new String(kv[i].getValue()));
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    // 6、删除表
    public static void deleteTable(String tablename) throws IOException {
        try {
            HBaseAdmin admin = new HBaseAdmin(conf);
            admin.disableTable(tablename);
            admin.deleteTable(tablename);
            System.out.println("表删除成功!");
        } catch (MasterNotRunningException e) {
            e.printStackTrace();
        } catch (ZooKeeperConnectionException e) {
            e.printStackTrace();
        }
    }
 
    public static void main(String[] args) throws IOException {
 
        String[] cfs = "a,b,c".split(",");
        // createTable("test01", cfs);
        // writeRow("test01", cfs);
        // deleteRow("test01", "rows1");
        // selectRow("test01", "rows2");
        // scanerTable("test01");
        // deleteTable("test01");
    }
}

 

分享到:
评论

相关推荐

    java链接并对hbase进行增删改查操作的实例代码(含批量插入,范围查询等,并包含所需jar包)

    Java链接HBase进行增删改查操作是大数据领域常见的任务,尤其在处理大规模分布式存储时。HBase,作为Apache Hadoop生态系统的一部分,是一个基于列族的NoSQL数据库,提供了高性能、高可扩展性的数据存储解决方案。这...

    hbase的java client实例

    本主题将深入探讨如何使用Java客户端API与HBase进行交互,包括集成Spring、MapReduce实例以及协处理器的使用。 首先,让我们从HBase的基础开始。HBase是构建在Hadoop文件系统(HDFS)之上的开源NoSQL数据库,它为非...

    Hbase 可视化客户端工具(非phoenix连接)

    用户可以轻松地浏览表结构,执行增删改查(CRUD)操作,以及进行复杂的多表查询。对于熟悉SQL语法的用户来说,这是一个极大的便利,因为他们无需学习全新的命令行语法。 此外,可视化客户端通常还具备数据导入导出...

    hbase-mybatis-demo.rar

    3. **Mapper接口**:MybatisPlus中的Mapper接口将定义SQL操作,如增删改查。 4. **Service层**:这是业务逻辑的主要实现部分,调用Mapper接口进行数据操作。 5. **Controller层**:定义RESTful API,接收HTTP请求并...

    基于注解的hbase orm小工具,目前比较简单

    然后,我们可以利用ORM工具进行数据的增删改查: ```java // 创建 User user = new User(); user.setId("1"); user.setName("张三"); user.setEmail("zhangsan@example.com"); orm.save(user); // 查询 User ...

    springboot-hbase

    在Service或Controller层,注入`UserRepository`,并编写相应的业务逻辑,如增删改查操作。 8. **运行与测试** 运行SpringBoot应用,通过HTTP请求测试数据操作。你可以使用Postman或其他工具发送GET、POST、PUT和...

    Java分布式文件存储项目开发视频教程 (Hbase分布式数据库+Spring boot技术)

    - **CRUD操作**:实现对数据库的基本增删改查操作。 - **事务管理**:实现对数据库事务的管理,确保数据一致性。 #### 子模块-用户管理模块(第10章) - **用户注册与登录**:实现用户的注册和登录功能。 - **密码...

    Hbase实战

    1. CRUD操作:HBase提供了基本的增删改查API,包括Put、Get、Delete、Scan等。 2. 表管理:创建、删除表,修改表结构,如增加或删除列族。 3. Region管理:调整Region大小,手动分割或合并Region以优化性能。 五、...

    hbase参考文档

    4. 编写业务代码:使用模板的方法进行数据的增删改查。 四、HBase常用API 1. 表操作:创建表、删除表、关闭表、打开表、获取表信息等。 2. Region操作:获取Region信息,分裂Region,移动Region。 3. 数据操作:put...

    Python-提供Hbase自动化部署方案WhaleAI专注人工智能大数据

    通过使用Python库,如HappyBase或pyhbase,开发者可以轻松地在Python中操作HBase,实现数据的增删改查、表的创建和管理等。WhaleAI的解决方案可能包含以下几个步骤: 1. **环境准备**:安装必要的依赖,包括Java...

    spingboot+phoenix+mybatis+druid示例

    在SpringBoot项目中,可以通过Phoenix的JDBC驱动与HBase进行交互,进行数据的增删改查操作。 【MyBatis】 MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC...

    java进阶提高学习教程-15数据库操作.pptx

    数据库的基本操作主要是增删改查操作。事务操作是一个经典的例子,即银行转账。 非关系数据库: 随着大数据的兴起,非关系型数据库为大数据问题的解决,提供了全新的数据库技术支持。通过 Java 语言与 NoSQL 技术的...

    (完整word)Java软件开发工程师简历.doc

    - **CRUD操作**:理解如何使用Mybatis进行基本的数据库增删改查操作。 - **Mybatis+Struts2+Spring整合**:知道如何集成这三大框架,构建高效的企业级应用。 5. **工作流引擎**: - **JBPM**:熟悉使用JBPM工作...

    SpringHbaseDemo-master.zip

    例如,我们可以创建一个`HBaseService`类,其中包含增删查改的方法,调用HBaseTemplate进行实际操作。 5. **测试用例**:为了验证集成是否正确,项目通常会包含测试类,通过JUnit或其他测试框架来测试HBaseService...

    MongoDB副本集集群

    安装完成后,可以使用Shell进行基本操作,比如数据库和聚集集合的操作,索引的建立和管理,以及集合数据的增删改查等语句块操作。另外,MongoDB也支持Java语言操作,提供了丰富的CRUD操作方法。 MongoDB的集群与分...

    Beetlsql自学笔记(csdn)————程序.pdf

    - **内置增删改查功能**:BeetlSQL提供了内置的CRUD操作,大大减少了开发者的工作量。 - **SQL管理**:通过Markdown文件管理SQL,使得复杂的SQL编写更为便捷。 - **链式API**:对于简单的SQL,可以通过Query类的...

    mongoDB入门使用.pptx

    在实际应用中,MongoDB的管理和操作涉及增删改查(CRUD)操作、数据备份与恢复、复制集设置、Sharding(分片)等高级特性。学习MongoDB不仅需要理解其基本概念,还需要实践操作以掌握其强大的功能。无论是在Java或...

    HugeGraph-一个开源快速高度可扩展的图数据库

    这些API通常包括增删改查(CRUD)操作,以及更复杂的图查询和分析功能。API支持多种编程语言,如Java、Python、Go等,以适应不同的开发环境。此外,HugeGraph还提供了RESTful API,方便Web应用和分布式系统的集成。 ...

    esme_nosql

    1. **Elasticsearch基础**:包括索引创建、文档增删改查、搜索语句编写、聚合分析等。 2. **Spring与NoSQL集成**:如何使用Spring Data MongoDB库来操作MongoDB,包括配置、Repository接口的使用、CRUD操作等。 3....

Global site tag (gtag.js) - Google Analytics