6.HBaseAPI操作

	@Test
	public void testCreateTable() throws Exception {

		//1. 去读取加载classpath下的hbase-site.xml配置文件
		Configuration conf = HBaseConfiguration.create();
		conf.set("hbase.zookeeper.quorum", "192.168.0.208:2181,192.168.0.209:2181,192.168.0.210:2181");

		//2. 拿到一个hbase的ddl客户端----建表、删表、禁用表、启用表。。。。。。。
		HBaseAdmin hBaseAdmin = new HBaseAdmin(conf);

		//3.创建表
		TableName tableName = TableName.valueOf("user_info");
		HTableDescriptor tableDesc = new HTableDescriptor(tableName);

		//4.创建列
		HColumnDescriptor family = new HColumnDescriptor("base_info");
		family.setMaxVersions(3);//设置列族最多存几个版本

		tableDesc.addFamily(family);

		hBaseAdmin.createTable(tableDesc);

		hBaseAdmin.close();

	}
/**
	 * 插入数据
	 * 
	 * @throws IOException
	 */
	@Test
	public void testPut() throws IOException {

		Configuration conf = HBaseConfiguration.create();
		conf.set("hbase.zookeeper.quorum", "hdp-node01:2181,hdp-node02:2181,hdp-node03:2181");

		//1. 拿一个hbase的DML客户端,针对一个指定的表
		HTable userInfo = new HTable(conf, "user_info");

		//2. 将要插入的kv数据封装到一个put对象中
		Put put = new Put(Bytes.toBytes("rk-0001"));//行健
		put.add(Bytes.toBytes("base_info"), Bytes.toBytes("username"), Bytes.toBytes("刘亦菲"));// 列族 字段 字段参数
		put.add(Bytes.toBytes("base_info"), Bytes.toBytes("boyfriend"), Bytes.toBytes("任我行"));

		Put put2 = new Put(Bytes.toBytes("rk-0002"));
		put2.add(Bytes.toBytes("base_info"), Bytes.toBytes("username"), Bytes.toBytes("汤唯"));
		put2.add(Bytes.toBytes("base_info"), Bytes.toBytes("boyfriend"), Bytes.toBytes("任我行"));

		Put put3 = new Put(Bytes.toBytes("rk-0003"));
		put3.add(Bytes.toBytes("base_info"), Bytes.toBytes("username"), Bytes.toBytes("杨颖"));
		put3.add(Bytes.toBytes("base_info"), Bytes.toBytes("boyfriend"), Bytes.toBytes("任我行"));

		ArrayList<Put> puts = new ArrayList<Put>();

		puts.add(put);
		puts.add(put2);
		puts.add(put3);

		userInfo.put(puts);

		userInfo.close();

	}
/**
 * 删除表中的数据
 * 
 * @throws Exception
 */
@Test
public void testDelete() throws Exception {
  Configuration conf = HBaseConfiguration.create();
  conf.set("hbase.zookeeper.quorum", "192.168.0.208:2181,192.168.0.209:2181,192.168.0.210:2181");
  // 拿一个hbase的DML客户端,针对一个指定的表
  HTable userInfo = new HTable(conf, "user_info");
  // 如果delete中不指定要删除的列,则会删除整行
  Delete delete = new Delete(Bytes.toBytes("rk-0003"));
  delete.deleteColumn(Bytes.toBytes("base_info"), Bytes.toBytes("boyfriend"));
  userInfo.delete(delete);
  userInfo.close();
}
@Test
public void testUpdate() throws Exception {
  Configuration conf = HBaseConfiguration.create();
  conf.set("hbase.zookeeper.quorum", "192.168.0.208:2181,192.168.0.209:2181,192.168.0.210:2181");
    // 拿一个hbase的DML客户端,针对一个指定的表
    HTable userInfo = new HTable(conf, "user_info");
    Put put = new Put(Bytes.toBytes("rk-0003"));
    put.add(Bytes.toBytes("base_info"), Bytes.toBytes("username"), Bytes.toBytes("我的最爱"));
    userInfo.put(put);
    userInfo.close();
}
/**
 * 查询一行中的数据
 * 
 * @throws Exception
 */
