HBase_ 协处理器的实用技巧

大数据开发中HBase之协处理器Coprocessor的详细应用实例 协处理器协处理器是帮助HBase轻松的构建二级索引的(HBase 0.92版本之后才有的技术)。协处理器的分类:observer 和 endpoint。简单来讲,类似于传统数据库中的触发器。在处理HBase的数据之前,之后的节点上,会触发Observer中的某些具体的方法。这些方法被称之为钩子方法。以 Hbase2.0.0 版本为例,它提供了三种观察者接口:● RegionObserver:提供客户端的数据操纵事件钩子: Get、 Put、 Delete、 Scan 等。 阅读详情

场景:

为什么要使用协处理器呢?
答: 使用hbase内部的组件, 可以提高我们数据的发送保存效率

图解:
在这里插入图片描述

如何使用hbase的协处理器呢?

  1. 创建类( 继承BaseRegionObserver类),实现prePut或者postPut
  2. 关联表(在表创建时,就进行关联)
  3. 将jar包(及依赖jar包) 放到hbase的lib当中,并集群分发
  4. 注意: 如果使用协处理器之后, 导致HregionServer进程掉线,查看日志,可能是协处理器代码出现问题了

实操代码:


/**
 *   协处理器 : 1.创建类
 *            2. 关联表
 *            3. 将jar包(及依赖jar包)放到hbase的lib当中,并集群分发
 */
public class InsertCalleeCoprocessor  extends BaseRegionObserver {

    /**
     *  当发送数据过后触发该条件: 保存 被叫用户数据
     * @param e  用于获取hbase环境
     * @param put    触发该条件的put对象
     * @param edit
     * @param durability
     * @throws IOException
     */
    @Override
    public void postPut(ObserverContext<RegionCoprocessorEnvironment> e, Put put, WALEdit edit, Durability durability) throws IOException {
        Table table = e.getEnvironment().getTable(TableName.valueOf(Names.TABLE.value()));

        PartitionNum part = new PartitionNum();

        String rowkey = Bytes.toString(put.getRow()); //必须要使用 Bytes 工具类才行,直接toString是不行的  此前我们正好将数据都添加到了rowkey当中

        String[] str = rowkey.split("_");
        String call1 = str[1];
        String call2 = str[2];
        String callTime = str[3];
        String duration = str[4];
        String flag = str[5];

        // 必须要有条件,不然每次都会put都会访问这个方法,陷入死循环,   内存会爆炸
        if("1".equals(flag)) {

            String calleeRowkey=part.getPartitionNum(call2,callTime)+"_"+call2+"_"+call1+"_"+callTime+"_"+duration+"_0";
            Put calleePut = new Put( calleeRowkey.getBytes());

            calleePut.addColumn(Names.CF_CALLEE.value().getBytes(), Bytes.toBytes("call1"),Bytes.toBytes(call2));
            calleePut.addColumn(Names.CF_CALLEE.value().getBytes(), Bytes.toBytes("call2"),Bytes.toBytes(call1));
            calleePut.addColumn(Names.CF_CALLEE.value().getBytes(), Bytes.toBytes("callTime"),Bytes.toBytes(callTime));
            calleePut.addColumn(Names.CF_CALLEE.value().getBytes(), Bytes.toBytes("duration"),Bytes.toBytes(duration));
            calleePut.addColumn(Names.CF_CALLEE.value().getBytes(), Bytes.toBytes("flag"),Bytes.toBytes("0"));
            table.put(calleePut);

            table.close();
        }

    }


    /**
     *  此内部对象主要用于  basedao 类 里面的分区号获取
     */
    private class  PartitionNum extends BaseDao{

    }
}

HBase的协处理器编码实战 简要介绍HBase协处理器的用途及分类,并通过代码实例演示了HBase协处理器的基本使用方法。 阅读详情

相关推荐

Hbase高阶知识:HBase的协处理器(Coprocessor)原理、使用实例、高级技巧和案例分析

