目录

  • 开发环境
  • 步骤
    • 下载并安装protobuf
    • 编写 `user.proto`
    • 使用Protobuf编译器将该文件编译成目标语言
    • 测试
  • 测试项目地址

开发环境

  • Hbase-2.2.7集群
  • Hadoop-3.1.1集群
  • Zookeeper-3.5.6集群
  • protobuf-2.5.0

开发环境的配置见前几篇文章, 软件下载可自行百度,或者关注后端码匠回复电脑环境下载

步骤

下载并安装protobuf

解压 protobuf-2.5.0

进入protobuf-2.5.0

./configur

make

make install

安装编译时间较长,耐心等待⌛️

编写 user.proto

package cn.com.codingce.hbase;message UserDetail
{required string username = 1;required string password = 2;
}//这是一个类,该类对象中包含很多UserDetail对象,每个UserDetail 对象是一条记录,dayUserDetail类的对象其实就相当于Java的集合。
message dayUserDetail
{required UserDetail dayUserDetail=1; //属性名称就是类名,相当于该类是一个集合存放的泛型是UserDetail (写法和Java不同,注意理解即可)
}

需要注意的是文件名不能和类名一样

使用Protobuf编译器将该文件编译成目标语言

执行编译

./protoc --java_out=/root/ ./user.proto

生成成功

测试

业务代码

package cn.com.codingce.hbase;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;import java.io.IOException;/*** @author williamma*/
public class ProtoTest {public static void main(String[] args) throws IOException {//        createTable("usertest", "info");addRowData("usertest", "1006");}//获取 Configuration 对象public static Configuration conf;static {//使用 HBaseConfiguration 的单例方法实例化conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum", "你的ip");conf.set("hbase.zookeeper.property.clientPort", "2181");}/*** 获取连接** @return* @throws IOException*/public static Connection getConnection() throws IOException {Connection connection = ConnectionFactory.createConnection(conf);System.out.println("创建连接。。。" + connection);return connection;}/*** 向表中插入数据** @param tableName* @param rowKey* @throws IOException*/public static void addRowData(String tableName,String rowKey) throws IOException {Connection connection = getConnection();//查询数据//获取指定表对象Table table = connection.getTable(TableName.valueOf(tableName));User.UserDetail.Builder userDetail = User.UserDetail.newBuilder();
//        userDetail.setUsername("Mike");
//        userDetail.setPassword("Mike");userDetail.setUsername("HEHE");userDetail.setPassword("HEHE");Put put = new Put(rowKey.getBytes());put.addColumn("info".getBytes(), "userDetail".getBytes(), userDetail.build().toByteArray());table.put(put);System.out.println("插入成功。。。");}/*** 创建表** @param tableName* @param columnFamily* @throws MasterNotRunningException* @throws ZooKeeperConnectionException* @throws IOException*/public static void createTable(String tableName, String... columnFamily) throwsMasterNotRunningException, ZooKeeperConnectionException, IOException {Connection connection = getConnection();Admin admin = connection.getAdmin();//判断表是否存在if (isTableExist(tableName)) {System.out.println("表 " + tableName + "已存在");//System.exit(0);} else {//创建表//创建表属性对象,表名需要转字节HTableDescriptor descriptor = new HTableDescriptor(TableName.valueOf(tableName));//创建多个列族for (String cf : columnFamily) {descriptor.addFamily(new HColumnDescriptor(cf));}//根据对表的配置,创建表admin.createTable(descriptor);System.out.println("表 " + tableName + "创建成功!");}}/*** 判断表是否存在** @param tableName* @return* @throws MasterNotRunningException* @throws ZooKeeperConnectionException* @throws IOException*/public static boolean isTableExist(String tableName) throws MasterNotRunningException,ZooKeeperConnectionException, IOException {//在 HBase 中管理、访问表需要先创建 HBaseAdmin 对象//Connection connection = ConnectionFactory.createConnection(conf);// HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();Connection connection = getConnection();Admin admin = connection.getAdmin();boolean result = admin.tableExists(TableName.valueOf(tableName));System.out.println("表是否存在:" + result);return result;}
}

测试项目地址

[Github]:https://github.com/xzMhehe/codingce-java

[Gitee]:https://gitee.com/codingce/codingce-java

如有问题欢迎评论区讨论

Hbase之protobuf的使用相关推荐

  1. HBase 参考指南 3.0 翻译活动期待大家的参与 | ApacheCN

