Macos M1 IDEA本地调试 HBase 2.2.2

news2024/11/30 6:40:48

# 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方法,看第一次是否创建成功,第二次是否创建失败

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

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

相关文章

视频监控汇聚算法平台训练站车辆类型算法分析车辆类型检测应用方案

车辆类型检测算法是计算机视觉和深度学习技术在交通管理和智能车辆系统中的重要应用之一。这种算法通过自动分析和识别车辆图像&#xff0c;能够准确判断车辆的类型&#xff0c;如轿车、SUV、货车等。 运用方案 数据采集与预处理 采集包含车辆的图像或视频数据&#xff0c;包…

AI制作PPT软件哪个好?这个国产Gamma工具真心推荐!

各种AI工具层出不穷&#xff0c;尤其是办公领域&#xff0c;诞生了诸多可让办公提效的AI工具&#xff0c;如AI制作PPT软件&#xff0c;笔者亲自体验过多款AI制作PPT软件&#xff0c;在权衡多个维度之后&#xff0c;最终选择了博思AIPPT。 博思AIPPT&#xff0c;是新一代的AI制…

CAPL在创建套接字时不绑定端口号时需要注意的地方

在CAPL中我们使用UdpOpen()和TcpOpen()两个函数创建Socket套接字,传入IP地址和Port口绑定IP地址和Port口,作为发送报文时的源IP地址和源Port口。 如果对源IP地址和源Port口没有要求,不需要绑定IP地址和Port口,可以在调用UdpOpen()和TcpOpen()时传入0,如此套接字绑定的IP地…

Numpy基本操作

1.什么是Numpy NumPy 是一个用于 Python 编程语言的开源库&#xff0c;它的主要功能是支持大型多维数组和矩阵&#xff0c;并提供了大量的数学函数来操作这些数组。NumPy 是 Python 科学计算生态系统的核心组成部分之一&#xff0c;广泛应用于数据分析、科学计算、机器学习等领…

海运专线面对的难题主要有哪些?突破口在哪里?

随着跨境电商的不断发展&#xff0c;跨境海运收益增加的同时&#xff0c;也面临着不少难题。 一、高昂的运输成本 由于跨境运输涉及多个国家和地区的多个运输环节&#xff0c;包括起运国、中转国和目的国&#xff0c;因此运输费用、中转费用、保险费用等都会累加&#xff0c;…

视频编辑与制作软件哪个好 视频编辑与制作软件哪个好学

学习剪辑技术&#xff0c;就是在学视频编辑软件的用法。选择一款适合自己的视频编辑与制作软件&#xff0c;能让你少走很多弯路。优秀的视频编辑软件&#xff0c;不仅能让用户快速掌握视频编辑的基本操作&#xff0c;还可以激发用户的创作灵感。有关视频编辑与制作软件哪个好&a…

【Qt】 编辑框 | 按钮 | 坐标系 的 初步了解

文章目录 1. 编辑框图形化方式纯代码方式 2. 按钮图形化方式 3. 坐标系 1. 编辑框 这里以实现 hello world 为例 即 使用 编辑框 完成 Hello World 图形化方式 单行编辑框 QLineEdit 多行编辑框 QTextEdit 点击 widget.ui 并打开 调用 Qt designer 这个图形化工具 完成窗口…

生信分析入门:从基础知识到实践操作的全方位指南

随着生物学研究的数字化转型&#xff0c;生物信息学&#xff08;简称生信&#xff09;分析已经成为现代生命科学研究中的关键工具。对于刚开始接触生信分析的初学者来说&#xff0c;这个领域可能看起来复杂而陌生。然而&#xff0c;通过系统的学习和实践&#xff0c;生信分析可…

ISO 26262中的失效率计算:IEC 61709-Clause16_Relays

目录 概要 1 元器件分类和基准温度 2 失效率的计算 2.1 失效率预测模型 2.2 电应力系数 2.2.1 电应力区域划分 2.2.2 电应力系数选择 2.3 转换率系数 2.3.1 转换率系数计算 2.4 温度应力系数 2.4.1 温度应力系数计算模型 2.4.2 温度应力系数计算 概要 IEC 61709是…

百元蓝牙耳机哪一款好用?四款价格亲民高性价比耳机产品推荐

