首先,就要说一下配置问题了。HBase客户端的配置有两种方式,一种是通过配置文件,另一种是通过代码设置。
1、配置文件方式
配置文件名称为hbase-site.xml,该文件必须放置到CLASS_PATH下面才会有效,文件示例如下:
hbase-site.xml
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>hbase.rootdir</name> <value>hdfs://hadoop-master:9000/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.master</name> <value>hdfs://hadoop-master:60000</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>hadoop-master,hadoop-slave01,hadoop-slave02</value> </property> </configuration>
2、通过代码配置方式
Configuration hbaseConfig = HBaseConfiguration.create(); hbaseConfig.setInt("timeout", 120000); hbaseConfig.set("hbase.master", "hdfs://hadoop-master:60000"); hbaseConfig.set("hbase.zookeeper.quorum", "hadoop-master,hadoop-slave01,hadoop-slave02"); hbaseConfig.setInt("hbase.zookeeper.property.clientPort", 2181); hbaseConfig.setInt("hbase.client.retries.number", 1);
3、然后是java代码,都是简单操作,就不多说了哦
TestHBase.java
package com.neohope.hbase.test; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.hbase.*; import org.apache.hadoop.hbase.client.*; import org.apache.hadoop.hbase.util.Bytes; import java.io.IOException; public class TestHBase { /* * 获取Connection */ protected static Configuration hbaseConfig; static { hbaseConfig = HBaseConfiguration.create(); hbaseConfig.setInt("timeout", 120000); hbaseConfig.set("hbase.master", "hdfs://hadoop-master:60000"); hbaseConfig.set("hbase.zookeeper.quorum", "hadoop-master,hadoop-slave01,hadoop-slave02"); hbaseConfig.setInt("hbase.zookeeper.property.clientPort", 2181); hbaseConfig.setInt("hbase.client.retries.number", 1); } /* * 获取Connection */ protected static Connection GetConnection() throws IOException { return ConnectionFactory.createConnection(hbaseConfig); } /* * 获取Admin */ protected static Admin GetAdmin() throws IOException { return GetConnection().getAdmin(); } /* * 创建表 * * @tableName 表名 * * @family 列族名 */ public static void CreateTable(String tableName, String[] family) throws Exception { Admin admin = GetAdmin(); HTableDescriptor desc = new HTableDescriptor(TableName.valueOf(tableName)); for (String aFamily : family) { desc.addFamily(new HColumnDescriptor(aFamily)); } if (admin.tableExists(TableName.valueOf(tableName))) { System.out.println(tableName + " exists!"); } else { admin.createTable(desc); System.out.println(tableName + " is created!"); } } /* * 删除表 * * @tableName 表名 */ public static void DeleteTable(String tableName) throws IOException { Admin admin = GetAdmin(); admin.disableTable( TableName.valueOf(tableName)); admin.deleteTable( TableName.valueOf(tableName)); System.out.println(tableName + " is deleted!"); } /* * 新增或更新多列数据 * * @rowKey rowKey * * @tableName 表名 * * */ public static void PutData( String tableName, String rowKey, String[] columnFamilies, String[] columns, String[] values ) throws IOException { Table table = GetConnection().getTable(TableName.valueOf(tableName)); Put put = new Put(Bytes.toBytes(rowKey)); for (int i=0;i< columnFamilies.length; i++) { put.addColumn(Bytes.toBytes(columnFamilies[i]), Bytes.toBytes(columns[i]), Bytes.toBytes(values[i])); } table.put(put); System.out.println("put data is succeed!"); } /* * 新增或更新一列数据 * * @tableName 表名 * * @rowKey rowKey * * @familyName 列族名 * * @columnName 列名 * * @value 更新后的值 */ public static void PutData(String tableName, String rowKey, String familyName, String columnName, String value) throws IOException { Table table = GetConnection().getTable( TableName.valueOf(tableName)); Put put = new Put(Bytes.toBytes(rowKey)); put.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName), Bytes.toBytes(value)); table.put(put); System.out.println("put data is succeed!"); } /* * 根据rowKey查询 * * @rowKey rowKey * * @tableName 表名 */ public static Result GetData(String tableName, String rowKey) throws IOException { Get get = new Get(Bytes.toBytes(rowKey)); Table table = GetConnection().getTable( TableName.valueOf(tableName)); Result result = table.get(get); if(result.size()>0) { for (Cell cell : result.listCells()) { System.out.println("family:" + Bytes.toString(CellUtil.cloneFamily(cell))); System.out.println("qualifier:" + Bytes.toString(CellUtil.cloneQualifier(cell))); System.out.println("value:" + Bytes.toString(CellUtil.cloneValue(cell))); System.out.println("Timestamp:" + cell.getTimestamp()); System.out.println("-------------------------------------------"); } } return result; } /* * 查询表中的某一列 * * @tableName 表名 * * @rowKey rowKey */ public static void GetDataByColumn(String tableName, String rowKey, String familyName, String columnName) throws IOException { Table table = GetConnection().getTable( TableName.valueOf(tableName)); Get get = new Get(Bytes.toBytes(rowKey)); get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName)); Result result = table.get(get); if(result.size()>0) { for (Cell cell : result.listCells()) { System.out.println("family:" + Bytes.toString(CellUtil.cloneFamily(cell))); System.out .println("qualifier:" + Bytes.toString(CellUtil.cloneQualifier(cell))); System.out.println("value:" + Bytes.toString(CellUtil.cloneValue(cell))); System.out.println("Timestamp:" + cell.getTimestamp()); System.out.println("-------------------------------------------"); } } } /* * 查询某列数据的多个版本 * * @tableName 表名 * * @rowKey rowKey * * @familyName 列族名 * * @columnName 列名 */ public static void GetDataByVersion(String tableName, String rowKey, String familyName, String columnName, int maxVersions) throws IOException { Table table = GetConnection().getTable( TableName.valueOf(tableName)); Get get = new Get(Bytes.toBytes(rowKey)); get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName)); get.setMaxVersions(maxVersions); Result result = table.get(get); for (Cell cell : result.listCells()) { System.out.println("family:" + Bytes.toString(CellUtil.cloneFamily(cell))); System.out.println("qualifier:" + Bytes.toString(CellUtil.cloneQualifier(cell))); System.out.println("value:" + Bytes.toString(CellUtil.cloneValue(cell))); System.out.println("Timestamp:" + cell.getTimestamp()); System.out.println("-------------------------------------------"); } } /* * 遍历表 * * @tableName 表名 */ public static void ScanData(String tableName) throws IOException { Scan scan = new Scan(); ResultScanner rs = null; Table table = GetConnection().getTable( TableName.valueOf(tableName)); try { rs = table.getScanner(scan); for (Result r : rs) { for (Cell cell : r.listCells()) { System.out.println("row:" + Bytes.toString(CellUtil.cloneRow(cell))); System.out.println("family:" + Bytes.toString(CellUtil.cloneFamily(cell))); System.out.println("qualifier:" + Bytes.toString(CellUtil.cloneQualifier(cell))); System.out .println("value:" + Bytes.toString(CellUtil.cloneValue(cell))); System.out.println("timestamp:" + cell.getTimestamp()); System.out.println("-------------------------------------------"); } System.out.println("==========================================="); } } finally { rs.close(); } } /* * 遍历查询hbase表 * * @tableName 表名 * * @startRowKey 起始RowKey * * @stopRowKey 结束RowKey */ public static void ScanDataByRange(String tableName, String startRowKey, String stopRowKey) throws IOException { Scan scan = new Scan(); scan.setStartRow(Bytes.toBytes(startRowKey)); scan.setStopRow(Bytes.toBytes(stopRowKey)); ResultScanner rs = null; Table table = GetConnection().getTable( TableName.valueOf(tableName)); try { rs = table.getScanner(scan); for (Result r : rs) { for (Cell cell : r.listCells()) { System.out.println("row:" + Bytes.toString(CellUtil.cloneRow(cell))); System.out.println("family:" + Bytes.toString(CellUtil.cloneFamily(cell))); System.out.println("qualifier:" + Bytes.toString(CellUtil.cloneQualifier(cell))); System.out .println("value:" + Bytes.toString(CellUtil.cloneValue(cell))); System.out.println("timestamp:" + cell.getTimestamp()); System.out .println("-------------------------------------------"); } } } finally { rs.close(); } } /* * 删除列 * * @tableName 表名 * * @rowKey rowKey * * @familyName 列族名 * * @columnName 列名 */ public static void DeleteColumn(String tableName, String rowKey, String familyName, String columnName) throws IOException { Table table = GetConnection().getTable( TableName.valueOf(tableName)); Delete deleteColumn = new Delete(Bytes.toBytes(rowKey)); deleteColumn.addColumns(Bytes.toBytes(familyName), Bytes.toBytes(columnName)); table.delete(deleteColumn); System.out.println(familyName + ":" + columnName + "is deleted!"); } /* * 删除行 * * @tableName 表名 * * @rowKey rowKey */ public static void DeleteRow(String tableName, String rowKey) throws IOException { Table table = GetConnection().getTable( TableName.valueOf(tableName)); Delete deleteAll = new Delete(Bytes.toBytes(rowKey)); table.delete(deleteAll); System.out.println("row is deleted!"); } public static void main(String[] args) throws Exception { // 设置hadoop native的位置 System.setProperty("hadoop.home.dir","D:\\MyProjects\\HadoopNative\\VS2013\\x86"); //System.setProperty("HBASE_CONF_DIR","D:\\MyProjects\\IDEA14\\TestHBase\\etc\\hbase"); // 创建表 String tableName = "score"; String[] family = { "student", "class", "teacher" }; //CreateTable(tableName, family); // 增加数据 String rowkey01 = "c001_s001"; String[] columnFamilies01 = { "student", "student", "student","class", "class", "class","class","teacher", "teacher" }; String[] columns01 = { "sid", "sname", "ssex","cid","cname", "croom", "cscore","tid", "tname" }; String[] values01 = { "s001", "zhangsan", "male","c001","guoxue", "A3087", "90","t001", "Dr. K"}; //PutData(tableName,rowkey01,columnFamilies01,columns01, values01); String rowkey02 = "c001_s002"; String[] columnFamilies02 = { "student", "student", "student","class", "class", "class","class","teacher", "teacher" }; String[] columns02 = { "sid", "sname", "ssex","cid","cname", "croom", "cscore","tid", "tname" }; String[] values02 = { "s002", "lisi", "male","c001","guoxue", "A3087", "80","t001", "Dr. K"}; //PutData(tableName,rowkey02,columnFamilies02,columns02, values02); String rowkey03 = "c001_s003"; String[] columnFamilies03 = { "student", "student", "student","class", "class", "class","class","teacher", "teacher" }; String[] columns03 = { "sid", "sname", "ssex","cid","cname", "croom", "cscore","tid", "tname" }; String[] values03 = { "s003", "wangwu", "male","c001","guoxue", "A3087", "75","t001", "Dr. K"}; //PutData(tableName,rowkey03,columnFamilies03,columns03, values03); String rowkey04 = "c002_s001"; String[] columnFamilies04 = { "student", "student", "student","class", "class", "class","class","teacher", "teacher" }; String[] columns04 = { "sid", "sname", "ssex","cid","cname", "croom", "cscore","tid", "tname" }; String[] values04 = { "s001", "zhangsan", "male","c002","math", "B508", "90","t002", "Dr. S"}; //PutData(tableName,rowkey04,columnFamilies04,columns04, values04); //查询数据 //GetData(tableName,rowkey04); //GetDataByColumn(tableName,rowkey04,"student","sname"); //新增、更新列 //GetDataByColumn(tableName,rowkey01,"teacher","tname"); //PutData(tableName,rowkey01,"teacher","tname", "Dr. K"); //GetDataByColumn(tableName,rowkey01,"teacher","tname"); //查询多个版本的数据 PutData(tableName,rowkey01,"teacher","tname", "Dr. A"); PutData(tableName,rowkey01,"teacher","tname", "Dr. B"); PutData(tableName, rowkey01,"teacher","tname", "Dr. K"); GetDataByVersion(tableName,rowkey01,"teacher","tname",3); //全表扫描数据 //ScanData(tableName); //按范围扫描数据 //ScanDataByRange(tableName,rowkey01,rowkey03); //删除列 //GetDataByColumn(tableName,rowkey01,"teacher","cscore"); //DeleteColumn(tableName, rowkey01, "teacher", "cscore"); //GetDataByColumn(tableName,rowkey01,"teacher","cscore"); //删除行 //GetData(tableName,rowkey02); //DeleteRow(tableName,rowkey02); //GetData(tableName,rowkey02); // 删除表 //DeleteTable(tableName); } }