Likefr 2023-08-26 02:01 采纳率: 33.3%
浏览 183
已结题

hbase 2.5.5 新版本 shell 无法使用

hbase 2.5.5 新版本 提示hbase shell 移除了 不在提供原有的命令操作

顺便说一下我的Hadoop 版本是3.3.5
在windows环境下
当我 输入 hbase shell 提示如下信息

img

a future release.
  This file has been superceded by packaging our ruby files into a jar
  and using jruby's bootstrapping to invoke them. If you need to
  source this file fo some reason it is now named 'jar-bootstrap.rb' and is
  located in the root of the file hbase-shell.jar and in the source tree at
  'hbase-shell/src/main/ruby'.

这段提示告诉我目录下 有一个 hbase-shell.jar 包 但是没法执行

img

因为想要执行预分区命令
现在什么命令也没法使用

或者说java api 能不能修改表的分区

怎么在不降级的情况下 使用呢

  • 写回答

6条回答 默认 最新

  • CF2301_77400554X 2023-08-26 02:07
    关注

    引用chatgpt内容作答:
    从你提供的信息来看,HBase 2.5.5 版本的 Shell 已经不再提供原有的命令操作,而是将 Ruby 文件打包成了一个名为 hbase-shell.jar 的 JAR 文件,并通过 jruby 进行调用。这意味着你无法像以前那样直接在命令行中输入 HBase Shell 命令了。

    如果你想在不降级的情况下使用 HBase 2.5.5 版本进行预分区命令操作,你可以尝试以下方法:

    1、使用 JRuby 脚本: 找到 hbase-shell.jar 所在的目录,查看是否有一个名为 jar-bootstrap.rb 的文件。你可以尝试运行这个脚本来启动 HBase Shell,并在脚本中编写你所需要的命令。

    2、使用 HBase Java API: 如果 HBase Shell 不再适用,你可以考虑使用 HBase 的 Java API 来进行表的分区操作。通过 Java API,你可以编写 Java 程序来执行所需的操作,包括预分区。这需要一些编程知识,但是可以更灵活地控制和定制操作。

    下面是一个简单的示例,演示如何使用 HBase Java API 创建一个预分区表:

    import org.apache.hadoop.hbase.HBaseConfiguration;
    import org.apache.hadoop.hbase.TableName;
    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.TableDescriptor;
    import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
    import org.apache.hadoop.hbase.util.Bytes;
    
    import java.io.IOException;
    
    public class HBasePartitioningExample {
        public static void main(String[] args) throws IOException {
            // Create HBase configuration and connection
            org.apache.hadoop.conf.Configuration config = HBaseConfiguration.create();
            try (Connection connection = ConnectionFactory.createConnection(config)) {
                Admin admin = connection.getAdmin();
    
                // Define table descriptor
                TableName tableName = TableName.valueOf("your_table_name");
                TableDescriptor tableDescriptor = TableDescriptorBuilder.newBuilder(tableName)
                        .setColumnFamily(TableDescriptorBuilder.DEFAULT_COLUMN_FAMILY)
                        .setRegionSplitPolicyClassName("org.apache.hadoop.hbase.regionserver.KeyPrefixRegionSplitPolicy")
                        .build();
    
                // Create table with pre-defined regions
                byte[][] splitKeys = {
                        Bytes.toBytes("key1"),
                        Bytes.toBytes("key2"),
                        Bytes.toBytes("key3")
                        // Add more split keys as needed
                };
                admin.createTable(tableDescriptor, splitKeys);
                System.out.println("Table created with pre-defined regions.");
            }
        }
    }
    

    上述示例仅为演示如何使用 Java API 进行预分区操作。实际使用时,你需要根据你的数据和需求进行适当的调整。

    请确保在运行 Java 程序时,你的类路径中包含了正确的 HBase 相关 JAR 包,并根据需要进行配置。

    展开全部

    评论
  • 专家-赤兔[在线] 全栈领域优质创作者 2023-08-26 02:19
    关注

    引用 皆我百晓生 小程序回复内容作答:

    根据你提供的信息,HBase 2.5.5 版本已移除了 hbase shell 工具,因此无法直接使用原来的命令操作。相反,HBase 现在将其 Ruby 文件打包到一个 jar 文件中,并使用 jruby 来引导执行这些文件。

    根据提示信息,你可以在 HBase 的根目录下找到 hbase-shell.jar 包,并在其中找到“jar-bootstrap.rb”文件。你可以使用以下命令运行HBase shell:

    java -jar hbase-shell.jar
    

    这样就可以使用 HBase shell 进行交互了。然后,你可以使用 Java API 修改表的分区。你可以使用org.apache.hadoop.hbase.client.Admin对象来进行对表的修改操作,具体步骤如下:

    1. 获取 HBase 连接:
    Configuration configuration = HBaseConfiguration.create();
    configuration.set("hbase.zookeeper.quorum", "localhost");
    Connection connection = ConnectionFactory.createConnection(configuration);
    
    1. 获取 Admin 对象:
    Admin admin = connection.getAdmin();
    
    1. 修改表的分区:
    TableName tableName = TableName.valueOf("your_table_name");
    ModifyTableRequest modifyTableRequest = new ModifyTableRequest(tableName);
    modifyTableRequest.setAddColumnFamily(new HColumnDescriptor("your_column_family_name"));
    
    admin.modifyTable(modifyTableRequest);
    

    以上代码将分区表中添加一个新的列族。你可以根据实际需求修改其他表属性。

    希望对你有帮助!

    评论
    Likefr 2023-08-26 02:31

    我文章里说了 java -jar hbase-shell.jar 没有办法执行

    回复
    专家-赤兔[在线] 回复 Likefr 2023-08-26 02:45

    引用 皆我百晓生 小程序回复内容作答:

    非常抱歉,可能是我之前的回答有误。在 HBase 2.5.5 中,hbase shell 确实已经被移除了。目前,HBase 推荐使用 HBase shell 的替代工具——HBase shell2。

    要使用 HBase shell2,你需要按照以下步骤操作:

    1. 确保你已经安装了 HBase 2.5.5,并且设置了正确的环境变量。
    2. 打开命令提示符(cmd)或终端,并输入以下命令启动 HBase shell2:
    hbase shell2
    

    这样就可以开始使用 HBase shell2 进行交互了。

    关于使用 Java API 修改表的分区,你可以使用 HBase 的 Admin API 进行操作。

    回复
    Likefr 回复 专家-赤兔[在线] 2023-08-26 02:53

    hbase-shell2 提示没有这个命令 我的环境配置是对的

    回复
  • magic33416563 2023-08-26 02:25
    关注

    版本问题

    评论
  • Jackyin0720 2023-08-26 08:22
    关注

    参考结合GPT4.0、文心一言,如有帮助,恭请采纳。

    你需要使用 Ruby 和 JRuby 进行重写。
    1、找到 'jar-bootstrap.rb' 文件:这个文件位于 HBase Shell JAR 文件的根目录下,或者在 HBase 源代码的 'hbase-shell/src/main/ruby' 目录下
    通过命令行运行 'jar-bootstrap.rb' 文件:你可以使用以下命令来运行该文件:java -jar hbase-shell.jar ruby jar-bootstrap.rb

    评论
  • Java毕设王 2023-08-26 09:01
    关注

    Java API 设置 HBase 表的预分区:

    import org.apache.hadoop.hbase.HBaseConfiguration;
    import org.apache.hadoop.hbase.TableName;
    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.HBaseAdmin;
    import org.apache.hadoop.hbase.util.Bytes;
    
    public class HBasePartitionExample {
        public static void main(String[] args) throws Exception {
            // Configuration
            org.apache.hadoop.conf.Configuration config = HBaseConfiguration.create();
    
            // Create connection
            Connection connection = ConnectionFactory.createConnection(config);
            Admin admin = connection.getAdmin();
    
            // Define table name and column family
            TableName tableName = TableName.valueOf("your_table_name");
            byte[] columnFamily = Bytes.toBytes("cf");
    
            // Define split keys (example)
            byte[][] splitKeys = {
                Bytes.toBytes("key1"),
                Bytes.toBytes("key2"),
                // Add more split keys as needed
            };
    
            // Create table with pre-defined split keys
            HBaseAdmin hBaseAdmin = (HBaseAdmin) admin;
            hBaseAdmin.createTable(new org.apache.hadoop.hbase.HTableDescriptor(tableName)
                    .addFamily(new org.apache.hadoop.hbase.HColumnDescriptor(columnFamily)),
                splitKeys);
    
            // Close resources
            admin.close();
            connection.close();
        }
    }
    
    
    

    展开全部

    评论
  • 杨得江-君临天下wyj 2023-08-26 09:41
    关注
    
    import org.apache.hadoop.hbase.HBaseConfiguration;
    import org.apache.hadoop.hbase.TableName;
    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.TableDescriptor;
    import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
    import org.apache.hadoop.hbase.util.Bytes;
    import java.io.IOException;
    public class HBasePartitioningExample {
        public static void main(String[] args) throws IOException {
            // Create HBase configuration and connection
            org.apache.hadoop.conf.Configuration config = HBaseConfiguration.create();
            try (Connection connection = ConnectionFactory.createConnection(config)) {
                Admin admin = connection.getAdmin();
                // Define table descriptor
                TableName tableName = TableName.valueOf("your_table_name");
                TableDescriptor tableDescriptor = TableDescriptorBuilder.newBuilder(tableName)
                        .setColumnFamily(TableDescriptorBuilder.DEFAULT_COLUMN_FAMILY)
                        .setRegionSplitPolicyClassName("org.apache.hadoop.hbase.regionserver.KeyPrefixRegionSplitPolicy")
                        .build();
                // Create table with pre-defined regions
                byte[][] splitKeys = {
                        Bytes.toBytes("key1"),
                        Bytes.toBytes("key2"),
                        Bytes.toBytes("key3")
                        // Add more split keys as needed
                };
                admin.createTable(tableDescriptor, splitKeys);
                System.out.println("Table created with pre-defined regions.");
            }
        }
    }
    
    

    展开全部

    评论
编辑
预览

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月27日
  • 创建了问题 8月26日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部