无法在Mac中运行hbase shell

问题描述 投票:0回答:1

我已经安装了zookeeper和Hbase并启动了Hbase。它的运行我可以查看网络用户界面。

当我开始通过 hbase shell 引入它时,我无法连接到 hbase shell

HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
For Reference, please visit: http://hbase.apache.org/2.0/book.html#shell
Version 2.5.7, r6788f98356dd70b4a7ff766ea7a8298e022e7b95, Thu Dec 14 15:59:16 PST 2023
Took 0.0000 seconds                                                                                                                                                                                                   
NotImplementedError: fstat unimplemented unsupported or native support failed to load; see https://github.com/jruby/jruby/wiki/Native-Libraries
  initialize at org/jruby/RubyIO.java:1015
        open at org/jruby/RubyIO.java:1156
  initialize at uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/irb/input-method.rb:141
  initialize at uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/irb/context.rb:70
  initialize at uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/irb.rb:410
  initialize at uri:classloader:/irb/hirb.rb:50
      <main> at classpath:/jar-bootstrap.rb:225

出现此错误。

HBase版本:2.5.7
Java 版本:11

hbase jruby hbase-shell
1个回答
-1
投票

按照错误消息中的链接到https://github.com/jruby/jruby/wiki/Native-Libraries,我们看到它说:

fstat 未实现

如果出现 NotImplementedError: fstat unimplemented unsupported or native support failed to load 失败

如果您继续使用 -Djruby.native.verbose=true 运行它,并且显示 java.lang.UnsatisfiedLinkError: 无法从 /tmp 执行或加载 jffi 二进制存根。将 TMPDIR 或 Java 属性 java.io.tmpdir 设置为未安装“noexec”的读/写路径。 jffi...因此无法从共享对象映射段:不允许操作然后[请参阅此处]了解更多信息(https://github.com/jruby/jruby/issues/1302#issuecomment-840735752)。

先不考虑格式问题,让我们点击该链接。它导致了对标题为“当 /tmp 不可写时,JRuby 无法加载 FFI 支持并出现模糊错误”的问题的评论(由用户rdp),内容如下:

对我来说(使用 jruby-complete-jar)设置 TEMPDIR 等。似乎不起作用。当运行 jruby-9.2.17.0/bin/jruby (可执行文件)时它工作得“很好”,但在使用 jar 时则不然,那么它需要 java -Djava.io.tmpdir=... -jar 指向可执行文件目录(或者从您具有可执行+写入权限的目录运行它,或者拥有具有可执行权限的 /tmp)。现在可以了:)

下面还有来自 JRuby 开发者headius的评论,他说:

基于这篇 SO 文章,除非通过属性指定,否则非 Windows 上的默认临时目录似乎始终是 /tmp,并且不会查看任何环境变量。然而,Windows 会查看 TMP 以及可能的其他位置(注册表?)。

环境变量来控制java.io.tmpdir?

根据阅读这些评论,您问题的可能根本原因似乎是:

  1. 您的
    /tmp
    目录不可被您运行的用户写入(或者存在其他权限问题,阻止 Java / JRuby 使用它来存储临时文件);和
  2. 您尚未将
    -Djava.io.tmpdir=/path/to/temp/dir
    JVM 选项传递给
    java
    可执行文件,或以其他方式设置
    java.io.tmpdir
    Java 系统属性 以指向临时文件的可用目录。 (您可能有一个 Unix 环境变量,例如
    TMPDIR
    指向这样的目录,但显然 Java 不尊重这些环境变量。)

(至少)纠正这两个原因之一,您的错误应该希望消失。

(有关运行 JRuby 时设置 JVM 选项,另请参阅 https://github.com/jruby/jruby/wiki/JRuby-Java-Options-Files

© www.soinside.com 2019 - 2024. All rights reserved.