habse java api使用操作

上一篇cm5.4和cdh5.4安装(http://my.oschina.net/penngo/blog/517223),本文使用HBase的java客户端api操作Hbase。

需要用到的包可以在/opt/cloudera/parcels/CDH-5.4.7-1.cdh5.4.7.p0.3/jars找到,hbase版本1.0.0

HbaseTest3.java代码例子

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
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.TableName;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
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.client.Table;
import org.apache.hadoop.hbase.filter.BinaryPrefixComparator;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.RowFilter;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.filter.SubstringComparator;
import org.apache.hadoop.hbase.filter.ValueFilter;
import org.apache.hadoop.hbase.util.Bytes;

public class HbaseTest3 {
	private Connection connection = null;

	public HbaseTest3() {

	}

	public void createTable(String tableName) {
		try {
			System.out.println("start create table ......");
			Connection con = this.getConnection();
			HBaseAdmin hBaseAdmin = (HBaseAdmin) con.getAdmin();
			if (hBaseAdmin.tableExists(tableName)) {// 如果存在要创建的表,那么先删除,再创建
				hBaseAdmin.disableTable(tableName);
				hBaseAdmin.deleteTable(tableName);
				System.out.println(tableName + " is exist,detele....");
			}

			HTableDescriptor tableDescriptor = new HTableDescriptor(
					TableName.valueOf(tableName));
			tableDescriptor.addFamily(new HColumnDescriptor("column1"));
			tableDescriptor.addFamily(new HColumnDescriptor("column2"));
			tableDescriptor.addFamily(new HColumnDescriptor("column3"));
			hBaseAdmin.createTable(tableDescriptor);
			System.out.println("create table success......");
		} catch (MasterNotRunningException e) {
			e.printStackTrace();
		} catch (ZooKeeperConnectionException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	public void insertData(String tableName) {
		System.out.println("start insert data ......");

		try {
			Connection con = this.getConnection();
			Table table = con.getTable(TableName.valueOf(tableName));
			// HTablePool pool = new HTablePool(configuration, 1000);
			// HTable table = (HTable) pool.getTable(tableName);
			Put put = new Put("112233bbbcccc".getBytes());// 一个PUT代表一行数据,再NEW一个PUT表示第二行数据,每行一个唯一的ROWKEY,此处rowkey为put构造方法中传入的值
			put.addColumn("column1".getBytes(), null, "aaa2".getBytes());// 本行数据的第一列
			put.addColumn("column2".getBytes(), null, "bbb2".getBytes());// 本行数据的第三列
			put.addColumn("column3".getBytes(), null, "ccc2".getBytes());// 本行数据的第三列
			table.put(put);
			// pool.getTable(tableName).put(put);
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println("end insert data ......");
	}

	public void queryAll(String tableName) {
		// HTablePool pool = new HTablePool(configuration, 1000);
		// HTable table = (HTable) pool.getTable(tableName);
		try {
			Connection con = this.getConnection();
			Table table = con.getTable(TableName.valueOf(tableName));
			ResultScanner rs = table.getScanner(new Scan());
			for (Result r : rs) {
				System.out.println("获得到rowkey:" + new String(r.getRow()));
				for (KeyValue keyValue : r.raw()) {
					System.out.println("列:" + new String(keyValue.getFamily())
							+ "====值:" + new String(keyValue.getValue()));
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void queryByCondition1(String tableName) {

		try {
			Connection con = this.getConnection();
			Table table = con.getTable(TableName.valueOf(tableName));
			Get scan = new Get("112233bbbcccc".getBytes());// 根据rowkey查询
			Result r = table.get(scan);
			System.out.println("获得到rowkey:" + new String(r.getRow()));
			for (KeyValue keyValue : r.raw()) {
				System.out.println("列:" + new String(keyValue.getFamily())
						+ "====值:" + new String(keyValue.getValue()));
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void queryByCondition2(String tableName) {

		try {
			Connection con = this.getConnection();
			Table table = con.getTable(TableName.valueOf(tableName));
			Filter filter = new SingleColumnValueFilter(
					Bytes.toBytes("column1"), null, CompareOp.EQUAL,
					Bytes.toBytes("aaa2")); // 当列column1的值为aaa时进行查询
			Scan s = new Scan();
			s.setFilter(filter);
			ResultScanner rs = table.getScanner(s);
			for (Result r : rs) {
				System.out.println("获得到rowkey:" + new String(r.getRow()));
				for (KeyValue keyValue : r.raw()) {
					System.out.println("列:" + new String(keyValue.getFamily())
							+ "====值:" + new String(keyValue.getValue()));
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public void queryByCondition3(String tableName) {
		try {
			Connection con = this.getConnection();
			Table table = con.getTable(TableName.valueOf(tableName));
//			提取rowkey以cccc结尾数据
//			Filter filter1 = new RowFilter(CompareOp.EQUAL,new RegexStringComparator(".*cccc$"));
//
//			提取rowkey以包含bbb的数据
//			Filter filter1 = new RowFilter(CompareOp.EQUAL,new SubstringComparator("bbb"));

//			提取rowkey以123开头的数据
			Filter filter1 = new RowFilter(CompareOp.EQUAL,new BinaryPrefixComparator("1122".getBytes()));

//			Filter filter1 = new RowFilter(CompareOp.EQUAL,
//					new BinaryComparator(Bytes.toBytes(rowkey)));

			Scan scan = new Scan();
			scan.setFilter(filter1);

			ResultScanner rs = table.getScanner(scan);
			for (Result r : rs) {
				System.out.println("获得到rowkey:" + new String(r.getRow()));
				for (Cell cell : r.rawCells()) {
					System.out.println("列:"
							+ new String(CellUtil.cloneFamily(cell)) + "====值:"
							+ new String(CellUtil.cloneValue(cell)));
				}
			}
			rs.close();

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public void queryByCondition4(String tableName) {
		try {
			Connection con = this.getConnection();
			Table table = con.getTable(TableName.valueOf(tableName));
			Filter filter1 = new ValueFilter(CompareOp.EQUAL,
					new SubstringComparator("aaa2"));
			Scan scan = new Scan();
			scan.setFilter(filter1);

			ResultScanner rs = table.getScanner(scan);
			for (Result r : rs) {
				System.out.println("获得到rowkey:" + new String(r.getRow()));
				for (Cell cell : r.rawCells()) {
					System.out.println("列:"
							+ new String(CellUtil.cloneFamily(cell)) + "====值:"
							+ new String(CellUtil.cloneValue(cell)));
				}
			}
			rs.close();

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public void close() throws IOException {
		if (connection != null) {
			connection.close();
		}
	}

	public Connection getConnection() throws IOException {
		Configuration configuration = HBaseConfiguration.create();
		configuration.set("hbase.zookeeper.property.clientPort", "2181");
		configuration.set("hbase.zookeeper.quorum", "192.168.17.108");
		if (connection == null) {
			connection = ConnectionFactory.createConnection(configuration);
		}
		return connection;
	}

	public static void main(String[] args) {
		HbaseTest3 hbaseTest = new HbaseTest3();
		try {
			String tableName = "test1";
			 hbaseTest.createTable("test1");
			 hbaseTest.insertData("test1");
			 hbaseTest.queryAll("test1");
			// hbaseTest.queryByCondition1(tableName);
//			 hbaseTest.queryByCondition2(tableName);
//			hbaseTest.queryByCondition3(tableName);
//			hbaseTest.queryByCondition4(tableName);
			hbaseTest.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

运行结果:

时间: 2024-10-11 05:21:27

habse java api使用操作的相关文章

HDFS Java API 常用操作

package com.luogankun.hadoop.hdfs.api; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.

客户端用java api 远程操作HDFS以及远程提交MR任务(源码和异常处理)

两个类,一个HDFS文件操作类,一个是wordcount 词数统计类,都是从网上看来的.上代码: package mapreduce; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.BlockLocation; import org.apac

ElasticSearch笔记整理(三):Java API使用与ES中文分词

[TOC] pom.xml 使用maven工程构建ES Java API的测试项目,其用到的依赖如下: <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>2.3.0</version> </dependency> <dependency> <grou

【Hbase学习之三】Hbase Java API

环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-2.6.5 hbase-0.98.12.1-hadoop2 建立一个java工程 导入hadoop 相关jar导入hbase相关jar 使用客户端(java API)操作hbase 示例一 package hbase; import java.text.SimpleDateFormat; import java.util.ArrayList;

Java API操作HDFS

HDFS是存储数据的分布式文件系统,对HDFS的操作,就是对文件系统的操作,除了用HDFS的shell命令对文件系统进行操作,我们也可以利用Java API对文件系统进行操作,比如文件的创建.删除.修改权限等等,还有文件夹的创建.删除.重命名等等. 使用Java API对文件系统进行操作主要涉及以下几个类: 1.Configuration类:该类的对象封装了客户端或者服务端的配置. 2.FileSystem类:该类的对象是一个文件系统对象,可以利用该对象的一些方法来对文件进行操作,FileSys

Hadoop读书笔记(三)Java API操作HDFS

Hadoop读书笔记(一)Hadoop介绍:http://blog.csdn.net/caicongyang/article/details/39898629 Hadoop读书笔记(二)HDFS的shell操作:http://blog.csdn.net/caicongyang/article/details/41253927 JAVA URL 操作HDFS OperateByURL.java package hdfs; import java.io.InputStream; import jav

HDFS基础和java api操作

1. 概括 适合一次写入多次查询情况,不支持并发写情况 通过hadoop shell 上传的文件存放在DataNode的block中,通过linux shell只能看见block,看不见文件(HDFS将客户端的大文件存放在很多节点的数据块中,Block本质上是一个逻辑概念,它是hdfs读写数据的基本单位) HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间 2. fs 可以使用hdfs shell操作hdfs,常用 fs命令如下: eg: hadoop fs -cat fi

Java API操作ZooKeeper

创建会话 1 package org.zln.zk; 2 3 import org.apache.zookeeper.WatchedEvent; 4 import org.apache.zookeeper.Watcher; 5 import org.apache.zookeeper.ZooKeeper; 6 7 import java.io.IOException; 8 9 /** 10 * Created by sherry on 16/8/27. 11 */ 12 public class

Java API操作HA方式下的Hadoop

通过java api连接Hadoop集群时,如果集群支持HA方式,那么可以通过如下方式设置来自动切换到活动的master节点上.其中,ClusterName 是可以任意指定的,跟集群配置无关,dfs.ha.namenodes.ClusterName也可以任意指定名称,有几个master就写几个,后面根据相应的设置添加master节点地址即可. private static String ClusterName = "nsstargate"; private static final S