@Test
public void testGet() throws Exception {
    Configuration conf = HBaseConfiguration.create();
    conf.set("hbase.zookeeper.quorum", "192.168.0.208:2181,192.168.0.209:2181,192.168.0.210:2181");
    // 拿一个hbase的DML客户端,针对一个指定的表
    HTable userInfo = new HTable(conf, "user_info");
    // 根据行键构造一个get参数对象,如果get对象中不指定具体的列,则会返回整行
    Get get = new Get(Bytes.toBytes("rk-0002"));
    // 指定返回base_info中的所有列(kv)
    get.addFamily(Bytes.toBytes("base_info"));
    Result result = userInfo.get(get);
    // 从结果集中取一个指定的列
    // byte[] boyfriendBytes = result.getValue("base_info".getBytes(),
    // "boyfriend".getBytes());
    //
    // String boyfriend = new String(boyfriendBytes);
    // System.out.println(boyfriend);
    /**
     * 遍历result中所有的列
     */
    List<KeyValue> kvs = result.list();
    for (KeyValue kv : kvs) {
        System.out.println(Bytes.toString(kv.getFamily())); // 列族
        System.out.println(Bytes.toString(kv.getQualifier())); // 列
        System.out.println(Bytes.toString(kv.getValue())); // 值
    }
    userInfo.close();
}
/**
	 * 范围查询,可以查询指定行键范围内的所有数据
	 * 
	 * @throws IOException
	 */
	@Test
	public void testScan() throws IOException {

		Configuration conf = HBaseConfiguration.create();
		conf.set("hbase.zookeeper.quorum", "192.168.0.208:2181,192.168.0.209:2181,192.168.0.210:2181");

		// 拿一个hbase的DML客户端,针对一个指定的表
		HTable userInfo = new HTable(conf, "user_info");

		//行键范围中,含头不含尾
		Scan scan = new Scan(Bytes.toBytes("rk-0001"), Bytes.toBytes("rk-0003"+"\0x00"));
		ResultScanner scanner = userInfo.getScanner(scan);

		//用迭代的方式来遍历scanner
/*		Iterator<Result> iterator = scanner.iterator();
		while(iterator.hasNext()){
			Result result = iterator.next();

		}*/

		//用增强for循环遍历scanner
		for (Result result : scanner) {

			List<KeyValue> kvs = result.list();
			for (KeyValue kv : kvs) {

				System.out.println(Bytes.toString(kv.getFamily())); // 列族
				System.out.println(Bytes.toString(kv.getQualifier())); // 列
				System.out.println(Bytes.toString(kv.getValue())); // 值

			}

		}

		userInfo.close();

	}
时间: 2024-10-21 13:29:22

6.HBaseAPI操作的相关文章

HBASE之shell操作和Java访问

对数据库HBASE的操作有shell端和java API两种方式. 在此之前要先说一下HBASE的结构及其数据存储结构: HBASE是基于HDFS的,是一种NoSQL的数据库.它的数据模型如下所示: Row Key Timestamp Column Family URI Parser r1 t3 url=http://www.taobao.com title=天天特价 t2 host=taobao.com   t1     r2 t5 url=http://www.alibaba.com con

如何用一个app操作另外一个app.比如微信群控那样的

如何实现一个app.控制另外的app,比如市面上群控微信的,是用测试工具的原理?还是什么模拟点击的原理? 如何用一个app操作另外一个app.比如微信群控那样的 >> android 这个答案描述的挺清楚的:http://www.goodpm.net/postreply/android/1010000007186891/如何用一个app操作另外一个app比如微信群控那样的.html

ELK 学习笔记之 elasticsearch Mget操作

Mget操作: 查询多个文档: curl -XGET 'http://192.168.1.151:9200/_mget' -d '{"docs": [{"_index": "library","_type": "books", "_id": "1"}, {"_index": "library","_type"

条件、循环、函数定义、字符串操作练习

注意标准库的两种导入与使用方式,建议大家采用<库名>.<函数名>的方式. 对前面的代码进行优化,用for,while,if,def实现: 用循环画五角星 1 import turtle 2 3 turtle.fillcolor("red") 4 turtle.begin_fill() 5 for i in range(5): 6 turtle.forward(100) 7 turtle.right(144) 8 turtle.end_fill() 用循环画同心圆

Python 文件操作

操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 文件句柄 = open('文件路径', '模式') 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作. 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读: 不存在则创建:存在则只追加内容:] "+" 表示可以同时读写某个文件 r+,可读写文件.[可读:可写:可追加] w+,写读 a+,

Python操作数据库(mysql redis)

一.python操作mysql数据库: 数据库信息:(例如211.149.218.16   szz  123456) 操作mysql用pymysql模块 #操作其他数据库,就安装相应的模块 import  pymysql ip='211.149.218.16' port=3306 passwd='123456' user='root' db='szz' conn=pymysql.connect(host=ip,user=user,port=port,passwd=passwd,db=db,cha

数据库权限分配操作

1.远程登录mysqlmysql -h ip -u root -p 密码2.创建用户格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码";例1:增加一个test1用户,密码为123456,可以在任何主机上登录,并对所有数据库有查询,增加,修改和删除的功能.需要在mysql的root用户下进行mysql>grant select,insert,update,delete on *.* to [email protected]&quo

Django(三) ORM 数据库操作

比较有用 转自 http://blog.csdn.net/fgf00/article/details/53678205 一.DjangoORM 创建基本类型及生成数据库表结构 1.简介 2.创建数据库 表结构 二.Django ORM基本增删改查 1.表数据增删改查 2.表结构修改 三.Django ORM 字段类型 1.字段类型介绍 2.字段参数介绍 3.Django ORM 外键操作 一.DjangoORM 创建基本类型及生成数据库表结构 1.简介 ORM:关系对象映射.定义一个类自动生成数

python操作mysql ------- SqlAchemy正传

本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同. 下载安装 pip3 install pymysql 使用操作 1.执行SQL #!/usr/bin/env python # -*- coding:utf-8 -*- import pymysql # 创建连接 conn = pymysql.connect(host='127.0.0.1