HBase,作为一个开源的、分布式的、可扩展的以及基于列的NoSQL数据库,已被广泛应用于存储大规模数据集。其架构设计和数据模型是理解HBase工作原理和性能特点的基础。HBase的架构由多个关键组件构成,包括Client、Zookeeper、Master和RegionServer等。其中,Client负责与用户进行交互,接收用户的请求并返回结果;Zookeeper则负责协调和管理HBase集群中的各个组件,确保系统的高可用性;

大模型大数据攻城狮的专栏 1466

Hbase 协处理器

介绍了Hbase 协处理器,并使用代码进行了演示

凉茶铺的博客 897

大数据HBase(十六):HBase的协处理器(Coprocessor)

全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点。 目录 系列历史文章 HBase的协处理器(Coprocessor) 一、起源 二、协处理器主要的分类 三、HBase的协处理器_ObServer 四、HBase的协处理器_Endpoint 五、概念总结 六、HBase的协处理器总结 系列历史文章 2021年大数据HBase(十六):HBase的协处理器(Coprocessor) 2021年大数据HBas..

Lansonli(蓝深李)的博客 4404

Hbase协处理器使用总结

Hbase协处理器使用总结 使用背景 使用hbase同步数据到es,每次hbase客户端发送put请求后,触发协处理器将数据同步到es。 版本介绍 jdk版本:1.8 hbase版本:1.2.0 es版本:6.8.5 hadoop版本: 2.6.0 话不多说,直接上代码。有关协处理器了解请参考底部官网连接和相关博客。 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.a

weixin_42042307的博客 522

hbase2.1.6协处理器使用

对于2.1.6这个版本,使用协处理器需要引入hbase-common依赖。 协处理器分为两种,一种是observer协处理器,一种是endpoint协处理器。 下面首先记录第一种协处理器的使用步骤。 一、observer协处理器 案例背景 有user和people两个表,每个表都有一个person列族。现在要实现的是向user表插入“person:name”之前,先将其rowkey插入到people表的“person:lastname”。相当于是二级索引的概念。 步骤 1.修改配置文件hbase-site.xml,保证在协处理器加载和运行出现异常时,regionserver仍然可以提供服务。

【MDC开发者课程】MDC功能软件-归控算法介绍

规控算法

博客标题不能为空我也没办法 1844

HBase协处理器知识点

HBase协处理器知识点 1、为什么引入协处理器?      在旧版(0.92HBase版本之前)的HBase中是没有引入协处理器的概念的。这样存在的问题是:创建二级索引较难,很难进行简单的排序、求和、计数等操作。这里是指在该版本限制下难以进行上述操作,不是不行。为了降低难度,提出了协处理器的概念。  这里补充索引相关的知识点: 索引的概念: i)明确是针对数据库而言的,体现是一张表

菜菜的博客 7193

01-嵌入式入门-如何看原理图

最近由于找到的工作是偏于嵌入式方向,因此又重新开始学习已经丢弃两年的知识。新手学习知识感觉有一个通病:喜欢收集各种各样的视频、资料,网盘里收藏一大堆,但是却从没有打开看过,到头来还是个小白,只听说过几个概念,而实际却是不知所云,这就是所谓的"学习综合征"。而我也是其中的一员,最近痛定思痛,就准备根据一套资料沉下心学习下去,不再进入收集资料的大军。...

weixin_34010566的博客 4484

hbase的协处理器

一、产生背景 Hbase作为列族数据库最经常被人诟病的特性包括:无法轻易建立“二级索引”,难以执行求和、计数、排序等操作。比如,在旧版本的(<0.92)Hbase 中,统计数据表的总行数,需要使用 Counter 方法,执行一次 MapReduce Job 才能得到。虽然 HBase在数据存储层中集成了 MapReduce,能够有效用于数据表的分布式计算。然而在很多情况下,做一些简单的相加...

墨殇 5070

