2024年基于hadoop的HBase JAVA API_hbase在hadoop中api借口操作,阿里、百度、美团、携程、蚂蚁面经分享

总结

一般像这样的大企业都有好几轮面试,所以自己一定要花点时间去收集整理一下公司的背景,公司的企业文化,俗话说「知己知彼百战不殆」,不要盲目的去面试,还有很多人关心怎么去跟HR谈薪资。

这边给大家一个建议,如果你的理想薪资是30K,你完全可以跟HR谈33~35K,而不是一下子就把自己的底牌暴露了出来,不过肯定不能说的这么直接,比如原来你的公司是25K,你可以跟HR讲原来的薪资是多少,你们这边能给到我的是多少?你说我这边希望可以有一个20%涨薪。

最后再说几句关于招聘平台的,总之,简历投递给公司之前,请确认下这家公司到底咋样,先去百度了解下,别被坑了,每个平台都有一些居心不良的广告党等着你上钩,千万别上当!!!

Java架构学习资料,学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书。
在这里插入图片描述

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

// 创建表

Admin admin = connection.getAdmin();

admin.createTable(tableDescriptorBuilder.build());

admin.close();

// 获取表实例

Table table = connection.getTable(tableName);

// 插入数据

Put put = new Put(Bytes.toBytes(“row1”));

put.addColumn(columnFamily, Bytes.toBytes(“col1”), Bytes.toBytes(“value1”));

table.put(put);

// 查询数据

Get get = new Get(Bytes.toBytes(“row1”));

Result result = table.get(get);

byte[] value = result.getValue(columnFamily, Bytes.toBytes(“col1”));

System.out.println("Value: " + Bytes.toString(value));

// 删除数据

Delete delete = new Delete(Bytes.toBytes(“row1”));

table.delete(delete);

// 关闭连接

table.close();

connection.close();

}

}



这个示例演示了如何使用HBase的Java API来创建一个名为"my\_table"的表,插入一条数据(行键为"row1",列族为"cf",列限定符为"col1",值为"value1"),然后查询并打印出该数据的值,并最后删除该数据。注意,这只是一个简单的示例,实际使用中可能会涉及更复杂的操作和更多的配置选项。



1. 与相关相似主题的异同点:


HBase Java API是访问HBase数据库的主要方式之一。除了HBase Java API外,还有其他一些API可以用于访问HBase,例如REST API、Thrift API和Avro API等。这里我们主要横向比较HBase Java API与REST API和Thrift API的异同点。



异同点如下:



1. 语言支持:HBase Java API是Java编写的,而REST API和Thrift API可以使用多种语言编写,包括Java、Python、Ruby等。这使得REST API和Thrift API更加灵活,适合多语言开发团队。



2. 性能:HBase Java API直接调用HBase内部的Java代码,因此性能更高。而REST API和Thrift API需要将请求解析为HTTP或Thrift协议,并且需要进行序列化和反序列化操作,因此性能相对较低。



3. 功能支持:HBase Java API支持HBase的所有功能,包括表管理、数据插入、查询、更新和删除等。而REST API和Thrift API不支持所有功能,有一些高级功能只能通过Java API实现。



4. 开发难度:HBase Java API是封装HBase操作最为方便的方法,但对于初学者来说,可能需要花费时间学习Java API的使用方法。而REST API和Thrift API使用简单,只需要发送HTTP或Thrift请求并解析响应即可,对于初学者更为友好。



5. 安全性:REST API和Thrift API支持基于Kerberos的安全认证,可以在客户端和服务器端之间进行安全认证。而HBase Java API需要通过配置文件来实现安全认证,可能需要更多的工作量。



相同点如下:



1. 访问HBase:无论是HBase Java API、REST API还是Thrift API,它们都提供了访问HBase数据库的能力。



2. 数据操作:这三种API都支持对HBase表进行数据的插入、查询、更新和删除等操作。



3. 并发性:无论是HBase Java API、REST API还是Thrift API,它们都可以处理多个并发请求。



4. 跨平台支持:这三种API都可以在不同的操作系统上运行,并且可以与各种编程语言进行集成和使用。



