Docker容器中HBase Shell按退格键后崩溃问题求助
解决HBase 1.2.4 Shell退格触发ArithmeticException(除以零)的问题
我之前也碰到过一模一样的问题——基于dajobe/hbase-docker构建的HBase 1.2.4容器里,刚打开HBase Shell按退格就直接崩溃,抛出ConsoleReader.java:1414:in 'backspace': java.lang.ArithmeticException: / by zero的错误。这本质是HBase 1.2.x依赖的旧版JLine(通常是2.11)在容器终端环境下的兼容性bug,终端列宽计算异常触发了除以零的逻辑错误。下面给你几个可行的解决方案:
方案1:临时设置终端环境变量(快速生效)
进入容器后,先设置TERM环境变量为容器终端能识别的类型,再启动HBase Shell:
# 进入容器后执行 export TERM=xterm-256color hbase shell
这个方法能让JLine正确识别终端参数,避免列宽计算出错。
方案2:永久配置终端环境变量(一劳永逸)
如果不想每次进入容器都手动设置,可以修改容器的启动脚本或者Dockerfile,把TERM变量默认配置好:
- 打开容器启动脚本
start-hbase.sh,在启动HBase的代码前添加:export TERM=xterm-256color - 重新构建镜像并启动容器:
docker build -t hbase-docker . ./start-hbase.sh
或者直接在Dockerfile里添加一行:
ENV TERM xterm-256color
之后构建的镜像会自动带上这个环境变量,无需每次手动设置。
方案3:升级JLine版本(彻底修复bug)
如果上面的方法都无效,可以升级HBase依赖的JLine版本到修复了该bug的2.14.6版本:
- 进入容器并切换到HBase的lib目录:
docker exec -it hbase bash cd /opt/hbase/lib - 删除旧的JLine jar包:
rm jline-*.jar - 下载修复后的版本:
wget https://repo1.maven.org/maven2/jline/jline/2.14.6/jline-2.14.6.jar - 退出并重启HBase Shell,退格功能就能正常使用了。
内容的提问来源于stack exchange,提问作者Saffik
相关产品推荐
相关产品推荐