别再到处搜了!高德地图瓦片URL参数(lang、style、ltype)全解析与实战搭配指南

本文全面解析高德地图瓦片URL参数(lang、style、ltype)的核心逻辑与实战应用,提供18种实用参数组合方案,帮助开发者实现从基础到高阶的定制化地图渲染。涵盖语言控制、地图样式、图层类型等关键参数,并分享WebGIS项目中的优化技巧与常见问题解决方案。

weixin_33724046的博客 117

【Unity】Gif图片播放插件(支持UI及模型纹理渲染两种模式)

unity本身不支持GIF格式文件直接渲染, 因此一般的做法是通过加载图片,通过代码控制其循环播放、停止等,模拟动画效果,本文简单介绍一下某个现有开源工具,感谢开源作者。

灵境引路人 4036

HBase 协处理器统计行数

环境:cdh5.1.0 方法1. 启用协处理器 Aggregation(Enable Coprocessor Aggregation) 我们有两个方法:1.启动全局aggregation,能过操纵所有的表上的数据。通过修改hbase-site.xml这个文件来实现,只需要添加如下代码: hbase.coprocessor.user.region.classes o

专注大规模数据处理 5133

【STM32系统】基于STM32+手机APP设计的智能停车场系统

功能简介1、进出停车场时需要刷卡,进行一个记时、计费的功能。2、停车位配有超声波检测,主要识别车位是否被占用。3、车位区域配有OLED显示屏,用户可以通过显示屏看到空闲车位。4、车位配有车位灯。当用户找不到车位可以通过手机点亮车位灯5、停车场配有温湿度检测和烟雾检测模块。当环境发生异常状态。会触动紧急报警。6、停车场信息会通过Wi-Fi发送数据上传至阿里云。用户可以通过手机了解到停车场空闲车位和停车时间、费用。

嵌入式阿齐Archie 2万+

【HBase】HBase 协处理器

文章目录一、协处理器的产生二、协处理器的类型2.1、Observer2.1.1、适用场景2.1.2、Observer 类型2.1.3、执行流程2.2.4、Observer Example2.2、Endpoint2.2.1、适用场景2.2.2、执行流程2.2.3、Endpoint Example三、协处理的加载方式3.1、静态加载与卸载3.1.1、静态加载3.1.2、静态卸载3.2、动态加载与卸载3...

w1992wishes的博客 1776

ios开发拒绝“玄学”Crash:从循环引用到脏内存,构建你的系统性排查思维模型

你申请了内存,写了数据,这块内存就是脏的。系统无法直接回收它,除非你显式释放,或者系统把它 swap 出去(但在 iOS 上,Compressed Memory 机制虽然能压缩,但不会像桌面系统那样频繁 swap 到磁盘,一旦压缩内存也撑不住,你也得挂)。所以,排查 OOM 的核心心法只有一条:不要问“哪里漏了”,要问“每一刻,留在这个页面上的内存,凭什么必须在这里?一旦内存水位线逼近阈值(不同机型不同,老机器可能 600MB 就危,新机器能抗 1.5GB),系统发个警告。

大模型大数据攻城狮的专栏 724

手把手教你学SINULINK-- --Linear Transformer 模块

模块是 Simulink 中用于模拟理想变压器行为的重要工具。通过本文的详细介绍,希望你能更好地理解和使用模块。

MHD0815的博客 2614

HBase的协处理器

文章目录起源协处理器有两种: observer 和 endpointobserver协处理器endpoint协处理器总结协处理器加载方式静态加载动态加载协处理器卸载 起源 Hbase 作为列族数据库最经常被人诟病的特性包括: 无法轻易建立“二级索引” 难以执 行求和、计数、排序等操作 比如,在旧版本的(<0.92)Hbase 中,统计数据表的总行数,需要使用 Counter 方法,执行一次 MapReduce Job 才能得到。虽然 HBase 在数据存储层中集成了 MapReduce,能.

batman 1529