5. 扩展性:这三种API都具有良好的扩展性,可以根据需要进行自定义开发和优化。



总体上来说,HBase Java API是最为直接、方便且功能最为丰富的访问HBase的方式之一。但对于不同的开发团队和应用场景,选择最适合自己的API也很重要。


* 实验情况


1)实验环境描述:



为了使用HBase Java API进行实验,您需要设置以下环境:



1. Java开发环境:确保您已经安装了Java Development Kit (JDK)。建议使用最新版本的JDK。



2. HBase依赖库:您需要下载HBase的Java客户端库并将其添加到您的项目中。您可以从HBase的官方网站或Maven仓库获取HBase的Java客户端库。


![](https://img-blog.csdnimg.cn/direct/5dfbb1a99b4e4dbcb028505428385cc3.png)


3. Hadoop集群:HBase是建立在Hadoop之上的分布式数据库,因此您需要配置一个可用的Hadoop集群以供HBase使用。您可以使用Hadoop的单节点模式进行开发和测试,也可以配置一个多节点的Hadoop集群。



4. HBase配置文件:HBase有一些配置文件,您需要根据您的环境进行相应的配置。主要的配置文件包括`hbase-site.xml`、`hbase-env.sh`和`regionservers`。您需要根据您的Hadoop集群配置修改这些文件。



5. HBase表的创建:在使用HBase Java API之前,您需要在HBase中创建表并定义列族。您可以使用HBase shell或HBase管理界面(如Hue)来创建表,或者使用HBase Java API动态创建表。





|  |
| --- |
|  |
|  |  |





|  |
| --- |
|  |
|  |  |


6. Java代码编写:最后,您需要使用Java编写代码来连接HBase集群、执行操作。您可以使用HBase提供的Java API来进行连接、插入、查询等操作。确保您已经导入了相关的类和方法,并按照API文档进行操作。



这些是使用HBase Java API进行实验的基本环境要求和步骤。根据您的具体需求,可能还需要进行其他配置和操作。请参考HBase官方文档以获取更详细的信息和示例代码。


2)实验过程:


以下是使用HBase Java AP创建表格,删除表格并判断表格是否存在的过程:




public static boolean isTableExists(String namespace,String tableName) throws IOException {
    // 1. 获取 admin
    Admin admin = connection.getAdmin();
    // 2. 使用方法判断表格是否存在
    boolean b = false;
    try {
        b = admin.tableExists(TableName.valueOf(namespace, tableName));
    } catch (IOException e) {
        e.printStackTrace();





|  |
| --- |
|  |
|  |  |




}
    // 3. 关闭 admin
    admin.close();
    // 3. 返回结果
    return b;
    // 后面的代码不能生效
}

//创建表格    namespace:命名空间名称    tableName:表

名    columnFamilies:列族名
public static void createTable(String namespace , String tableName , String… columnFamilies) throws IOException {
    // 判断是否有至少一个列族
    if (columnFamilies.length == 0){
        System.out.println(“创建表格至少有一个列族”);
        return;
    }
    // 判断表格是否存在
    if (isTableExists(namespace,tableName)){
        System.out.println(“表格已经存在”);
        return;
    }
    // 1.获取 admin
    Admin admin = connection.getAdmin();
    // 2. 调用方法创建表格
    // 2.1 创建表格描述的建造者
    TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf(namespace, tableName));
    // 2.2 添加参数
    for (String columnFamily : columnFamilies) {
        // 2.3 创建列族描述的建造者
        ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(columnFamily));
        // 2.4 对应当前的列族添加参数
        // 添加版本参数
        columnFamilyDescriptorBuilder.setMaxVersions(5);
        // 2.5 创建添加完参数的列族描述

tableDescriptorBuilder.setColumnFamily(columnFamilyDescriptorBuilder.build());
    }
    // 2.6 创建对应的表格描述
    try {
        admin.createTable(tableDescriptorBuilder.build());





|  |
| --- |
|  |
|  |  |



} catch (IOException e) {
        e.printStackTrace();
    }
    // 3. 关闭 admin
    admin.close();
}