如果说当代最伟大的音频设备创新&#xff0c;蓝牙耳机绝对算得上是一款既便捷又实用的科技神器。它不需要繁琐的线路连接&#xff0c;只需要轻轻一戴&#xff0c;就能让你随时随地沉浸在高质量的音乐或通话体验中。最重要的是&#xff0c;它的无线设计让我们的生活更加自由无拘…

Opencv-C++笔记 (20) : 距离变换与分水岭的图像分割

文章目录 一、图片分割分水岭算法理解分水岭算法过程 二、距离变换与分水岭距离变换常见算法有两种分水岭变换常见的算法步骤 主要函数c代码四、结果展示 一、图片分割 图像分割(Image Segmentation)是图像处理最重要的处理手段之一 图像分割的目标是将图像中像素根据一定的规则…

linux定时自启动shell脚本

linux定时自启动shell脚本 前言操作问题 前言 需要设计一个脚本用来定时清理linux磁盘空间&#xff0c;自启动 操作 1.在指定目录编写shell脚本 给脚本加权限 chmod 755 origin_del.sh 或者 chmod x origin_del.sh 2.打开定时 执行 crontab -e 输入 0 0 * * * /home/o…

【极限性能,尽在掌控】ROG NUC:游戏与创作的微型巨擘

初见ROG NUC&#xff0c;你或许会为它的小巧体型惊讶。然而&#xff0c;这看似不起眼的机身内&#xff0c;蕴藏着游戏、创意的强大能量。 掌中风暴&#xff0c;性能无界 ROG NUC搭载英特尔高性能处理器&#xff0c;配合高速NVMe SSD固态硬盘以及可选的高端独立显卡&#xff08…

电子工程师必备:万用表测量电阻的正确方法

在电子学和电气工程领域&#xff0c;测量电阻是一项基本技能。无论是进行电路调试还是故障排除&#xff0c;了解如何使用万用表测量电阻都是至关重要的。下面就跟着道合顺来一起了解#万用表测量电阻的详细方法#指南。 一、理解电阻与万用表 什么是电阻&#xff1f; 电阻是导…

【python数据分析11】——Pandas统计分析(分组聚合进行组内计算)

分组聚合进行组内计算 前言1、groupby方法拆分数据2、agg方法聚合数据3、apply方法聚合数据4、transform方法聚合数据5 小案例5.1 按照时间对菜品订单详情表进行拆分5.2 使用agg方法计算5.3 使用apply方法统计单日菜品销售数目 前言 依据某个或者几个字段对数据集进行分组&…

Linux驱动开发基础(匹配详解)

所学来自百问网 目录 1. 简介 2. 函数路径 3. driver_override 4. 设备树匹配 5. id_table 6. name 7. 比较顺序 1. 简介 platform_device 与 platform_driver是挂载在platform_bus_type总线下的两条链表&#xff0c;通过分离的思想负责不同的功能实现&#xff0c;两者…

AMD巨资收购ZT Systems,加速AI芯片市场竞争

AMD大手笔收购&#xff0c;剑指AI芯片市场 AMD近期宣布了一项重大收购计划&#xff0c;将以49亿美元的价格收购服务器制造商ZT Systems。这是AMD自2022年收购Xilinx以来最大规模的一笔交易&#xff0c;旨在通过扩大AI芯片和硬件产品组合&#xff0c;进一步增强与英伟达在AI领域…

KEIL微库MicroLIB与程序大小

不使用微库MicroLIB Program Size: Code23010 RO-data16190 RW-data1076 ZI-data21412 使用微库 Program Size: Code17356 RO-data15636 RW-data1076 ZI-data20804 Code&#xff1a; -5654 字节RO-data &#xff1a;-554 字节RW-data &#xff1a;0 字节&#xff08;没有变化&…

【案例51】内存溢出分析实战

一、问题现象 在使用 NC 过程中发现&#xff0c;系统时不时就不可用&#xff0c;一直在转圈。 通过浏览器访问系统时&#xff0c;页面长时间无法加载。 二、环境信息 系统为 NC 单点环境&#xff0c;在线人数为 30 人左右。 JDK版本如图也是正常的。 三、问题分析 在发现…

【系统架构设计师-2018年】案例分析-答案及详解

试题一&#xff08;25分&#xff09; 阅读以下关于软件系统设计的叙述&#xff0c;在答题纸上回答问题1至问题3。 【说明】 某文化产业集团委托软件公司开发一套文化用品商城系统&#xff0c;业务涉及文化用品销售、定制、竞拍和点评等板块&#xff0c;以提升商城的信息化建设…