Table of Contents

Java 版的

Hbase 工具类,配置 zookeeper 的地址

建表操作

修改表结构

列出所有表

删表

写表

根据 rowKey 删数据

查表,所有数据

根据 rowKey 查数据

Scala 版的

Hbase 工具类

列出所有表

建表

查看表结构

删表

写数据

扫描整个表

根据 rowKey 查数据

根据 rowKey 删数据

查询所有记录数 count*

完整代码


Java 版的

Hbase 工具类,配置 zookeeper 的地址

public class HbaseUtil {public  static Configuration getHbaseConfig() {Configuration config = HBaseConfiguration.create();// 显式配置 hbase zookeeper 地址config.set("hbase.zookeeper.quorum", "192.168.78.135");
//        config.set("hbase.table.sanity.checks", "false");// hdfs 配置和 hbase 配置 (hbase-site.xml, core-site.xml)
//        config.addResource(new Path(CommUtils.getBasicPath() + "/config/hbase-site.xml"));
//        config.addResource(new Path(CommUtils.getBasicPath() + "/config/core-site.xml"));return config;}
}

建表操作

private static void createSchemaTables(Admin admin) throws IOException {// 设置 table nameHTableDescriptor table = new HTableDescriptor(TableName.valueOf(TABLE_NAME));// 设置 列族,压缩table.addFamily(new HColumnDescriptor(CF_DEFAULT).setCompressionType(Compression.Algorithm.NONE));// 预设 region 数量 和 region 算法table.setRegionReplication(2);table.setRegionSplitPolicyClassName(RegionSplitter.UniformSplit.class.getName());System.out.print("Creating table Start");// 如果表存在,先 disable 表,在 delete 表if (admin.tableExists(table.getTableName())) {admin.disableTable(table.getTableName());admin.deleteTable(table.getTableName());}// 实际的创建表函数admin.createTable(table);System.out.println("Create table Done");}

修改表结构

private static void modifySchema(Admin admin) throws IOException {TableName tableName = TableName.valueOf(TABLE_NAME);// 修改表之前,判断表是否存在,防止报异常if (!admin.tableExists(tableName)) {System.out.println("Table does not exist.");System.exit(-1);}// 创建表对象HTableDescriptor table = admin.getTableDescriptor(tableName);// 创建列族对象HColumnDescriptor newColumn = new HColumnDescriptor("NEWCF");// 设置压缩格式newColumn.setCompactionCompressionType(Compression.Algorithm.GZ);// 执行最大版本号newColumn.setMaxVersions(HConstants.ALL_VERSIONS);// 新增表列族admin.addColumn(tableName, newColumn);// 修改存在 column family 的压缩格式和版本HColumnDescriptor existingColumn = new HColumnDescriptor(CF_DEFAULT);existingColumn.setCompactionCompressionType(Compression.Algorithm.GZ);existingColumn.setMaxVersions(HConstants.ALL_VERSIONS);table.modifyFamily(existingColumn);admin.modifyTable(tableName, table);// Disable an existing tableadmin.disableTable(tableName);// Delete an existing column familyadmin.deleteColumn(tableName, CF_DEFAULT.getBytes("UTF-8"));// Delete a table (Need to be disabled first)admin.deleteTable(tableName);}

列出所有表

private static void listTable(Admin admin) throws IOException {TableName[] tableNames = admin.listTableNames();for (TableName tableName : tableNames) {System.err.println("tableName is : " + tableName);}}

删表

 private static void dropTable(Admin admin, String tableName) throws IOException {TableName table = TableName.valueOf(tableName);admin.disableTable(table);System.err.println("disable table is success");admin.deleteTable(table);System.err.println("drop table is success");}

写表

private static void insertData(HTable table) throws IOException {// rowKey 前缀String rowKey = "rowKey";// 列族名称String family = "f1";// 造一批假数据for (int i = 0; i < 50; i++) {Put put = new Put(Bytes.toBytes(rowKey + i));for (int j = 0; j < 10; j++) {put.add(family.getBytes(), Bytes.toBytes(rowKey + i + "-key" + j), Bytes.toBytes(rowKey + i + "-value" + j));}table.put(put);}}

根据 rowKey 删数据

private static void deleteData(HTable table) throws IOException {Delete delete = new Delete("rowKey1".getBytes());// 指定 列族 名称,删除整个列族delete.addFamily("f1".getBytes());// 指定列族下的一个列,删除列delete.addColumn("f1".getBytes(), "key1".getBytes());// 什么也不指定,则删除整个 rowKey 下的数table.delete(delete);}

查表,所有数据

private static void scanData(HTable table) throws IOException {// 初始化 startRow 和 endRowScan scan = new Scan("123".getBytes(), "rowKey11".getBytes());ResultScanner scanner = table.getScanner(scan);for (Result result : scanner) {// 获取 rowKeyString rowKey = new String(result.getRow());// 获取 keyNavigableMap<byte[], byte[]> familyMap = result.getFamilyMap("f1".getBytes());for (Map.Entry<byte[], byte[]> entry : familyMap.entrySet()) {String key = new String(entry.getKey());String value = new String(entry.getValue());// 打印结果System.err.println("rowKey is : " + rowKey + ", key is : " + key + ", value is : " + value);}}}

根据 rowKey 查数据

 private static void selectDataByRowKey(HTable table) throws IOException {Get get = new Get("rowKey1".getBytes());// 获取单个 rowKey 下整个结果Result result = table.get(get);System.err.println("result is : " + result.toString());// 根据列族,获取 keyNavigableMap<byte[], byte[]> familyMap = result.getFamilyMap("f1".getBytes());for (Map.Entry<byte[], byte[]> entry : familyMap.entrySet()) {System.err.println("key is : " + new String(entry.getKey()) + ", value is : " + new String(entry.getValue()));}// 获取 valuebyte[] value = result.getValue("f1".getBytes(), "key1".getBytes());System.err.println("value is : " + new String(value));}

Scala 版的

Hbase 工具类

object HbaseUtil {
//  已过时
//  val conf = new HBaseConfiguration()val conf = HBaseConfiguration.create()conf.set("hbase.zookeeper.quorum", "192.168.78.135")val connection = ConnectionFactory.createConnection(conf)
}

列出所有表

def listTables(admin: Admin) = {val names = admin.listTableNames()names.foreach(println(_))}

建表

def createTable(admin: Admin) = {if (admin.tableExists(this.tb)) {println("表已存在,请换个表名重新建表")} else {val descriptor = new HTableDescriptordescriptor.setName(TableName.valueOf(tableName))descriptor.addFamily(new HColumnDescriptor("f1"))admin.createTable(descriptor)println("create table done")}}

查看表结构

def describeTable(admin: Admin) = {val descriptor = admin.getTableDescriptor(TableName.valueOf(tableName))val families = descriptor.getFamiliesprintln(families)}

删表

def dropTable(admin: Admin) = {if (admin.tableExists(this.tb)) {admin.disableTable(this.tb)admin.deleteTable(this.tb)} elseprintln("表不存在,请确认表名")}

写数据

def insertData(tableName: String): Unit = {// 新建表对象val table = new HTable(conf, tableName)// 造假数据开始for (a <- 51 to 150) {// 创建 put 对象,用来存放数据,构造方法里放 rowKey 的值val put = new Put(("rowKey" + a).getBytes())for (b <- 1 to 10) {val key = ("rowKey" + a + "-key" + b).getBytes()val value = ("rowKey" + a + "-value" + b).getBytes()// addColumn 方法参数:列族,key,valueput.addColumn("f1".getBytes(), key, value)}// put 数据table.put(put)}}

扫描整个表

def scanData(tableName: String): Unit = {// 创建 scan 对象val scan = new Scan// 创建表对象,构造方法:配置对象,表名val table = new HTable(conf, tableName)// 获取 scanner 对象val scanner: ResultScanner = table.getScanner(scan)// 从 scanner 对象中取所有结果val result = scanner.next()// 遍历全部结果while (result != null) {// 获取 rowKeyval row = new String(result.getRow)// 获取 rowKey 下所有数据,返回的结构是 NavigableMap<byte[], byte[]>val map = result.getFamilyMap("f1".getBytes)val iter = map.entrySet().iterator()// 开始遍历 map 结果数据while (iter.hasNext) {val entry = iter.next()val key = new String(entry.getKey)val value = new String(entry.getValue)println("rowKey is : " + row + ", key is : " + key + ", value is : " + value)}}}

根据 rowKey 查数据

def scanData(tableName: String): Unit = {// 创建 scan 对象val scan = new Scan// 创建表对象,构造方法:配置对象,表名val table = new HTable(conf, tableName)// 获取 scanner 对象val scanner: ResultScanner = table.getScanner(scan)// 从 scanner 对象中取所有结果val result = scanner.next()// 遍历全部结果while (result != null) {// 获取 rowKeyval row = new String(result.getRow)// 获取 rowKey 下所有数据,返回的结构是 NavigableMap<byte[], byte[]>val map = result.getFamilyMap("f1".getBytes)val iter = map.entrySet().iterator()// 开始遍历 map 结果数据while (iter.hasNext) {val entry = iter.next()val key = new String(entry.getKey)val value = new String(entry.getValue)println("rowKey is : " + row + ", key is : " + key + ", value is : " + value)}}}

根据 rowKey 删数据

def deleteDataByRowKey(tableName: String, row: String): Unit = {val table = new HTable(conf, tableName)val delete = new Delete(row.getBytes())table.delete(delete)}

查询所有记录数 count*

def countData(tableName: String): Unit = {val table = new HTable(conf, tableName)val descriptor = table.getTableDescriptor// 定义协调处理器名称val aggre = "org.apache.hadoop.hbase.coprocessor.AggregateImplementation"// 如果表没有该协同处理器,先关表,addCoprocessor,开启表if (!descriptor.hasCoprocessor(aggre)) {val tbn = TableName.valueOf(tableName)admin.disableTable(tbn)descriptor.addCoprocessor(aggre)admin.modifyTable(TableName.valueOf(tableName), descriptor)admin.enableTable(tbn)}// 创建处理器客户端val client = new AggregationClient(conf)// 计算 count 时间val watch: StopWatch = new StopWatch()watch.start()// 开始 rowCount 操作val count = client.rowCount(table, new LongColumnInterpreter, new Scan())watch.stop()// 打印println(watch.getTime)println(tableName + " count si : " + count)}

Scala 操作表代码

class TableSchemaDemo1(val tableName: String) {val tb = TableName.valueOf(tableName)def dropTable(admin: Admin) = {if (admin.tableExists(this.tb)) {admin.disableTable(this.tb)admin.deleteTable(this.tb)} elseprintln("表不存在,请确认表名")}def describeTable(admin: Admin) = {val descriptor = admin.getTableDescriptor(TableName.valueOf(tableName))val families = descriptor.getFamiliesprintln(families)}def createTable(admin: Admin) = {if (admin.tableExists(this.tb)) {println("表已存在,请换个表名重新建表")} else {val descriptor = new HTableDescriptordescriptor.setName(TableName.valueOf(tableName))descriptor.addFamily(new HColumnDescriptor("f1"))admin.createTable(descriptor)println("create table done")}}def listTables(admin: Admin) = {val names = admin.listTableNames()names.foreach(println(_))}def listTables(): Unit = {}override def toString = s"TableSchemaDemo1($tableName)"
}object TableSchemaDemo1 {def main(args: Array[String]): Unit = {// 获取 hbase 配置val conf = HbaseUtil.conf// 获取连接val connection = HbaseUtil.connection// 获取管理员val admin = connection.getAdmin()val demo = new TableSchemaDemo1("tbs")demo.listTables(admin)demo.createTable(admin)demo.describeTable(admin)
//    demo.dropTable(admin)println(demo.toString)}
}

完整代码

Java:https://github.com/zhang-peng-fei/java_bigdata

Scala:https://github.com/zhang-peng-fei/scala_bigdata

Hase Java API 和 Hbase Scala API相关推荐

  1. HBase 6、用Phoenix Java api操作HBase

    开发环境准备:eclipse3.5.jdk1.7.window8.hadoop2.2.0.hbase0.98.0.2.phoenix4.3.0 1.从集群拷贝以下文件:core-site.xml.hb ...

  2. 6 HBase java API访问HBase数据库

    HBase java API访问HBase数据库 package com.hunan.hbase_options;import org.apache.hadoop.conf.Configuration ...

  3. 使用 Java API 操作 HBase

    使用 Java API 操作 HBase 数据库,就类似HBase Shell,本质上一个是Java 代码,一个是Shell 命令.(hadoop 的文件系统莫不如此,可用Java API 的方式操作 ...

  4. HBase编程 API入门系列之HTable pool(6)

    HTable是一个比较重的对此,比如加载配置文件,连接ZK,查询meta表等等,高并发的时候影响系统的性能,因此引入了"池"的概念. 引入"HBase里的连接池" ...

  5. Java SE 9:Stream API的改进

    发表简要目录: (Post Brief Table of Content:) Introduction介绍 Java SE 8: Stream API BasicsJava SE 8:Stream A ...

  6. 【0基础学java】教学日志:javaSE--Stream API

    本章概述:本章主要讲了Stream特性,Stream运行机制,Stream的创建,Stream常用API,以及Stream API在实际应用开发中的作用 目录 本章概述: 一.annotation 1 ...

  7. java 最小化 api_Java的API设计实践

    Introduction 了解在设计Java API时应该应用的一些API设计实践.通常,这些实践很有用,并确保API可以在模块化环境中正确使用,例如OSGi和Java平台模块系统(JPMS).有些做 ...

  8. java 时间api源码,时间API(示例代码)

    1. 时间API 我们的时间在java里是long类型的整数,这个整数称之为时间戳(也叫格林威治时间),即从1970-01-01到现在为止所经过的毫秒数,单有这个时间戳是不能准确表达世界各地的时间,还 ...

  9. java文档注释生产api没有注释_一个神奇的没有springboot注释的api文档生成器---JApiDocs...

    入门 支持JDK:1.8+ 快速开始 第一步:添加依赖 maven: io.github.yedaxia japidocs 1.4.3 gradle: compile 'io.github.yedax ...

最新文章

  1. 小机上监控AIX和数据库管理系统的运行情况直到性能优化(SQL语句优化和排除硬件问题)...
  2. HDU ACM 3177 Crixalis's Equipment
  3. linux数组shell数组添加内容,shell数组的定义与应用
  4. type lambda
  5. InsecureRequestWarning: Unverified HTTPS request is being made to host(requests证书警告)
  6. [SOJ] connect components in undirected graph
  7. jodd忽略ssl证书_Jodd - Java界的瑞士军刀,无法想象的轻量级工具包
  8. mac 上安装服务,查看服务,重启和关闭
  9. UVA - 11437 Triangle Fun(简单几何)
  10. 008. 限制上传文件的大小
  11. C算法编程题(二)正螺旋
  12. 获取SQL命令字符串中的参数名列表
  13. LeetCode 563. Binary Tree Tilt
  14. 《Reids 设计与实现》第二章 字典
  15. 【报告分享】百度大脑AI技术成果白皮书2018-2019.pdf
  16. 线程同步 -事件Event、临界区对象CriticalSection
  17. R语言使用order函数对dataframe数据进行排序、基于单个字段(变量)进行升序排序(ASCENDING)
  18. ARM Uboot经历——makefile与uboot目录
  19. matlab在大气科学,MATLAB入门在大气科学中的应用学术沙龙活动圆满成功
  20. 百度地图点击获取定位信息以及定位的经纬度

热门文章

  1. 大数据中的用户画像(persona)
  2. mysql究极优化方案
  3. ASP.NET MVC 发布IIS HTTP 错误 403.14 - Forbidden
  4. 我用这些方式赚钱了人生第一个100万
  5. 互联网动物园 - Logo 合集
  6. ArchLinux安装deb包
  7. cocos lua ccui.TextField 本文输入框 editbox手机无法正常输入
  8. zabbix案例--监控网站的PV-UV-IP
  9. 阿里云语音合成价格是多少?
  10. 计算机组装中如何看硬件型号,电脑组装教程:怎么看电脑配置?教你如何查看电脑配置...