JavaAPI操作HBase-Day2

Java代码操作HBase

pom依赖,依赖版本要和软件一致
<dependencies><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-client</artifactId><version>2.5.5</version></dependency><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-common</artifactId><version>2.5.5</version></dependency><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-server</artifactId><version>2.5.5</version></dependency><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-protocol</artifactId><version>2.5.5</version></dependency><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase</artifactId><version>2.5.5</version><type>pom</type><exclusions><exclusion><groupId>org.glassfish</groupId><artifactId>javax.el</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-mapreduce</artifactId><version>2.5.5</version></dependency><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-zookeeper</artifactId><version>2.5.5</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version></dependency><!--日志打印--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>2.12.0</version></dependency><!--Hadoop通用包--><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>3.2.4</version></dependency><!--Hadoop客户端--><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.2.4</version></dependency><!--Hadoop HDFS--><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>3.2.4</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-auth</artifactId><version>3.2.4</version></dependency>
</dependencies>
操作命名空间
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.NamespaceDescriptor;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;private Connection connection;private Admin admin;// 连接HBase//Socket error occurred: localhost/127.0.0.1:2181: 拒绝连接. 不指定就访问本地2181Port//因为connection = ConnectionFactory.createConnection();没有conf参数@Beforepublic void connect() throws IOException {// 获取配置Configuration conf = HBaseConfiguration.create();// 指定Zookeeper的地址// hadoop在 /etc/hosts文件做了ip映射conf.set("hbase.zookeeper.quorum", "hadoop:2181");// 获取连接connection = ConnectionFactory.createConnection(conf);// 获取管理权admin = connection.getAdmin();}// 在Test执行之后执行.关闭连接@Afterpublic void close() throws IOException {if (admin != null) admin.close();if (connection != null) connection.close();}// 创建名称空间
// create_namespace 'api'
@Test
public void createNamespace() throws IOException {// 构建空间描述器NamespaceDescriptor nd = NamespaceDescriptor.create("api").build();// 创建名称空间admin.createNamespace(nd);
}// 列出所有的名称空间
// list_namespace
@Test
public void listNamespace() throws IOException {// 将名称空间的名字放到数组中返回String[] namespaces = admin.listNamespaces();for (String namespace : namespaces) {System.out.println(namespace);}
}// 删除名称空间
// drop_namespace
@Test
public void dropNamespace() throws IOException {// 要求空间为空// 如果不为空,那么会抛出异常 - ConstraintExceptionadmin.deleteNamespace("api");
}
操作表
private Connection connection;private Admin admin;private Table table;@Test
public void createTable() throws Exception{ColumnFamilyDescriptor cl1 = ColumnFamilyDescriptorBuilder.newBuilder("basic".getBytes()).build();ColumnFamilyDescriptor cl2 = ColumnFamilyDescriptorBuilder.newBuilder("info".getBytes()).build();// Demo:user   在Demo命名空间内创建user表      user 在default空间内TableDescriptor  table1 = TableDescriptorBuilder.newBuilder(TableName.valueOf("user")).setColumnFamily(cl1).setColumnFamily(cl2).build();admin.createTable(table1);
}@Test
public void append() throws IOException {//RowKEYAppend append = new Append("u1".getBytes());//ColumnFamily  Column   valuebyte[] basic = "basic".getBytes();append.addColumn(basic,"name".getBytes(),"hsk".getBytes());append.addColumn(basic,"age".getBytes(),"15".getBytes());byte[] info = "info".getBytes();append.addColumn(info,"phone".getBytes(),"nonono".getBytes());append.addColumn(info,"address".getBytes(),"beijing".getBytes());table.append(append);}
//put一百万数据
//26s即可。效率很高 。  Rowkey有序但不是大小排序。而是字典排序(一个字符一个字符来排序  9 在 1221之后,因为9比1大)@Test
public void putMillions() throws Exception{ArrayList<Put> list = new ArrayList<Put>();long start = System.currentTimeMillis();//CoulumnFamilybyte[] basic = "basic".getBytes();//Columnbyte[] password = "passWoed".getBytes();for (int i = 0; i < 1000000; i++) {//RowKeybyte[] rowKey = ("m" + i).getBytes();Put put = new Put(rowKey);put.addColumn(basic,password,reducePassword());list.add(put);if(i==10000){table.put(list);list.clear();}}long end = System.currentTimeMillis();System.out.println(end-start);
}@Test
public void delete() throws Exception{//确定行Delete delete = new Delete("u1".getBytes());//ColumnFamilydelete.addFamily("basic".getBytes());table.delete(delete);
}@Test
public void deleteAll() throws Exception{Delete delete = new Delete("u1".getBytes());table.delete(delete);
}//获取Cell
@Test
public void getCell() throws Exception{Get get = new Get("u1".getBytes());get.addColumn("basic".getBytes() ,"name".getBytes());Result result = table.get(get);byte[] value = result.getValue("basic".getBytes(), "name".getBytes());System.out.println(new String(value));
}//getColumnFamily
@Test
public void getColumn() throws Exception{Get get = new Get("u1".getBytes());get.addFamily("basic".getBytes());Result result = table.get(get);NavigableMap<byte[], byte[]> familyMap = result.getFamilyMap("basic".getBytes());for (Map.Entry<byte[], byte[]> entry : familyMap.entrySet()) {System.out.println(new String(entry.getKey())+"  "+new String(entry.getValue()));}
}//getLine
//结果map嵌套map
@Test
public void getLineByFor() throws IOException{Get get = new Get("u1".getBytes());Result result = table.get(get);NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> map = result.getMap();for (Map.Entry<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> navigableMapEntry : map.entrySet()) {System.out.println("Column Family\t:"+new String(navigableMapEntry.getKey()));for (Map.Entry<byte[], NavigableMap<Long, byte[]>> mapEntry : navigableMapEntry.getValue().entrySet()) {System.out.println("Column Name\t:"+new String(mapEntry.getKey()));for (Map.Entry<Long, byte[]> longEntry : mapEntry.getValue().entrySet()) {System.out.println("\t\tTimeStamp\t:"+longEntry.getKey());System.out.println("\t\tCellValue\t:"+new String(longEntry.getValue()));}}}
}//Lambda方式获取整行数据
@Test
public void getLineByLambda() throws IOException{Get get = new Get("u1".getBytes());Result result = table.get(get);NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> row = result.getMap();row.forEach((key,value) ->{System.out.println("Column Family\t:"+new String(key));value.forEach((keyy,valuee)->{System.out.println("\tColumn Name\t:"+new String(keyy));valuee.forEach((keyyy,valueee)->{System.out.println("\t\tTimstamp\t:"+keyyy+ "\t\tvalue\t:"+new String(valueee));});});});}//整表查询
@Test
public void scan() throws IOException{Scan scan = new Scan();ResultScanner results = table.getScanner(scan);Iterator<Result> iterator = results.iterator();while(iterator.hasNext() ){Result next = iterator.next();// 根据需求来确定获取指定列,还是获取指定列族或者是整表数据// 获取整表数据// r.getMap();// 获取指定列族的数据// r.getFamilyMap(ColumnFamily );// 获取指定列的数据// r.getvalue(ColumnFamily , ColumnName)//todo 获取不到每行的RowKeyNavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> row = next.getMap();row.forEach((key,value) ->{System.out.println("Column Family\t:"+new String(key));value.forEach((keyy,valuee)->{System.out.println("\tColumn Name\t:"+new String(keyy));valuee.forEach((keyyy,valueee)->{System.out.println("\t\tTimstamp\t:"+keyyy+ "\t\tvalue\t:"+new String(valueee));});});});System.out.println("----------------------------------------------------------");NavigableMap<byte[], byte[]> familyMap = next.getFamilyMap("basic".getBytes());familyMap.forEach((k,v)->{System.out.println("ColumnName"+new String(k)+"\t--"+new String(v));});System.out.println("----------------------------------------------------------");byte[] value = next.getValue("basic".getBytes(), "password".getBytes());System.out.println(value == null ? "null":new String(value));}
}// 基于Scan操作的前提下,还可以对结果来进行过滤
@Test
public void filter() throws IOException {Scan scan = new Scan();// 构建Filter对象// 过滤密码中含有AAA的数据// .*AAA.*// CompareOperator - 比较方式// ByteArrayComparable - 比较规则Filter f = new ValueFilter(CompareOperator.EQUAL, new RegexStringComparator(".*A.*"));scan.setFilter(f);// 获取结果集ResultScanner rs = table.getScanner(scan);for (Result r : rs) {byte[] value = r.getValue("basic".getBytes(), "passWoed".getBytes());System.out.println(value == null ? "null" : new String(value));}}public byte[] reducePassword(){StringBuilder stringBuilder = new StringBuilder();for (int i = 0; i < 6; i++) {stringBuilder.append((char)(Math.random()*26+65));}return  stringBuilder.toString().getBytes();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/792392.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 14 apexd分析(1)apexd bootstrap

Apex的由来&#xff0c;我们都知道普通的apk我们可以通过应用商店playstore等进行更新&#xff0c;apex的引入是google希望也能通过playstore更新bin文件.so etc配置文件等类型文件. 这些文件的安装实际通过apexd来进行&#xff0c;现在我们来解析一下apexd&#xff0c; apexd的…

JAVAEE——文件IO之文件操作

文章目录 文件的创建和销毁File概述构造方法常用的方法getAbsolutePath()exists()isDirectory()isFile()createNewFile()delete()deleteOnExit()list()listFiles()mkdir() 文件的创建和销毁 上面我们介绍了文件的读写操作那么文件的创建等的操作如何进行呢&#xff1f;这个操作…

.NET 设计模式—简单工厂(Simple Factory Pattern)

简介 简单工厂模式&#xff08;Simple Factory Pattern&#xff09;属于类的创建型模式&#xff0c;又叫静态工厂方法模式&#xff08;Static FactoryMethod Pattern&#xff09;,是通过一个工厂类来创建对象&#xff0c;根据不同的参数或条件返回相应的对象实例。这种模式隐藏…

前视声呐目标识别定位(四)-代码解析之启动识别模块

前视声呐目标识别定位&#xff08;一&#xff09;-基础知识 前视声呐目标识别定位&#xff08;二&#xff09;-目标识别定位模块 前视声呐目标识别定位&#xff08;三&#xff09;-部署至机器人 前视声呐目标识别定位&#xff08;四&#xff09;-代码解析之启动识别模块 …

C语言之分支语句和循环语句

前言 一、什么是语句&#xff1f; 二、分支语句&#xff08;选择结构&#xff09; 2.1 if语句 2.2 switch语句 三、循环语句 3.1 while循环 3.2 break与continue语句 3.3 getchar()与putchar() 3.3.1 缓冲区 3.4 for循环 3.4.1 一些for循环的变种 3.5 do...while循…

AcWing 785. 快速排序——算法基础课题解

AcWing 785. 快速排序 文章目录 题目描述CGo模板 题目描述 给定你一个长度为 n 的整数数列。 请你使用快速排序对这个数列按照从小到大进行排序。 并将排好序的数列按顺序输出。 输入格式 输入共两行&#xff0c;第一行包含整数 n。 第二行包含 n 个整数&#xff08;所有…

C语言中的结构体:高级特性与扩展应用

前言 结构体在C语言中的应用不仅限于基本的定义和使用&#xff0c;还包含一些高级特性和扩展应用&#xff0c;这些特性和应用使得结构体在编程中发挥着更加重要的作用。 一、位字段&#xff08;Bit-fields&#xff09; 在结构体中&#xff0c;我们可以使用位字段来定义成员…

AJAX —— 学习(二)

目录 一、利用 JSON 字符串 返回数据 &#xff08;一&#xff09;基础代码 &#xff08;二&#xff09;原理及实现 二、nodmon 工具 自动重启服务 &#xff08;一&#xff09;用途 &#xff08;二&#xff09;下载 &#xff08;三&#xff09;使用 三、IE 缓存问题 &a…

QA测试开发工程师面试题满分问答8: mysql数据库的索引定义、用途和使用场景

MySQL数据库索引是一种数据结构&#xff0c;用于提高数据库的查询效率。索引是基于表中的一个或多个列构建的&#xff0c;它们允许数据库系统快速定位和访问表中的特定数据&#xff0c;而无需扫描整个表。 索引的定义 在MySQL中&#xff0c;可以使用CREATE INDEX语句定义索引…

pulsar集群部署流程及方案

# 部署方案: 集群模式部署,broker和bookie混合部署,zk同时部署在三台机器上面(资源充足zk最好单独部署,注意pulsar和zk版本兼容性) # 1.集群资源使用(实际测试情况CPU使用率比内存高,建议CPU设置大于内存,不同业务场景有差异) 三台主机centos7 16核16GB,每台挂载1TB机械硬盘(不…

Linux:进程终止和等待

一、进程终止 main函数的返回值也叫做进程的退出码&#xff0c;一般0表示成功&#xff0c;非零表示失败。我们也可以用不同的数字来表示不同失败的原因。 echo $?//打印最近一次进程执行的退出码 而作为程序猿&#xff0c;我们更需要知道的是错误码所代表的错误信息&#x…

MongoDB聚合运算符:$lte

文章目录 语法举例 $lte聚合运算符用于比较两个值&#xff0c;如果第一个小于等于第二个&#xff0c;返回true&#xff1b;如果第一个值大于第二个值&#xff0c;返回false。 语法 { $lte: [ <expression1>, <expression2> ] }$lte可以用来比较任何类型的值&…

嵌入式算法开发系列之卡尔曼滤波算法

卡尔曼滤波算法 文章目录 卡尔曼滤波算法前言一、卡尔曼滤波算法原理二、算法应用三、C语言实现总结 前言 在嵌入式系统中&#xff0c;传感器数据通常受到噪声、误差和不确定性的影响&#xff0c;因此需要一种有效的方法来估计系统的状态。卡尔曼滤波算法是一种基于概率理论的…

网络安全系统之——PKI体系

一、公钥基础设施 公钥基础设施 PKI&#xff08;Public Key Infrastructure&#xff09;是通过使用公钥技术和数据证书来提供信息系统安全服务&#xff0c;并负责验证数字证书持有者身份的一种体系。PKI 基础设施采用证书管理公钥&#xff0c;通过第三方可信任认证中心&#xf…

【信号与系统 - 2】傅里叶变换与反变换

1 傅里叶变换与频谱密度函数 非周期信号可以看成是 T → ∞ T\to{\infty} T→∞ 的周期信号 由于 w ↓ 2 π T ↑ w\downarrow\frac{2\pi}{T\uparrow} w↓T↑2π​&#xff0c; T T T 无限大&#xff0c;则基波频率 w w w 无限小&#xff0c;可以视为 d w dw dw 在频谱图…

RL — 强化学习算法概述

目录 一、说明二、无模型算法三、基于模型的 RL四、价值学习五、策略梯度5.1 强度:5.2 局限性5.3 蒙特卡洛政策梯度六、TRPO公司七、行动者兼评论家八、基于模型的 RL一、说明 我们在本系列中研究了许多强化学习 (RL) 算法,例如,用于 MoJoCo 任务的策略梯度方法、用于 At…

【亲测有效】Ubuntu系统下调整/home分区大小(无损扩容)

一、引言 当时给系统分区的时候&#xff0c;home和根分区都是100GB左右&#xff0c;突然发现home 分区不够用了&#xff0c;于是决定将根分区的部分空间挪移到home分区。 常用调整分区大小的工具有&#xff1a;GParted工具&#xff0c;DiskGenius工具。如果GParted工具无法调…

Linux文件权限管理详解——以CentOS为例

Linux文件权限管理详解——以CentOS为例 一、引言 在Linux系统中,文件权限管理是一项非常重要的任务。正确的文件权限设置能够保护系统的安全性,防止未授权访问和数据泄露。本文将详细介绍Linux文件权限管理的基本概念、常用命令以及如何在CentOS系统中进行实际操作。 二、…

电工技术学习笔记——直流电路及其分析方法

一、直流电路 电路的组成 1. 电压和电流的参考方向 电压&#xff08;Voltage&#xff09;&#xff1a;电压是电场力对电荷产生的作用&#xff0c;表示为电荷单位正电荷所具有的能量。在电路中&#xff0c;电压通常被定义为两点之间的电势差&#xff0c;具有方向性&#xff0c;…

HomePlug AV

目录 HomePlug AV的基本概念基本术语网络概念网络实例 HomePlug AV物理层&#xff08;PHY&#xff09;HomePlug AV OFDM收发器架构PHY的调制模式FC调制和ROBO调制物理层的特点OFDM频域/时域转换开窗/槽式OFDM信号和噪声PHY发送控制——信道自适应PHY帧格式&#xff08;Symbol&a…