运维颠覆!一文解锁AI赋能运维实战秘籍,效率飙升!

将AI应用于运维工作是一场极具价值的变革,从故障预测与诊断到自动化任务执行,再到资源管理优化,AI都展现出巨大潜力。尽管在实践过程中会面临数据质量、模型复杂性等挑战,但通过合理的技术选型和解决方案,我们能够充分挖掘AI的优势,实现运维工作的高效、智能转型。持续探索和创新AI在运维领域的应用,将为企业的数字化发展提供坚实保障。在科技飞速发展的当下,运维领域正经历着深刻变革,AI的融入成为提升运维效率与质量的关键。本文将深入实战,带你领略AI如何在运维各环节大显身手,让你的运维工作开启智能高效新模式。

探索云原生与智能化驱动下的安全运维新范式。关注DevSecOps、可观测性、AIOps等前沿领域,与您共赴技术前沿。 401

hbase 协处理器、二级索引、Phoenix

摘要 原文:https://blog.youkuaiyun.com/alphags/article/details/53786777 本文主要内容是通过合理hbase 行键(rowkey)设计实现快速的多条件查询,所采用的方法将所有要用于查询中的列经过一些处理后存储在rowkey中,查询时通过rowkey进行查询,提高rowkey的利用率,加快查询速度。行键(rowkey)并不是简单的把所有要查询的列的值...

. 2495

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

HBase的两种协处理器

1.起因(Why HBase  Coprocessor) HBase作为列族数据库最经常被人诟病的特性包括:无法轻易建立“二级索引”,难以执行求和、计数、排序等操作。比如,在旧版本的( 2.灵感来源( Source of Inspration) HBase协处理器的灵感来自于Jeff Dean 09年的演讲( P66-67)。它根据该演讲实现了类似于bigtable的协处理器,包

bbaiggey_bigdata的博客 1642

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Hbase Coprocessors 协处理器

目录 Hbase 协处理器的概述 与其他协处理器的比较 Triggers and Stored Procedure MapReduce AOP 协处理器如何实现 Coprocessors类型 观察者协处理器 Observer Coprocessor 使用样例 Observer Coprocessor 的类型 端点协处理器 如何加载协处理器 静态加载 静态卸载 动态加载 动态卸载 使用样例 观察者样例 端点样例 其他协处理器的使用手册 目前的限制 Hbase 协处理

主要写大数据集群一线运维和学习工作经验 992

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

HBase协处理器深度解析:Observer与Endpoint开发实战指南

在大数据技术快速演进的今天,HBase作为分布式列式数据库的代表,凭借其高吞吐、低延迟的特性,已成为海量数据存储与实时查询的重要基础设施。然而,随着业务场景的日益复杂,仅依赖HBase原生功能往往难以满足定制化需求,例如数据校验、实时聚合、跨行事务等。正是在这样的背景下,HBase协处理器(Coprocessor)应运而生,它为用户提供了一种灵活、高效的扩展机制,允许开发者在不修改HBase核心代码的前提下,将自定义逻辑嵌入到数据存储和处理的各个环节。性能优化需求:在大数据场景下,网络I/O往往是性能瓶颈。

zuiyuelong的博客 1227

Hbase2.x协处理器的使用

简介 HBASE的协处理器分为endpoint和observer,网上介绍很多,这里不再赘述,直接上代码。 创建Maven工程 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://...

天地人的博客 2071

HBase的协处理器(Coprocessor)、HBase如何使用二级索引、observer协处理器、 endpoint协处理器、Hbase 协处理器加载方式

HBase 在 0.92 之后引入了协处理器(coprocessors),实现一些激动人心的新特性:能够轻易建立二次索引、复杂过滤器(谓词下推)以及访问控制等

qq_40585384的博客 4463
上一篇: 自定义Annotation的实用场景和实操代码(hbase交互)
下一篇: Redis02_数据类型及常用命令
First_____
博客等级 码龄6年 132粉丝 150原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值