HBase提供了java api来对HBase进行一系列的管理涉及到对表的管理、数据的操作等。常用的API操作有:
1、 对表的创建、删除、显示以及修改等,可以用HBaseAdmin,一旦创建了表,那么可以通过HTable的实例来访问表,每次可以往表里增加数据。
2、 插入数据
创建一个Put对象,在这个Put对象里可以指定要给哪个列增加数据,以及当前的时间戳等值,然后通过调用HTable.put(Put)来提交操作,子猴在这里提请注意的是:在创建Put对象的时候,你必须指定一个行(Row)值,在构造Put对象的时候作为参数传入。
3、 获取数据
要获取数据,使用Get对象,Get对象同Put对象一样有好几个构造函数,通常在构造的时候传入行值,表示取第几行的数据,通过HTable.get(Get)来调用。
4、 浏览每一行
通过Scan可以对表中的行进行浏览,得到每一行的信息,比如列名,时间戳等,Scan相当于一个游标,通过next()来浏览下一个,通过调用HTable.getScanner(Scan)来返回一个ResultScanner对象。HTable.get(Get)和HTable.getScanner(Scan)都是返回一个Result。Result是一个
KeyValue的链表。
5、 删除
使用Delete来删除记录,通过调用HTable.delete(Delete)来执行删除操作。(注:删除这里有些特别,也就是删除并不是马上将数据从表中删除。)
6、 锁
新增、获取、删除在操作过程中会对所操作的行加一个锁,而浏览却不会。
7、 簇的访问
客户端代码通过ZooKeeper来访问找到簇,也就是说ZooKeeper quorum将被使用,那么相关的类(包)应该在客户端的类(classes)目录下,即客户端一定要找到文件hbase-site.xml。
以下是一个完整的代码示例,基于hbase-0.90.3编写
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.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;
public class HBaseTest {
private static Configuration conf = null;
/**
* 初始化配置
*/
static {
Configuration HBASE_CONFIG = new Configuration();
//与hbase/conf/hbase-site.xml中hbase.zookeeper.quorum配置的值相同
HBASE_CONFIG.set("hbase.zookeeper.quorum", "10.1.1.1");
//与hbase/conf/hbase-site.xml中hbase.zookeeper.property.clientPort配置的值相同
HBASE_CONFIG.set("hbase.zookeeper.property.clientPort", "2181");
conf = HBaseConfiguration.create(HBASE_CONFIG);
}
/**
* 创建一张表
*/
public static void creatTable(String tableName, String[] familys) throws Exception {
HBaseAdmin admin = new HBaseAdmin(conf);
if (admin.tableExists(tableName)) {
System.out.println("table already exists!");
} else {
HTableDescriptor tableDesc = new HTableDescriptor(tableName);
for(int i=0; i<familys.length; i++){
tableDesc.addFamily(new HColumnDescriptor(familys[i]));
}
admin.createTable(tableDesc);
System.out.println("create table " + tableName + " ok.");
}
}
/**
* 删除表
*/
public static void deleteTable(String tableName) throws Exception {
try {
HBaseAdmin admin = new HBaseAdmin(conf);
admin.disableTable(tableName);
admin.deleteTable(tableName);
System.out.println("delete table " + tableName + " ok.");
} catch (MasterNotRunningException e) {
e.printStackTrace();
} catch (ZooKeeperConnectionException e) {
e.printStackTrace();
}
}
/**
* 插入一行记录
*/
public static void addRecord (String tableName, String rowKey, String family, String qualifier, String value)
throws Exception{
try {
HTable table = new HTable(conf, tableName);
Put put = new Put(Bytes.toBytes(rowKey));
put.add(Bytes.toBytes(family),Bytes.toBytes(qualifier),Bytes.toBytes(value));
table.put(put);
System.out.println("insert recored " + rowKey + " to table " + tableName +" ok.");
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 删除一行记录
*/
public static void delRecord (String tableName, String rowKey) throws IOException{
HTable table = new HTable(conf, tableName);
List list = new ArrayList();
Delete del = new Delete(rowKey.getBytes());
list.add(del);
table.delete(list);
System.out.println("del recored " + rowKey + " ok.");
}
/**
* 查找一行记录
*/
public static void getOneRecord (String tableName, String rowKey) throws IOException{
HTable table = new HTable(conf, tableName);
Get get = new Get(rowKey.getBytes());
Result rs = table.get(get);
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()));
}
}
/**
* 显示所有数据
*/
public static void getAllRecord (String tableName) {
try{
HTable table = new HTable(conf, tableName);
Scan s = new Scan();
ResultScanner ss = table.getScanner(s);
for(Result r:ss){
for(KeyValue kv : r.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()));
}
}
} catch (IOException e){
e.printStackTrace();
}
}
public static void main (String [] agrs) {
try {
String tablename = "scores";
String[] familys = {"grade", "course"};
HBaseTest.creatTable(tablename, familys);
//add record zkb
HBaseTest.addRecord(tablename,"zkb","grade","","5");
HBaseTest.addRecord(tablename,"zkb","course","","90");
HBaseTest.addRecord(tablename,"zkb","course","math","97");
HBaseTest.addRecord(tablename,"zkb","course","art","87");
//add record baoniu
HBaseTest.addRecord(tablename,"baoniu","grade","","4");
HBaseTest.addRecord(tablename,"baoniu","course","math","89");
System.out.println("===========get one record========");
HBaseTest.getOneRecord(tablename, "zkb");
System.out.println("===========show all record========");
HBaseTest.getAllRecord(tablename);
System.out.println("===========del one record========");
HBaseTest.delRecord(tablename, "baoniu");
HBaseTest.getAllRecord(tablename);
System.out.println("===========show all record========");
HBaseTest.getAllRecord(tablename);
} catch (Exception e) {
e.printStackTrace();
}
}
}
1.程序编译为一个jar包hbtest.jar
2.写个shell 脚本:(hbtest.sh)
#!/bin/sh
source ~/.bash_profile
export HADOOP_CLASSPATH=/home/liliugen/hadoop-0.20.2/hadoop-core-0.20.2-cdh3u0.jar:/home/liliugen/hbase-0.90.1/hbase-0.90.1-cdh3u0.jar:/home/liliugen/zookeeper-3.3.3/zookeeper-3.3.3.jar
/home/liliugen/hadoop-0.20.2/bin/hadoop jar hbtest.jar hbase.HBaseTest
分享到:
相关推荐
本节通过一个具体的编程实例来学习如何使用 HBase Java API 解决实际问题。在本实例中,首先创建一个学生成绩表 scores,用来存储学生各门课程的考试成绩,然后向 scores 添加数据。 表 scores 的概念视图如图 1 所...
**Java API** 是Java编程语言提供的应用程序接口,允许开发者使用Java来访问和操作Hadoop和HBase的功能。对于Hadoop,Java API主要包括`org.apache.hadoop.mapreduce`包下的类,如Job、Mapper、Reducer等,用于实现...
2. **代码示例**:提供实际的Java代码,演示如何编写Map和Reduce函数来处理HBase中的数据,以及如何使用HBaseInputFormat和HBaseOutputFormat与HBase交互。 3. **数据准备**:可能包含一些模拟数据或实际数据,用于...
然而,这一过程涉及到对Hadoop和HBase架构的深入了解,以及对Java编程的熟练掌握。以上提供的知识点涵盖了在Eclipse中设置HBase开发环境的步骤,以及如何编写和运行基本的HBase程序示例。这对于希望在实际项目中应用...
在Java编程环境中,链接并操作HBase是一种常见的任务,特别是在大数据处理和分布式存储的应用场景下。HBase是一个基于Google Bigtable设计的开源NoSQL数据库,它运行在Hadoop之上,提供高并发、低延迟的数据存储服务...
下面我们将深入探讨HBase 0.96版本中的关键Java编程知识点。 首先,理解HBase的基础架构至关重要。HBase是构建在Hadoop之上的,利用HDFS作为其底层存储。在Java中,我们通过HBase客户端API与HBase交互,这些API包括...
总结起来,这个“Hbase操作Hadoop分布式数据库java工程实例”是一个全面的学习资源,涵盖了HBase的基本概念、Java编程接口和测试实践。通过学习和实践这个实例,开发者能够掌握HBase在Hadoop环境下的实际应用,为大...
《HBase编程实践》 HBase,全称为Hadoop Base,是构建在Hadoop分布式文件系统(HDFS)之上的开源非关系型数据库,属于NoSQL数据库的一种。它设计用于处理大规模数据集,提供实时读写性能,尤其适用于大数据领域的...
4. **建立连接**: 通过`ConnectionFactory`创建一个`Connection`实例,这将用于执行HBase操作: ```java Connection connection = ConnectionFactory.createConnection(config); ``` 5. **操作数据**: 使用`...
3. **编写Java代码**:使用生成的Java客户端代码,创建HBase连接,实例化Thrift客户端,然后调用其提供的方法来访问HBase表。通常包括以下步骤: - 连接Thrift服务器:通过`TSocket`或`TFramedTransport`建立与...
在Java编程环境中,HBase是一个基于Google Bigtable设计的分布式、高性能、版本化的NoSQL数据库。多线程技术是Java程序性能优化的关键手段之一,当处理大数据量时,如HBase这样的系统尤其需要多线程来提升数据读写...
这个实例代码将帮助开发者理解和实现如何在Java环境中与HBase交互。 首先,要进行HBase操作,你需要在项目中添加相应的依赖。在`.classpath`和`.project`文件中,可能包含了项目的构建和依赖信息,比如Maven或...
在单机模式下,HBase的配置主要涉及到设置JAVA环境变量,并在 `hbase-env.sh` 文件中设置 `HBASE_MANAGES_ZK` 为 `true`,这表示HBase将管理ZooKeeper实例。同时,我们需要配置 `hbase-site.xml` 文件,以定义HBase...
它不支持复杂的查询,但对于快速检查和监控HBase实例非常有用。 7. **HBase MapReduce**:MapReduce是Hadoop处理大数据的主要工具,HBase与MapReduce结合可以进行批量数据处理和分析。通过编写MapReduce作业,可以...
在ella-hbase-0.96.2中,开发者可以直接利用HBase的Table接口创建实例,然后通过Get或Scan对象来读取数据。例如,可以创建一个Get对象来指定行键,然后调用Table的get方法获取特定行的数据。对于范围查询,可以创建...
Scala是一种强大的函数式编程语言,与Java虚拟机(JVM)兼容,因此非常适合编写HBase的客户端程序。 首先,确保你的开发环境已经配置好,包括安装了Scala、Maven、Hadoop和HBase。在Maven项目中,你需要在`pom.xml`...
- 修改`/usr/local/hbase/conf/hbase-env.sh`,设置`JAVA_HOME`为JDK的安装路径,并设置`HBASE_MANAGES_ZK`为`true`,表示HBase管理自己的ZooKeeper实例。 - 配置`/usr/local/hbase/conf/hbase-site.xml`,尤其是`...
对于更复杂的操作,比如使用Java API编程,我们首先需要在Java程序中建立与HBase的连接。这通常涉及导入相关库,初始化HBase的配置,并创建一个HConnection实例。例如: ```java import org.apache.hadoop.hbase....
Java提供了Thread类以及ExecutorService框架来支持多线程编程,或者使用CompletableFuture进行异步处理。 5. **数据存储**:爬取的数据通常需要保存起来,可能是文件系统、数据库(如MySQL、MongoDB)或NoSQL存储...