博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HBase--通过Java API与HBase交互(增删改)
阅读量:4160 次
发布时间:2019-05-26

本文共 11112 字,大约阅读时间需要 37 分钟。

import java.io.IOException; 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.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; /** * 通过Java API与HBase交互 *  * @author liuyazhuang * */public class Hbase {	// 声明静态配置	static Configuration conf =  new Configuration();;	static {	 System.setProperty("hadoop.home.dir", "E:\\software\\bigdate\\hadoop-2.6.0-cdh5.15.0\\hadoop-2.6.0-cdh5.15.0");        conf.set("fs.defaultFS", "hdfs://wang:9000");        conf.set("zookeeper.znode.parent", "/hbase");        conf.set("hbase.zookeeper.quorum", "wang");        conf.set("hbase.zookeeper.property.clientPort", "2181");	} 	/*	 * 创建表	 * 	 * @tableName 表名	 * 	 * @family 列族列表	 */	public static void creatTable(String tableName, String[] family) throws Exception {		HBaseAdmin admin = new HBaseAdmin(conf);		HTableDescriptor desc = new HTableDescriptor(tableName);		for (int i = 0; i < family.length; i++) {			desc.addFamily(new HColumnDescriptor(family[i]));		}		if (admin.tableExists(tableName)) {			System.out.println("table Exists!");			System.exit(0);		} else {			admin.createTable(desc);			System.out.println("create table Success!");		}	} 	/*	 * 为表添加数据(适合知道有多少列族的固定表)	 * 	 * @rowKey rowKey	 * 	 * @tableName 表名	 * 	 * @column1 第一个列族列表	 * 	 * @value1 第一个列的值的列表	 * 	 * @column2 第二个列族列表	 * 	 * @value2 第二个列的值的列表	 */	public static void addData(String rowKey, String tableName, String[] column1, String[] value1, String[] column2,			String[] value2) throws IOException {		Put put = new Put(Bytes.toBytes(rowKey));// 设置rowkey		HTable table = new HTable(conf, Bytes.toBytes(tableName));// HTabel负责跟记录相关的操作如增删改查等//																	// 获取表		HColumnDescriptor[] columnFamilies = table.getTableDescriptor() // 获取所有的列族				.getColumnFamilies(); 		for (int i = 0; i < columnFamilies.length; i++) {			String familyName = columnFamilies[i].getNameAsString(); // 获取列族名			if (familyName.equals("article")) { // article列族put数据				for (int j = 0; j < column1.length; j++) {					put.add(Bytes.toBytes(familyName), Bytes.toBytes(column1[j]), Bytes.toBytes(value1[j]));				}			}			if (familyName.equals("author")) { // author列族put数据				for (int j = 0; j < column2.length; j++) {					put.add(Bytes.toBytes(familyName), Bytes.toBytes(column2[j]), Bytes.toBytes(value2[j]));				}			}		}		table.put(put);		System.out.println("add data Success!");	} 	/*	 * 根据rwokey查询	 * 	 * @rowKey rowKey	 * 	 * @tableName 表名	 */	public static Result getResult(String tableName, String rowKey) throws IOException {		Get get = new Get(Bytes.toBytes(rowKey));		HTable table = new HTable(conf, Bytes.toBytes(tableName));// 获取表		Result result = table.get(get);		for (KeyValue kv : result.list()) {			System.out.println("family:" + Bytes.toString(kv.getFamily()));			System.out.println("qualifier:" + Bytes.toString(kv.getQualifier()));			System.out.println("value:" + Bytes.toString(kv.getValue()));			System.out.println("Timestamp:" + kv.getTimestamp());			System.out.println("-------------------------------------------");		}		return result;	} 	/*	 * 遍历查询hbase表	 * 	 * @tableName 表名	 */	public static void getResultScann(String tableName) throws IOException {		Scan scan = new Scan();		ResultScanner rs = null;		HTable table = new HTable(conf, Bytes.toBytes(tableName));		try {			rs = table.getScanner(scan);			for (Result r : rs) {				for (KeyValue kv : r.list()) {					System.out.println("row:" + Bytes.toString(kv.getRow()));					System.out.println("family:" + Bytes.toString(kv.getFamily()));					System.out.println("qualifier:" + Bytes.toString(kv.getQualifier()));					System.out.println("value:" + Bytes.toString(kv.getValue()));					System.out.println("timestamp:" + kv.getTimestamp());					System.out.println("-------------------------------------------");				}			}		} finally {			rs.close();		}	} 	/*	 * 遍历查询hbase表	 * 	 * @tableName 表名	 */	public static void getResultScann(String tableName, String start_rowkey, String stop_rowkey) throws IOException {		Scan scan = new Scan();		scan.setStartRow(Bytes.toBytes(start_rowkey));		scan.setStopRow(Bytes.toBytes(stop_rowkey));		ResultScanner rs = null;		HTable table = new HTable(conf, Bytes.toBytes(tableName));		try {			rs = table.getScanner(scan);			for (Result r : rs) {				for (KeyValue kv : r.list()) {					System.out.println("row:" + Bytes.toString(kv.getRow()));					System.out.println("family:" + Bytes.toString(kv.getFamily()));					System.out.println("qualifier:" + Bytes.toString(kv.getQualifier()));					System.out.println("value:" + Bytes.toString(kv.getValue()));					System.out.println("timestamp:" + kv.getTimestamp());					System.out.println("-------------------------------------------");				}			}		} finally {			rs.close();		}	} 	/*	 * 查询表中的某一列	 * 	 * @tableName 表名	 * 	 * @rowKey rowKey	 */	public static void getResultByColumn(String tableName, String rowKey, String familyName, String columnName)			throws IOException {		HTable table = new HTable(conf, Bytes.toBytes(tableName));		Get get = new Get(Bytes.toBytes(rowKey));		get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName)); // 获取指定列族和列修饰符对应的列		Result result = table.get(get);		for (KeyValue kv : result.list()) {			System.out.println("family:" + Bytes.toString(kv.getFamily()));			System.out.println("qualifier:" + Bytes.toString(kv.getQualifier()));			System.out.println("value:" + Bytes.toString(kv.getValue()));			System.out.println("Timestamp:" + kv.getTimestamp());			System.out.println("-------------------------------------------");		}	} 	/*	 * 更新表中的某一列	 * 	 * @tableName 表名	 * 	 * @rowKey rowKey	 * 	 * @familyName 列族名	 * 	 * @columnName 列名	 * 	 * @value 更新后的值	 */	public static void updateTable(String tableName, String rowKey, String familyName, String columnName, String value)			throws IOException {		HTable table = new HTable(conf, Bytes.toBytes(tableName));		Put put = new Put(Bytes.toBytes(rowKey));		put.add(Bytes.toBytes(familyName), Bytes.toBytes(columnName), Bytes.toBytes(value));		table.put(put);		System.out.println("update table Success!");	} 	/*	 * 查询某列数据的多个版本	 * 	 * @tableName 表名	 * 	 * @rowKey rowKey	 * 	 * @familyName 列族名	 * 	 * @columnName 列名	 */	public static void getResultByVersion(String tableName, String rowKey, String familyName, String columnName)			throws IOException {		HTable table = new HTable(conf, Bytes.toBytes(tableName));		Get get = new Get(Bytes.toBytes(rowKey));		get.addColumn(Bytes.toBytes(familyName), Bytes.toBytes(columnName));		get.setMaxVersions(5);		Result result = table.get(get);		for (KeyValue kv : result.list()) {			System.out.println("family:" + Bytes.toString(kv.getFamily()));			System.out.println("qualifier:" + Bytes.toString(kv.getQualifier()));			System.out.println("value:" + Bytes.toString(kv.getValue()));			System.out.println("Timestamp:" + kv.getTimestamp());			System.out.println("-------------------------------------------");		}		/*		 * List
results = table.get(get).list(); Iterator
it = * results.iterator(); while (it.hasNext()) { * System.out.println(it.next().toString()); } */ } /* * 删除指定的列 * * @tableName 表名 * * @rowKey rowKey * * @familyName 列族名 * * @columnName 列名 */ public static void deleteColumn(String tableName, String rowKey, String falilyName, String columnName) throws IOException { HTable table = new HTable(conf, Bytes.toBytes(tableName)); Delete deleteColumn = new Delete(Bytes.toBytes(rowKey)); deleteColumn.deleteColumns(Bytes.toBytes(falilyName), Bytes.toBytes(columnName)); table.delete(deleteColumn); System.out.println(falilyName + ":" + columnName + "is deleted!"); } /* * 删除指定的列 * * @tableName 表名 * * @rowKey rowKey */ public static void deleteAllColumn(String tableName, String rowKey) throws IOException { HTable table = new HTable(conf, Bytes.toBytes(tableName)); Delete deleteAll = new Delete(Bytes.toBytes(rowKey)); table.delete(deleteAll); System.out.println("all columns are deleted!"); } //删除指定值,uid为rowkey和列,attends为列的value public static void removeAttends(String uid, String attends) throws IOException { String tablename = "ns_weibo:relation"; String rowkey = uid; HTable table = new HTable(conf, Bytes.toBytes(tablename)); Delete deleteColumn = new Delete(Bytes.toBytes(rowkey)); //删除fans里面的数据 deleteColumn.deleteColumns(Bytes.toBytes("fans"), Bytes.toBytes(attends)); table.delete(deleteColumn); //获取attends里面,值为需要删除的那个列的时间戳,进行删除 Get get = new Get(Bytes.toBytes(rowkey)); get.addColumn(Bytes.toBytes("attends"), Bytes.toBytes(uid)); get.setMaxVersions(5); Result result = table.get(get); for (KeyValue kv : result.list()) { //判断同一个rowkey下,同一个列族下的多个列中是否有和参数相同的,有则取其时间戳 if( Bytes.toString(kv.getValue()) .equals(attends)){ long timestamp = kv.getTimestamp(); System.out.println("timestamp"+timestamp); deleteColumn.deleteColumns(Bytes.toBytes("attends"),kv.getQualifier(), timestamp); table.delete(deleteColumn); } } /* * 删除表 * * @tableName 表名 */ public static void deleteTable(String tableName) throws IOException { HBaseAdmin admin = new HBaseAdmin(conf); admin.disableTable(tableName); admin.deleteTable(tableName); System.out.println(tableName + "is deleted!"); } public static void main(String[] args) throws Exception { // 创建表 String tableName = "blog2"; String[] family = { "article", "author" }; // creatTable(tableName, family); // 为表添加数据 String[] column1 = { "title", "content", "tag" }; String[] value1 = { "Head First HBase", "HBase is the Hadoop database. Use it when you need random, realtime read/write access to your Big Data.", "Hadoop,HBase,NoSQL" }; String[] column2 = { "name", "nickname" }; String[] value2 = { "nicholas", "lee" }; addData("rowkey1", "blog2", column1, value1, column2, value2); addData("rowkey2", "blog2", column1, value1, column2, value2); addData("rowkey3", "blog2", column1, value1, column2, value2); // 遍历查询 getResultScann("blog2", "rowkey4", "rowkey5"); // 根据row key范围遍历查询 getResultScann("blog2", "rowkey4", "rowkey5"); // 查询 getResult("blog2", "rowkey1"); // 查询某一列的值 getResultByColumn("blog2", "rowkey1", "author", "name"); // 更新列 updateTable("blog2", "rowkey1", "author", "name", "bin"); // 查询某一列的值 getResultByColumn("blog2", "rowkey1", "author", "name"); // 查询某列的多版本 getResultByVersion("blog2", "rowkey1", "author", "name"); // 删除一列 deleteColumn("blog2", "rowkey1", "author", "nickname"); // 删除所有列 deleteAllColumn("blog2", "rowkey1"); // 删除表 deleteTable("blog2"); //删除指定值 removeAttends("1001", "1002"); }}

 

转载地址:http://zgjxi.baihongyu.com/

你可能感兴趣的文章
MongoDB存储引擎
查看>>
MongoDB索引说明及慢查询优化
查看>>
MongoDB可复制集架构介绍以及安装
查看>>
MongoDB分片集群介绍以及安装
查看>>
倾斜数据之加载——SuperMap iDesktop
查看>>
倾斜数据之合并根节点——SuperMap iDesktop
查看>>
SuperMap iClient3D for WebGL教程(Entity)- RectangleGraphics
查看>>
iClient对接属性汇总分析
查看>>
iClient对接区域汇总分析
查看>>
三维分析之日照分析
查看>>
三维分析之剖面分析
查看>>
如何输出一幅要素齐全的地图
查看>>
三维分析之填挖方分析
查看>>
场景碰撞检测
查看>>
来看室内外一体化导航,体验AR+GIS,酷不酷?
查看>>
找到最近路线之最终路径分析
查看>>
找到最近路线之网络数据集
查看>>
SuperMap iClient3D for WebGL教程(空间分析)- 坡度坡向分析
查看>>
iClient 对接千万级数据展示
查看>>
SuperMap iClient3D for WebGL教程- 淹没分析
查看>>