【hadoop】Hbase java api 案例

 代码实现:

HBaseConnection.java

package com.peizheng.bigdata;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;import java.io.IOException;public class HBaseConnection {public static Connection connection = null;static {Configuration conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum", "master,slave1,slave2");conf.set("hbase.zookeeper.property.clientPort","2181");try {connection = ConnectionFactory.createConnection(conf);} catch (IOException e) {e.printStackTrace();}}public static void closeConnection(){try {connection.close();} catch (IOException e) {e.printStackTrace();}}
}

HBaseOperation.java

package com.peizheng.bigdata;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.CompareFilter;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.util.Bytes;import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;public class HBaseOperation {public static void createNameSpace(String namespace) throws IOException {// 1 获取admin对象   另有Table对象Admin admin = HBaseConnection.connection.getAdmin();// 1.1 Builder类NamespaceDescriptor.Builder builder = NamespaceDescriptor.create(namespace);// 1.2 添加需求,这里是添加了自定义的描述信息//builder.addConfiguration("user","peizheng");// 2 调用方法,创建命名空间admin.createNamespace(builder.build());// 3 关闭adminadmin.close();}public static void createTable(String name, String[] cols) throws IOException {Admin admin = HBaseConnection.connection.getAdmin();HTableDescriptor hTableDescriptor = new HTableDescriptor(name);for (String col : cols) {HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(col);hColumnDescriptor.setMaxVersions(5);hTableDescriptor.addFamily(hColumnDescriptor);}admin.createTable(hTableDescriptor);admin.close();}public static void putCell(String tableName, String rowKey, String columnFamily, String columnName, String value) throws IOException {Table table = HBaseConnection.connection.getTable(TableName.valueOf(tableName));Put put = new Put(Bytes.toBytes(rowKey));put.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName),Bytes.toBytes(value));table.put(put);table.close();}// 查询// 单行读取public static void getRow(String tableName, String rowKey) throws IOException {Table table = HBaseConnection.connection.getTable(TableName.valueOf(tableName));Get get = new Get(Bytes.toBytes(rowKey));// Result -> Cell[]Result result = table.get(get);// cell存储非常底层Cell[] cells = result.rawCells();for (Cell cell : cells) {String value = new String(CellUtil.cloneValue(cell));String family = new String(CellUtil.cloneFamily(cell));String colunm = new String(CellUtil.cloneQualifier(cell));System.out.println(family + ":" + colunm + "," + value);}table.close();}public static void getCell(String tableName, String rowKey, String familyName, String columnName) throws IOException {Table table = HBaseConnection.connection.getTable(TableName.valueOf(tableName));Get get = new Get(Bytes.toBytes(rowKey));get.addColumn(Bytes.toBytes(familyName),Bytes.toBytes(columnName));// Result -> Cell[]Result result = table.get(get);// cell存储非常底层Cell[] cells = result.rawCells();for (Cell cell : cells) {String value = new String(CellUtil.cloneValue(cell));String family = new String(CellUtil.cloneFamily(cell));String colunm = new String(CellUtil.cloneQualifier(cell));System.out.println(family + ":" + colunm + "," + value);}table.close();}public static void scanRows(String tableName, String startRowKey, String endRowKey) throws IOException {Table table = HBaseConnection.connection.getTable(TableName.valueOf(tableName));Scan scan = new Scan();// 指定起始的行 (包含)scan.setStartRow(Bytes.toBytes(startRowKey));// 指定结束的行 (默认不包含)scan.setStopRow(Bytes.toBytes(endRowKey));ResultScanner scanner = table.getScanner(scan);// Result记录一行数据,Cell数组// ResultScanner记录多行数据,Result数组for (Result result : scanner) {Cell[] cells = result.rawCells();for (Cell cell : cells) {String value = new String(CellUtil.cloneValue(cell));String family = new String(CellUtil.cloneFamily(cell));String colunm = new String(CellUtil.cloneQualifier(cell));System.out.print(family + ":" + colunm + "," + value + "\t");}System.out.println();}table.close();}public static void filterScan(String tableName, String startRowKey, String endRowKey, String familyName, String columnName, String val) throws IOException {Table table = HBaseConnection.connection.getTable(TableName.valueOf(tableName));Scan scan = new Scan();// 指定起始的行 (包含)scan.setStartRow(Bytes.toBytes(startRowKey));// 指定结束的行 (默认不包含)scan.setStopRow(Bytes.toBytes(endRowKey));FilterList filterList = new FilterList();//设置过滤器//SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter(Bytes.toBytes(familyName),Bytes.toBytes(columnName),CompareFilter.CompareOp.LESS_OR_EQUAL,Bytes.toBytes(val));//添加过滤器filterList.addFilter(singleColumnValueFilter);scan.setFilter(filterList);ResultScanner scanner = table.getScanner(scan);// Result记录一行数据,Cell数组// ResultScanner记录多行数据,Result数组for (Result result : scanner) {Cell[] cells = result.rawCells();for (Cell cell : cells) {String value = new String(CellUtil.cloneValue(cell));String family = new String(CellUtil.cloneFamily(cell));String colunm = new String(CellUtil.cloneQualifier(cell));System.out.print(family + ":" + colunm + "," + value + "\t");}System.out.println();table.close();}}public static void main(String[] args) throws Exception {Configuration conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum", "master,slave1,slave2");conf.set("hbase.zookeeper.property.clientPort", "2181");HBaseConnection.connection = ConnectionFactory.createConnection(conf);String tableName = "temperature";String[] cols = {"cf"};if (!HBaseConnection.connection.getAdmin().tableExists(TableName.valueOf(tableName))) {createTable(tableName, cols);}BufferedReader bufferedReader = new BufferedReader(new FileReader("F:/temperature.log"));String line;while ((line = bufferedReader.readLine()) != null) {String[] splits = line.split(",");String id = splits[0].trim();String year = splits[1].trim();String temperature = splits[2].trim();String rowKey = id + ":" + year;putCell(tableName, rowKey, "cf", "id", id);putCell(tableName, rowKey, "cf", "year", year);putCell(tableName, rowKey, "cf", "temperature", temperature);}bufferedReader.close();HBaseConnection.closeConnection();}
}

相关运行结果:

java程序运行结果:

 hbase客户端运行结果:

scan 'temperature'

 

报错解决

一直运行中可能是设置连接的是ip,不是master,slave1,slave2,这种,可能报错Caused by: org.apache.hadoop.hbase.MasterNotRunningException: java.net.UnknownHostExce。在网上找了半天的原因也没有找到的话参考下面文章修改 windows的ssh配置文件:

ip,主机名供参考:

【hadoop】创建 SSH 别名来连接远程 linux-CSDN博客

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

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

相关文章

荣耀A8互动娱乐组件部署实录(第3部分:控制端结构与房间通信协议)

作者:曾在 WebSocket 超时里泡了七天七夜的苦命人 一、控制端总体架构概述 荣耀A8控制端主要承担的是“运营支点”功能,也就是开发与运营之间的桥梁。它既不直接参与玩家行为,又控制着玩家的行为逻辑和游戏规则触发机制。控制端的主要职责包…

Vue3路由模式为history,使用nginx部署上线后刷新404的问题

一、问题 在使用nginx部署vue3的项目后,发现正常时可以访问的,但是一旦刷新,就是出现404的情况 二、解决方法 1.vite.config.js配置 在vite.config.js中加入以下配置 export default defineConfig(({ mode }) > {const isProduction …

企业级UI测试的“双保险”:TestComplete的智能对象识别与详细报告功能

企业级UI测试真是让人头疼!界面元素变来变去,测试脚本动不动就报错,测试工作根本没法顺利推进。而且,测试结果的管理和共享也麻烦得很,团队协作效率大打折扣。别急!TestComplete的智能对象识别和详细测试报…

SpringBoot的自动配置和起步依赖原理

关于Spring Boot的自动配置和起步依赖,我想结合最新的实现机制来展开说明。先说自动配置——这是Spring Boot最核心的"约定优于配置"思想的落地体现。举个例子,当我们创建一个新的Spring Boot项目时,只要在pom.xml里添加了spring-b…

《MATLAB实战训练营:从入门到工业级应用》高阶挑战篇-《5G通信速成:MATLAB毫米波信道建模仿真指南》

《MATLAB实战训练营:从入门到工业级应用》高阶挑战篇-5G通信速成:MATLAB毫米波信道建模仿真指南 🚀📡 大家好!今天我将带大家进入5G通信的奇妙世界,我们一起探索5G通信中最激动人心的部分之一——毫米波信…

一、Redis快速入门

Redis的常见命令和客户端使用 一、初识Redis Redis是一种键值型的NoSql数据库,这里有两个关键字: 键值型 NoSql 其中键值型,是指Redis中存储的数据都是以key、value对的形式存储,而value的形式多种多样,可以是字符…

gitcode 上传文件报错文件太大has exceeded the limited size (10 MiB) in commit

登陆gitcoe,在项目设置->提交设置 ,勾选提交文件限制,修改限制的大小。 修改完后,重新提交代码。

【运维】构建基于Python的自动化运维平台:用Flask和Celery打造高效管理工具

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着企业IT基础设施的复杂性不断增加,手动运维已无法满足高效管理的需求。本文详细介绍如何基于Python构建一个自动化运维平台,利用Flask…

基于大模型预测的产钳助产分娩全方位研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与方法 二、产钳助产分娩概述 2.1 产钳助产定义与历史 2.2 适用情况与临床意义 三、大模型预测原理与数据基础 3.1 大模型技术原理 3.2 数据收集与处理 3.3 模型训练与验证 四、术前预测与准备 4.1 大模型术前风险预…

css使用aspect-ratio制作4:3和9:16和1:1等等比例布局

文章目录 1. 前言2. 用法2.1 基本语法2.2. 与max-width、max-height等属性结合使用2.3. 动态计算比例 3. 应用场景4. 兼容性和替代方案5. 总结 1. 前言 在网页制作过程中,有时候我们只知道宽度,或者只知道高度,这时候需要制作一个4:3和9:16这…

【国产化】在银河麒麟ARM环境下离线安装docker

1、前言 采用离线安装的方式。 关于离线安装的方式官网有介绍,但是说的很简单,网址:Binaries | Docker Docs 官网介绍的有几种主流linux系统的安装方式,但是没有kylin的,所以在此记录一下。 在安装过程中也遇到了些…

从一城一云到AI CITY,智慧城市进入新阶段

AI将如何改变城市面貌?AI能否为城市创造新的商业价值?AI的落地应用将对日常生活有什么样的影响? 几乎在每一场和城市发展相关的论坛上,都会出现以上几个问题。城市既是AI技术创新融合应用的综合性载体,普罗大众对AI产…

鸿蒙知识总结

判断题 1、 在http模块中,多个请求可以使用同一个httpRequest对象,httpRequest对象可以复用。(错误) 2、订阅dataReceiverProgress响应事件是用来接收HTTP流式响应数据。(错误) 3、ArkTS中变量声明时不需要…

[人机交互]理解用户

一.解释什么是认知,以及它对交互设计的重要性 1.1什么是认知 认知是指与knowing相关的能力,行为和过程(考填空) -如何感知物理刺激?如注意、知觉等 -如何认识自我、他人以及环境?如意识、记忆等 -如何…

微信小程序备案的一些记录

小程序如果没有备案是搜索不到小程序的。 小程序备案需要填写主体负责人的信息,需要主体负责人的手机号验证码, 需要填写管理员的信息,同样也需要验证手机号码, 填写完毕之后,提交进行初审,初审之后会打…

SpringCloud服务拆分:Nacos服务注册中心 + LoadBalancer服务负载均衡使用

SpringCloud中Nacos服务注册中心 LoadBalancer服务负载均衡使用 前言Nacos工作流程nacos安装docker安装window安装 运行nacos微服务集成nacos高级特性1.服务集群配置方法效果图模拟服务实例宕机 2.权重配置3.环境隔离 如何启动集群节点本地启动多个节点方法 LoadBalancer集成L…

网络安全系列--《文章1:网络安全基础与核心概念》

课程1:网络安全基础与核心概念 学习内容 1. 网络安全定义 网络安全是通过技术、管理及法律手段保护网络系统的硬件、软件及数据,使其免受破坏、篡改或泄露,确保系统稳定运行并提供可靠服务。其核心目标包括保密性、完整性、可用性、可控性及…

C++:扫雷游戏

一.扫雷游戏项目设计 1.文件结构设计 首先我们要先定义三个文件 ①test.c //文件中写游戏的测试逻辑 ②game.c //文件中写游戏中函数的实现等 ③game.h //文件中写游戏需要的数据类型和函数声明等 2.扫雷游戏的主体结构 使⽤控制台实现经典的扫雷游戏 •游戏可以通过菜单…

[人机交互]识别需要和建立需求

*一.需要选择的产品特征(或属性)可概括为两类 1.1外部特征(属性) 对用户而言,可见及可度量的属性 1.2内部特征(属性) 对用户而言是不可见或不可度量的 二.什么是需求 需求是有关目标的陈述…

Lua学习笔记

文章目录 前言1. Lua的数据类型2. Lua的控制结构2.1 循环2.1.1 for2.1.1.1 数值循环2.1.1.2 迭代循环2.1.2 while2.1.3 repeat-until 2.2 条件语句2.3 函数 3. Lua中的变量作用域 前言 Lua是一种轻量级的、高效的、可扩展的脚本语言,由巴西里约热内卢天主教大学&am…