//修改表格    namespace:命名空间名称    tableName:表名    columnFamily:列族名    version:版本号
public static void modifyTable(String namespace ,String tableName,String columnFamily,int version) throws IOException {
    // 判断表格是否存在
    if (!isTableExists(namespace,tableName)){
        System.out.println(“表格不存在无法修改”);
        return;
    }
    // 1. 获取 admin
    Admin admin = connection.getAdmin();
    try {
        // 2. 调用方法修改表格
        // 2.0 获取之前的表格描述
        TableDescriptor descriptor =
                admin.getDescriptor(TableName.valueOf(namespace, tableName));
        // 2.1 创建一个表格描述建造者
        // 如果使用填写 tableName 的方法 相当于创建了一个新的表格描述建造者 没有之前的信息
        // 如果想要修改之前的信息 必须调用方法填写一个旧的表格描述
        TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(descriptor);
        // 2.2 对应建造者进行表格数据的修改
        ColumnFamilyDescriptor columnFamily1 = descriptor.getColumnFamily(Bytes.toBytes(columnFamily));
        // 创建列族描述建造者
        // 需要填写旧的列族描述
        ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(columnFamily1);
        // 修改对应的版本
        columnFamilyDescriptorBuilder.setMaxVersions(version);
        // 此处修改的时候 如果填写的新创建 那么别的参数会初始化

tableDescriptorBuilder.modifyColumnFamily(columnFamilyDescriptorBuilder.build());
        admin.modifyTable(tableDescriptorBuilder.build());
    } catch (IOException e) {
        e.printStackTrace();
    }
    // 3. 关闭 admin
    admin.close();
}




|  |
| --- |
|  |
|  |  |


  
  



//删除表格    namespace:命名空间名称    tableName:表名  返回值:是否删除成功
public static boolean deleteTable(String namespace ,String tableName) throws IOException {
    // 1. 判断表格是否存在
    if (!isTableExists(namespace,tableName)){
        System.out.println(“表格不存在 无法删除”);
        return false;
    }
    // 2. 获取 admin
    Admin admin = connection.getAdmin();
    // 3. 调用相关的方法删除表格
    try {
        // HBase 删除表格之前 一定要先标记表格为不可以
        TableName tableName1 = TableName.valueOf(namespace, tableName);
        admin.disableTable(tableName1);
        admin.deleteTable(tableName1);
    } catch (IOException e) {
        e.printStackTrace();
    }
    // 4. 关闭 admin
    admin.close();
    return true;
}





|  |
| --- |
|  |
|  |  |




1. 实验结果分析



通过对HBase Java API的使用,我们可以得出以下结论:



1. 创建HBase表格:


   - 首先,我们需要创建一个HBase配置对象和连接对象。


### 最后

**Java架构进阶面试及知识点文档笔记**

> **这份文档共498页,其中包括Java集合,并发编程,JVM,Dubbo,Redis,Spring全家桶,MySQL,Kafka等面试解析及知识点整理**

![image](https://img-blog.csdnimg.cn/img_convert/d175854dd054b0a757d81042924b421c.webp?x-oss-process=image/format,png)

**Java分布式高级面试问题解析文档**

**其中都是包括分布式的面试问题解析,内容有**分布式消息队列,Redis缓存,分库分表,微服务架构,分布式高可用,读写分离等等!

![image](https://img-blog.csdnimg.cn/img_convert/7f51350462b8cb612b28c80346ef6fb9.webp?x-oss-process=image/format,png)

**互联网Java程序员面试必备问题解析及文档学习笔记**

![image](https://img-blog.csdnimg.cn/img_convert/e86c3673eae5196c134171531975557f.webp?x-oss-process=image/format,png)

**Java架构进阶视频解析合集**


> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

,内容有**分布式消息队列,Redis缓存,分库分表,微服务架构,分布式高可用,读写分离等等!

[外链图片转存中...(img-rvr5ueE1-1715059222427)]

**互联网Java程序员面试必备问题解析及文档学习笔记**

[外链图片转存中...(img-fQqJXZI6-1715059222428)]

**Java架构进阶视频解析合集**


> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值