您的位置:首页 > 编程语言 > Java开发

基于Java操作HBase数据库

2012-01-24 21:19 405 查看
参考资料:http://www.linezing.com/blog/?p=713

代码如下:

package com.yuxipacific;

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 HBase {

private static Configuration conf = null;

static {
conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "slave");
conf.set("hbase.zookeeper.property.clientPort", "2222");
}

public static void main(String[] args) throws IOException {

System.out.println("-------------------------------------------------");
selectRow("xyz", "100");
System.out.println("-------------------------------------------------");
writeRow("xyz", "cf1", "val", "500", "test_data");
System.out.println("-------------------------------------------------");
scaner("xyz");
}

public static void createTable(String tablename, String[] cfs) throws IOException {
HBaseAdmin admin = new HBaseAdmin(conf);
if (admin.tableExists(tablename)) {
System.out.println("table already exist.");
}
else {
HTableDescriptor tableDesc = new HTableDescriptor(tablename);
for (int i = 0; i < cfs.length; i++) {
tableDesc.addFamily(new HColumnDescriptor(cfs[i]));
}
admin.createTable(tableDesc);
System.out.println("create table ok.");
}
}

public static void deleteTable(String tablename) throws IOException {
try {
HBaseAdmin admin = new HBaseAdmin(conf);
admin.disableTable(tablename);
admin.deleteTable(tablename);
System.out.println("delete table ok.");
} catch (MasterNotRunningException e) {
e.printStackTrace();
} catch (ZooKeeperConnectionException e) {
e.printStackTrace();
}
}

public static void writeRow(String tablename, String family, String qualifier, String rowKey, String value) {
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);
} catch (IOException e) {
e.printStackTrace();
}
}

public static void deleteRow(String tablename, String rowkey) throws IOException {
HTable table = new HTable(conf, tablename);
List<Delete> list = new ArrayList<Delete>();
Delete delete = new Delete(rowkey.getBytes());
list.add(delete);
table.delete(list);
System.out.println("delete row ok.");
}

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()));
}
}

public static void scaner(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();
}
}
}

假设已经整合了Hive和Hbase:/article/8219918.html

如果在这里插入新的数据,我们完全可以通过Hive把记录都查询出来:/article/8219923.html

package com.yuxipacific;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class Hive {

public static void main(String[] args) throws Exception {

Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver");
String querySQL="SELECT * FROM hbase_table_1";

Connection con = DriverManager.getConnection("jdbc:hive://192.168.11.124:10000/default", "", "");
Statement stmt = con.createStatement();
ResultSet res = stmt.executeQuery(querySQL);

while (res.next()) {
System.out.println("Result: key:"+res.getString(1) +"  –>  value:" +res.getString(2));
}
}
}
更多Java操作代码,参阅:https://cwiki.apache.org/confluence/display/Hive/HiveClient

其他资料:

/article/9054831.html

http://qa.taobao.com/?p=13894

http://www.javabloger.com/article/apache-hbase-shell-and-java-api-html.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: