Hbase shell命令

时间:2012-09-07 11:36:47

标签: hbase

我有一个愚蠢的Hbase问题,但是长时间困扰我。 当我登录Hbase shell时发出以下命令:

[jack@HOST117-20 bin]$ ./hbase shell
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.94.0, r1332822, Tue May  1 21:43:54 UTC 2012

hbase(main):001:0>scon mytable

我发现我无法删除命令,例如,如果我输入错误的命令“scon”,那么我就不能使用Backspace或Delete按钮来删除命令,我必须重新输入。 提前致谢

3 个答案:

答案 0 :(得分:3)

您可能在Windows上使用secureCRT。我在这个配置中遇到了同样的问题。我切换到PuTTY,问题消失了。如果您仍想使用SecureCRT,我找到了一种解决方法 - 转到会话配置并在仿真部分使用终端“Linux”,现在在HBase Shell中,您可以使用Ctrl-backspace来执行“退格”作业。

答案 1 :(得分:1)

我遇到了同样的问题,发现即使使用标准的irb也可以通过输入以下命令行来重现该问题(我通过阅读/usr/lib/hbase/bin/hbase找到了这个命令行)。

$ java -cp \
    ~/.m2/repository/org/jruby/jruby-complete/1.6.5/jruby-complete-1.6.5.jar \
    org.jruby.Main /usr/bin/irb

因此,根本原因不存在于HBase shell中,而是存在于JRuby中,并且进一步调查显示JRuby 1.6.5使用的JLine中存在根本原因。

首先,我创建了〜/ .jlinebindings.properties文件并在其中放置了“Rubout:backward-delete-char”,希望退格键可以“删除光标后面的一个字符”,但它不起作用。更糟糕的是,.jlinebindings.properties文件的存在清除了其他键绑定(例如箭头键的绑定),所以我删除了.jlinebindings.properties。我尝试将键绑定设置添加到〜/ .jline.rc和〜/ .inputrc,但它们也不起作用。

我检查了JLine2源代码以进一步调查,发现最新版本的JLine2不支持.jlinebindings.properties文件。但是,支持.jline.rc。因此,我编译了最新的JLIne2源代码,将密钥绑定到.jline.rc文件并指定JLine2库(target / jline-2.10-SNAPSHOT.jar)作为classpath的第一个元素,但它不起作用。使用新构建的JLine2库,JRuby 1.6.5抛出了IncompatibleClassChangeError。这意味着JLine2已更改其API并破坏了向后兼容性。

接下来,我查看了JRuby源代码并将其编译如下。

# JRuby compilation requires ant
$ yum install ant

# Without this, compilation fails.
$ yum install ant-apache-regexp

$ git clone https://github.com/jruby/jruby.git

# Check the latest version
$ git tag

$ git checkout 1.7.1
$ mvn install

使用新的JRuby二进制文件,我再次调用命令行。

$ java -cp \
    ~/.m2/repository/org/jruby/jruby-complete/1.7.1/jruby-complete-1.7.1.jar \
    org.jruby.Main /usr/bin/irb

但是,它引发了SyntaxError。

SyntaxError: file:/home/admin/.m2/repository/org/jruby/jruby-complete/1.7.1/jruby-complete-1.7.1.jar!/META-INF/jruby.home/lib/ruby/1.9/irb/lc/ja/encoding_aliases.rb:7: syntax error, unexpected kEND

end
  ^
         eval at org/jruby/RubyKernel.java:1066
    real_load at jar:file:/home/admin/.m2/repository/org/jruby/jruby-complete/1.7.1/jruby-complete-1.7.1.jar!/META-INF/jruby.home/lib/ruby/1.9/irb/locale.rb:134
         load at jar:file:/home/admin/.m2/repository/org/jruby/jruby-complete/1.7.1/jruby-complete-1.7.1.jar!/META-INF/jruby.home/lib/ruby/1.9/irb/locale.rb:110
   initialize at jar:file:/home/admin/.m2/repository/org/jruby/jruby-complete/1.7.1/jruby-complete-1.7.1.jar!/META-INF/jruby.home/lib/ruby/1.9/irb/locale.rb:32
  init_config at jar:file:/home/admin/.m2/repository/org/jruby/jruby-complete/1.7.1/jruby-complete-1.7.1.jar!/META-INF/jruby.home/lib/ruby/1.9/irb/init.rb:114
        setup at jar:file:/home/admin/.m2/repository/org/jruby/jruby-complete/1.7.1/jruby-complete-1.7.1.jar!/META-INF/jruby.home/lib/ruby/1.9/irb/init.rb:16
        start at jar:file:/home/admin/.m2/repository/org/jruby/jruby-complete/1.7.1/jruby-complete-1.7.1.jar!/META-INF/jruby.home/lib/ruby/1.9/irb.rb:53
       (root) at /usr/bin/irb:13

在encoding_aliases.rb中一定有问题(或者新的JRuby已经做了一些改变,打破了向后兼容性),但我没有考虑进行调查,所以添加了LANG = C作为解决方法。

$ LANG=C java -cp \
    ~/.m2/repository/org/jruby/jruby-complete/1.7.1/jruby-complete-1.7.1.jar \
    org.jruby.Main /usr/bin/irb

这成功调用了irb,我可以确认退格按预期工作。 maven / jruby-core / pom.xml说JRuby 1.7.1引用的JLIne版本是2.7。

作为最后一步,我试图通过执行以下操作让HBase shell使用新的JRuby。

$ cd /usr/lib/hbase/lib
$ mv jruby-complete-1.6.5.jar{,.backup}
$ cp ~/.m2/repository/org/jruby/jruby-complete/1.7.1/jruby-complete-1.7.1.jar .
$ hbase shell

但是,HBase shell没有启动。而是发出以下错误消息。

include_class is deprecated. Use java_import.
include_class is deprecated. Use java_import.
include_class is deprecated. Use java_import.
12/12/28 18:03:12 WARN conf.Configuration: hadoop.native.lib is deprecated. Instead, use io.native.lib.available
NoMethodError: undefined method `getTerminal' for Java::Jline::Terminal:Module
  refresh_width at /usr/lib/hbase/bin/../bin/../lib/ruby/shell/formatter.rb:34
     initialize at /usr/lib/hbase/bin/../bin/../lib/ruby/shell/formatter.rb:47
         (root) at /usr/lib/hbase/bin/../bin/hirb.rb:108

这些错误消息表明在/ usr / lib / hbase / lib下替换jruby-complete - * .jar并不能解决问题。

所以,我放弃并得出结论,没有简单的解决方法可以解决这个问题。我的最后结论是,我们必须等待HBase专家用新的JRuby更新HBase shell实现。

答案 2 :(得分:0)

我考试时遇到了同样的问题。我在Win 7框中以xterm模式使用SecureCRT来连接到CentOS 6.3 Linux服务器。

我安装了hbase和东西,然后我发现我的退格键和删除键都向右删除了。所以,@ Jack,我猜你的退格没有被破坏,只是它起到了另一个删除键的作用,而不是它的正常行为(向左删除)。

我找到了一个解决方案:使用Ctrl + Backspace左删除。它对我来说就像一个魅力。所以,如果你在过去的2年里没有找到解决办法,你应该试试这个;)

不过,虽然我发现了这种解决方法,但我仍然不知道为什么会这样。如果有人知道这个问题的原因(irb的错误或SecureCRT的错误设置?),请告诉我。谢谢!