Hbase入门篇

HBase:

  1. 数据库:是一种面向列族存储的非关系型数据库
  2. 用于存储结构化和非结构化数据:适用于单表非关系型数据的存储,不适合做关联查询,类似于JOIN等操作
  3. 基于HDFS:数据持久化存储的体现形式是HFile,存放于DataNode中,被ResionServer以Region的形式进行管理
  4. 延迟较低,接入在线业务使用:面对大量的企业数据,HBase可以直线单表大量数据的存储,同时提供了高效的数据访问速度。 
package csdn.dreamzuora;import com.sun.istack.internal.logging.Logger;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;/*** Title:* Description:** @version 1.0* @author: weijie* @date: 2020/11/10 18:02*/
public class HbaseUtils {public static Configuration conf;private Logger logger = Logger.getLogger(HbaseUtils.class);static{//使用 HBaseConfiguration 的单例方法实例化conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum", "39.96.204.209");conf.set("hbase.zookeeper.property.clientPort", "2181");}public Connection getConnection() throws IOException {return ConnectionFactory.createConnection(conf);}public Admin getAdmin() throws IOException {Connection connection = getConnection();return connection.getAdmin();}public Table getTable(TableName tableName) throws IOException {Connection connection = getConnection();return connection.getTable(tableName);}/*** 判断表是否存在* @param tableName* @return* @throws IOException*/public boolean isTableExist(String tableName) throws IOException {Admin admin = getAdmin();return admin.tableExists(TableName.valueOf(tableName));}/*** 创建表* @param tableName* @param columnFamily* @throws IOException*/public void createTable(String tableName, String... columnFamily) throws IOException {Connection connection = ConnectionFactory.createConnection(conf);Admin admin = connection.getAdmin();//判断表是否存在if (isTableExist(tableName)){logger.info("表" + tableName + "已存在");}else {//创建表属性对象,表名需要转字节HTableDescriptor hTableDescriptor = new HTableDescriptor(TableName.valueOf(tableName));//创建多个列族for (String cf : columnFamily){hTableDescriptor.addFamily(new HColumnDescriptor(cf));}//根据对表的配置,创建表admin.createTable(hTableDescriptor);logger.info("表" + tableName + "创建成功!");}}/*** 删除表*/public void dropTable(String tableName) throws IOException {Admin admin = getAdmin();if (isTableExist(tableName)){admin.disableTable(TableName.valueOf(tableName));admin.deleteTable(TableName.valueOf(tableName));logger.info("表" + tableName + "删除成功!");}else {logger.info(tableName + "表不存在");}}/*** 向表中插入数据*/public void addRowData(String tableName, String rowkey, String columnFamily, String column, String value) throws IOException {//创建表对象Table table = getTable(TableName.valueOf(tableName));//向表中插入数据Put put = new Put(Bytes.toBytes(rowkey));//向Put对象中组装数据put.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(value));table.put(put);table.close();logger.info("数据插入成功");}/*** 删除多行数据*/public void deleteMultiRow(String tableName, String... rows) throws IOException {Table table = getTable(TableName.valueOf(tableName));List<Delete> deleteList = new ArrayList<Delete>();for (String row : rows){Delete delete = new Delete(Bytes.toBytes(row));deleteList.add(delete);}table.delete(deleteList);table.close();}/*** 获取所有数据*/public void getAllRows(String tableName) throws IOException {Table table = getTable(TableName.valueOf(tableName));//得到用于扫描region的对象Scan scan = new Scan();//使用Htable得到resultcanner实现类的对象ResultScanner resultScanner = table.getScanner(scan);for (Result result : resultScanner){Cell[] cells = result.rawCells();for (Cell cell : cells){//得到rowkeylogger.info("行健: " + Bytes.toString(CellUtil.cloneRow(cell)));//得到列族logger.info("列族: " + Bytes.toString(CellUtil.cloneFamily(cell)));//列名logger.info("列名: " + Bytes.toString(CellUtil.cloneQualifier(cell)));//列值logger.info("列值: " + Bytes.toString(CellUtil.cloneValue(cell)));}}}/*** 获取某一行数据*/public void getRow(String tableName, String rowkey) throws IOException {Table table = getTable(TableName.valueOf(tableName));Get get = new Get(Bytes.toBytes(rowkey));/*** get.setMaxVersions() 显示所有版本* get.setTimeStamp(timeStamp) 显示指定时间戳版本*/Result result = table.get(get);for (Cell cell : result.rawCells()){logger.info("行键: " + Bytes.toString(result.getRow()));//得到列族logger.info("列族: " + Bytes.toString(CellUtil.cloneFamily(cell)));//列名logger.info("列名: " + Bytes.toString(CellUtil.cloneQualifier(cell)));//列值logger.info("列值: " + Bytes.toString(CellUtil.cloneValue(cell)));}}/*** 获取某一行指定"列族:列"的数据*/public void getRowQualifier(String tableName, String rowkey, String family, String qualifier) throws IOException {Table table = getTable(TableName.valueOf(tableName));Get get = new Get(Bytes.toBytes(rowkey));get.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier));Result result = table.get(get);for (Cell cell : result.rawCells()){logger.info("行键: " + Bytes.toString(result.getRow()));//得到列族logger.info("列族: " + Bytes.toString(CellUtil.cloneFamily(cell)));//列名logger.info("列名: " + Bytes.toString(CellUtil.cloneQualifier(cell)));//列值logger.info("列值: " + Bytes.toString(CellUtil.cloneValue(cell)));}}}

视频学习地址:https://www.bilibili.com/video/BV1Y4411B7jy?p=7

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

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

相关文章

ElasticSearch入门篇

文章目录控制台RESTFULL操作REST风格说明基于REST命令说明&#xff1a;es支持的数据类型核心数据类型ik分词器使用ik_smart最少切分ik_max_word最细粒度索引操作索引库创建创建文档方式指定索引类型(以后这种方式会被弃用)不指定索引类型利用默认的_doc类型更新文档方式一&…

【待完成】并发包下常用到线程工具类汇总

文章目录并发容器BlockingQueueArrayBlockingQueueLinkedBlockingQueuePriorityBlockingDelayQueueSynchronousQueueBlockingDequeCopyOnWriteCopyOnWriteArrayListCopyOnWriteArraySetConcurrentLinkedQueue/DequeConcurrentHashMapConcurrentSkipListMap/Set同步工具类AQS实现…

判断对象属性值是否为空

private boolean checkObjFieldIsNotNull(Object obj){try {for (Field f : obj.getClass().getDeclaredFields()) {f.setAccessible(true);if (f.get(obj) ! null) {return true;}}}catch (IllegalAccessException e){}return false;}

爬虫中如何获取页面编码类型

获取页面的编码格式的三种方式&#xff1a; 根据Response中的header获取编码格式根据页面标签中的meta获取根据页面内容识别自动识别出编码格式&#xff0c;经过测试准确率比较高 三种方式可以结合使用&#xff0c;由于inputStream不能够被复用&#xff0c;但是inputStrem没有…

记录一次异常 java.lang.NoClassDefFoundError: org/apache/lucene/codecs/lucene53/Lucene53NormsFormat

异常信息&#xff1a; java.lang.NoClassDefFoundError: org/apache/lucene/codecs/lucene53/Lucene53NormsFormatat java.lang.Class.getDeclaredConstructors0(Native Method)at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)at java.lang.Class.getCon…

Spark集群部署与架构

在大数据时代&#xff0c;处理海量数据需要分布式计算框架。Apache Spark作为一种强大的大数据处理工具&#xff0c;可以在集群中高效运行&#xff0c;处理数十TB甚至PB级别的数据。本文将介绍如何构建和管理Spark集群&#xff0c;以满足大规模数据处理的需求。 Spark集群架构…

elasticsearch高级查询进阶

文章目录前期准备应用场景1.constant_score查询-不考虑文档频率得分&#xff0c;与搜索关键字命中更多的返回结果2.sort排序-分数相同情况下&#xff0c;按照指定价格域排序3.不考虑文档频率TF/IDF情况下&#xff0c;不同域打分权重不同进行召回4.不考虑文档频率TF/IDF情况下&a…

java核心技术-多线程并发设计原理以及常见面试题

文章目录写在前面多线程回顾Thread和Runnable面试官&#xff1a;为什么我们在项目中推荐使用使用Runnable方法而不用继承Thread&#xff1f;面试官&#xff1a;Callable为什么可以带返回值&#xff0c;你知道底层原理&#xff1f;面试题&#xff1a;线程了解&#xff1f;给我讲…

java核心技术-jvm基础知识

文章目录JVM回顾JVM、JRE、JDK之间关系&#xff1f;Java程序执行过程&#xff1f;面试官&#xff1a;解释执行和JIT(及时编译)两种执行方式有什么区别&#xff1f;java虚拟机内存管理jvm整体架构JVM只是定义内存划分规范等&#xff0c;具体实现依赖不同虚拟机实现&#xff0c;如…

阿里京东滴滴等大厂面试题汇总

文章目录11月面&#xff1a;京东一面【京东云与AI-协同办公】&#xff1a;京东一面现场面【京东云与AI-平台创新组】&#xff1a;京东二面&#xff1a;11月面&#xff1a;滴滴视频面【橙心优选】&#xff1a;11月面&#xff1a;国美零售【大数据-搜索组】8月面&#xff1a;阿里…

spring boot 如何动态替换bean?

替换Bean工具类 Component public class ApplicationContextUtil implements ApplicationContextAware {private static ApplicationContext applicationContext null;Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansExcept…

elasticsearch亿级数据量全量索引导入优化方案

Hbase scan读取时候&#xff0c;调大 hbase.client.scanner.timeout.period 超时时间,不然可能会跑异常 org.apache.hadoop.hbase.UnknownScannerException: org.apache.hadoop.hbase.UnknownScannerException: Unknown scanner 479187903508737326. This can happen due to an…

多线程场景下利用ThreadLocal是线程安全?

文章目录背景多线程场景测试代码结论背景 ThreadLocal原理以及基本概念这里我就不介绍了&#xff0c;这里我们主要关注ThreadLocal是否是线程安全吗&#xff1f;其实如果我们知道ThreadLocal原理我们肯定知道它是线程安全的&#xff0c;但是我在开发的时候不放心做了个测试&am…

记录一次服务进程强行退出的问题排查过程

场景&#xff1a;我这边从Hbase跑一亿多的全量数据录入Elasticsearch中&#xff0c;跑了四个多小时&#xff0c;程序突然挂掉了&#xff0c;然后我就纳闷了&#xff0c;为啥突然挂掉了&#xff1f;&#xff1f;&#xff1f; 思路1:是不是Java 进程抛出OOM异常&#xff1f; 分析…

No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK

文章目录问题背景&#xff1a;问题排查过程拓展问题背景&#xff1a; 运行环境&#xff1a;Mac For IDEA 我的Mac 更新最新系统(window解决办法也是如下)后&#xff0c;由于新系统的Mac会带JDK导致自动更新Java版本&#xff0c;最后导致我在Idea控制台中执行mvn install后抛出…

ElasticSearch聚合查询

文章目录聚合分组求和平均值分析每种颜色下每种品牌的平均价格更多的metric学习Cardinality(唯一值)查询聚合分析查询聚合全局聚合 深入聚合数据分析_global bucket&#xff1a;单个品牌与所有品牌销量对比过滤聚合&#xff1a;统计价格大于1200的电视平均价格统计最近一个月的…

深入剖析线程池基本原理以及常见面试题详解

文章目录面试官&#xff1a;能给我讲讲线程池的实现原理&#xff1f;线程池类继承关系ThreadPoolExecutor核心数据结构面试官&#xff1a;给我讲讲线程池的有哪些参数&#xff1f;面试官&#xff1a;如何优雅的关闭线程&#xff1f;线程的生命周期面试官&#xff1a;线程池哪五…

设计模式七大设计原则

文章目录设计模式七大设计原则开闭原则里氏替换原则依赖倒置原则接口隔离原则迪米特法则-最少知道原则单一职责原则合成复用原则设计模式 面向对象的三个基本特征&#xff1a; 继承封装多态 设计模式体现了代码的耦合性、内聚性、可维护性、可扩展性、重用性、灵活性。 代码…

从框架源码中学习创建型设计模式

文章目录从框架源码中解读创建型设计模式工厂模式案例一&#xff1a;RocketMQ源码-创建Producer生产者案例二&#xff1a;RocketMQ源码-创建过滤器工厂抽象工厂案例一&#xff1a;Dubbo源码-创建缓存的抽象工厂案例二&#xff1a;RocketMQ源码-创建日志对象的抽象工厂单例模式面…

从框架源码中学习结构型设计模式

文章目录从框架源码学习结构型设计模式适配器模式应用实例案例一&#xff1a;dubbo框架日志适配器Logger接口日志实现类Logger适配器接口LoggerAdapter实现类Logger日志工厂桥接模式应用场景案例&#xff1a;dubbo源码-远程调用模块channelHandler设计ChannelHandler是一个SPI拓…