    参与方式:https://github.com/apachecn/h... 整体进度:https://github.com/apachecn/h... 项目仓库:https://github.com/ ...

  2. hbase报错:org.apache.hadoop.hbase.PleaseHoldException: Master is initializing

    报错 hbase(main):002:0> status 1 active master, 0 backup masters, 2 servers, 0 dead, 0.0000 average ...

  3. org.apache.hadoop.hbase.NotServingRegionException: hbase:meta,,1 is not online问题(暂时没有解决)

    在试图使用 sqoop从mysql导数据到hbase的过程中,发生下面报错: 2020-06-30 11:53:38,636 ERROR [main] tool.ImportTool (ImportT ...

  4. org.apache.hadoop.hbase.PleaseHoldException: Master is initializing(解決方案汇总+自己摸索)

    #--------------------------------------环境(start)---------------------------------------------------- ...

  5. 解决Hbase输入list,创建表报错,输入status可以,org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: S

    今天恢复了一下快照,然后hbase出现了问题 2019-08-25 00:59:55,810 INFO [RpcServer.default.FPBQ.Fifo.handler=28,queue=1, ...

  6. Hbase RegionServer 启动失败 Time difference of xxx ms max allowed of 30000ms

    Hbase RegionServer 启动报错 异常如下: STOPPED: Unhandled: org.apache.hadoop.hbase.ClockOutOfSyncException: S ...

  7. Impala 调用Hbase 报错 LeaseException

    impala调用Hbase表数据操作时,提示 LeaseException 异常,主要原因是hbase数据过大,调用期间没有汇报心跳导致 WARNINGS: LeaseException: org.a ...

  8. Hbase Import导入数据异常处理-RetriesExhaustedWithDetailsException

    CDH显示 问题导致原因: hbase org.apache.hadoop.hbase.mapreduce.Import -Dmapred.job.queue.name=etl crawl:wecha ...

  9. Hbase 中文参考指南 3.0 校对活动发车了~

    参与方式:https://github.com/apachecn/hbase-doc-zh/blob/master/CONTRIBUTING.md 整体进度:https://github.com/ap ...

最新文章

  1. 搜索引擎广告过滤Chrome插件
  2. 类执行方法的过程与运行时
  3. mysql数据库导入外部数据乱码么_解决MySQL数据库导入导出数据乱码的问题
  4. Linux fedora35安装crontab定时任务工具
  5. glid加载不出来图片
  6. 【GIF动画+完整可运行源代码】C++实现 快速排序——十大经典排序算法之六
  7. javaScript第一天(1)
  8. 【Ids4实战】分模块保护资源API
  9. 工作130:computed
  10. 安卓学习笔记03:安卓应用目录结构
  11. HDOJ 4734 数位DP
  12. 如何做好项目进度管理
  13. 怎么用wps抽签_怎么制作抽签,WPS表格怎么制作抽签程序表格
  14. 如何写H5/web前端工程简历中的项目经验
  15. Windows XP集成安装光盘制作完全教程
  16. TortoiseGit的Reversion Graph图标颜色代表意义
  17. java 怎样设置文本域的字体颜色_java的JTextArea中怎么改变字体颜色
  18. Windows安装Navicat(最新版)
  19. vlookup匹配的文字显示0_怪不得你学不好VLOOKUP函数,这6种错误用法你规避了吗?...
  20. 大数据剖析:思科、IBM、甲骨文、Uber相继裁员,寒冬将至 ?

热门文章

  1. 中国中文信息学会:第一届自然语言生成与智能写作大会讲习班正式发布
  2. 从6篇经典论文看问题生成及其相关技术
  3. 强大的NVAE:以后再也不能说VAE生成的图像模糊了
  4. AAAI 2019 Oral | 让TA说你想听的—基于音/视频特征解离的讲述者人脸生成
  5. AAAI 2019 Oral | 把Cross Entropy梯度分布拉‘平’,就能轻松超越Focal Loss
  6. echarts 默认显示图例_echarts图例组件点击显示功能(默认功能点击消失)
  7. 程序员35岁之后的出路_我35岁,被裁员,开始给程序员规划人生
  8. springboot出现Requested bean is currently in creation: Is there an unresolvable circular reference?
  9. 一分钟带你快速进入Nacos的世界,史上最简易教程!零基础也能看明白!谁反对?
  10. JPA中实现查询list