您的位置:首页 > 娱乐 > 八卦 > Macos M1 IDEA本地调试 HBase 2.2.2

Macos M1 IDEA本地调试 HBase 2.2.2

2024/10/6 14:33:46 来源:https://blog.csdn.net/qq_43236341/article/details/141397771  浏览:    关键词:Macos M1 IDEA本地调试 HBase 2.2.2

# 1. 前提

执行

mvn clean package assembly:single -DskipTests

没问题,并在hbase-assembly/target目录下生成hbase-2.2.2-bin.tar.gz 文件夹

证明Maven 下载依赖没问题

1.1 报错 1

这里应该是报错找不到

com.google.protobuf:protoc:exe:osx-aarch_64:3.5.1

可能存在问题的点是protocol 下载时,需要将总pom.xml文件和hbase-protocal(应该是)目录下的

          <configuration><protocArtifact>com.google.protobuf:protoc:${external.protobuf.version}:exe:osx-x86_64</protocArtifact><protoSourceRoot>${basedir}/src/main/protobuf/</protoSourceRoot><clearOutputDirectory>false</clearOutputDirectory><checkStaleness>true</checkStaleness></configuration>

位置的版本改成

:exe:osx-x86_64

因为protobuf 3.5.1 版本,没有支持M1芯片的版本

参考博客

## 1.2. 报错2

/Users/kturnura/Code/Source/hbase-2.2.2/hbase-common/src/main/java/org/apache/hadoop/hbase/util/Bytes.java:56:16
java: 程序包sun.misc不存在

修改项目Project Structure

在这里插入图片描述

需要将这两个位置的版本都改成Java 8

2. 启动HMaster

源码的conf目录移动到hbase-server项目目录下

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

将其标记为Resources Root 目录(此处博主已标记)

配置hbase-site.xml

    <property>
<!--        # 此配置用来存放HBase的数据目录,你不需要事先创建HBase目录,只用保证其父级目录存在。-->
<!--        # 当然,你也可以随意指定这个目录。--><name>hbase.rootdir</name><value>/Users/kturnura/Code/Source/hbase-2.2.2</value></property><property>
<!--        # 此配置是为了跳过版本检查--><name>hbase.defaults.for.version.skip</name><value>true</value></property>

主要是配置hbase.defaults.for.version.skip属性,否则会有一个报错

配置HMaster 启动

在这里插入图片描述

  1. java8 模块

  2. 选择hbase-server子项目

  3. 配置HMaster 所在包位置

  4. HMaster启动选项start

  5. JVM参数

    1. 这个在这里

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

启动时,不需要在本地启动Zookeeper

启动时,不需要在本地启动Zookeeper

启动时,不需要在本地启动Zookeeper

!外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

启动成功,此处hbase的一些数据生成在了hbase-2.2.2目录下

在这里插入图片描述

3. Java API 连接HBase代替 HBase Shell

由于Hbase 2.2.2 的jruby 版本不支持 M1 芯片,详情请看

可以在编译后导入新的Jruby版本使用HBase Shell ,但源码调试比较麻烦

参考博客2

本文暂时使用HBaseUtils 来测试HMaster的连接

这里使用了一个很简单的HBaseUtils

package org.apache.hbase;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.util.Pair;import java.io.IOException;
import java.util.List;public class HBaseUtils {private static Connection connection;static {Configuration configuration = HBaseConfiguration.create();configuration.set("hbase.zookeeper.quorum", "localhost");configuration.set("hbase.zookeeper.property.clientPort","2181");try {connection = ConnectionFactory.createConnection(configuration);}catch (IOException e) {e.printStackTrace();}}/*** 创建Hbase表* @param tableName: 表名* @param columnFamilies : 列族的数组*/public static boolean createTable(String tableName, List<String> columnFamilies) {try {HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();if (admin.tableExists(TableName.valueOf(tableName))) {return false;}TableDescriptorBuilder tableDescriptor = TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName));columnFamilies.forEach(columnFamily -> {ColumnFamilyDescriptorBuilder cfDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(columnFamily));cfDescriptorBuilder.setMaxVersions(1);ColumnFamilyDescriptor familyDescriptor = cfDescriptorBuilder.build();tableDescriptor.setColumnFamily(familyDescriptor);});admin.createTable(tableDescriptor.build());} catch (IOException e) {e.printStackTrace();}return true;}/*** 删除Hbase表* @param tableName: 要删除的表名*/public static boolean deleteTable(String tableName) {try {HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();// 删除表前需要先禁用表admin.disableTable(TableName.valueOf(tableName));admin.deleteTable(TableName.valueOf(tableName));} catch (Exception e) {e.printStackTrace();}return true;}public static boolean isExist(String tableName) {try {HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();if(!admin.tableExists(TableName.valueOf(tableName))){// 表不存在,创建表return false;}else {return true;}} catch (IOException e) {throw new RuntimeException(e);}}/*** 检索全表** @param tableName 表名*/public static ResultScanner getScanner(String tableName) {try {Table table = connection.getTable(TableName.valueOf(tableName));Scan scan = new Scan();return table.getScanner(scan);} catch (IOException e) {e.printStackTrace();}return null;}public static void main(String[] args) {String tableName = "RemoteSensing";// 新建表System.out.println("Test");List<String> columnFamilies = Arrays.asList("info", "data");boolean table = HBaseUtils.createTable(tableName, columnFamilies);System.out.println("表创建结果:" + table);}}

可以运行两次Main方法,看第一次是否创建成功,第二次是否创建失败

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com