为了避免每次连接都要输入密码,可以把本地密钥配置到hbase的服务器上:
# 如果没有密钥对,可以使用 ssh-keygen 命令在本地生成
# 获取本地密钥
cat ~/.ssh/id_rsa.pub
# 服务器添加密钥
vim ~/.ssh/authorized_keys
# 或者直接使用ssh-copy-id 命令将本地生成的公钥复制到远程服务器
ssh-copy-id username@remote_server_ip
可以通过“远程命令执行”实现对远程服务器的操作。基本语法如下:
ssh uasername@hostname 'your_command_here'
'your_command_here'替换为需要在远程服务器执行的实际命令。 在远程命令执行时,如果命令本身包含了引号,需要对引号进行适当的转义或者使用不同的引号来避免解析错误。
在 Linux 中,可以使用 echo
命令的 -e
选项来解释转义字符,并将其传递给管道操作符 |
,以便将结果传递给 HBase shell 命令。在Linux中,管道操作符 |
(竖线符号)用于连接两个命令,将一个命令的输出作为另一个命令的输入。这样可以构建复杂的命令序列,使得多个命令可以相互协作完成任务。具体实现如下:
Windows系统下bat脚本:
@echo off
# 设置hbase服务器地址
set "HBASE_HOST=xxx.xx.xx.x"
# 设置hbase安装路径
set "HBASE_PATH=/home/package/hbase-2.3.0/bin/hbase"
# 设置表名前缀,用于过滤要删除的表
set "TABLE_PREFIX=my-.*"
# 先禁用表
echo disable table...
ssh root@%HBASE_HOST% "echo -e 'disable_all \"^%TABLE_PREFIX%\"\ny' | %HBASE_PATH% shell -n"
echo drop table...
ssh root@%HBASE_HOST% "echo -e 'drop_all \"^%TABLE_PREFIX%\"\ny' | %HBASE_PATH% shell -n"
echo list table
ssh root@%HBASE_HOST% "echo -e 'list_all \"^%TABLE_PREFIX%\"\ny' | %HBASE_PATH% shell -n"
echo done!
Linux系统下sh脚本:
# 设置hbase服务器地址
HBASE_HOST="xxx.xx.xx.x"
# 设置hbase安装路径
HBASE_PATH="/home/package/hbase-2.3.0/bin/hbase"
# 设置表名前缀,用于过滤要删除的表
TABLE_PREFIX="my-.*"
# 先禁用表
echo "disable table..."
ssh root@${HBASE_HOST} 'echo -e "disable_all \"'${TABLE_PREFIX}'\"\ny" | '${HBASE_PATH}' shell -n'
echo "drop table..."
ssh root@${HBASE_HOST} 'echo -e "drop_all \"'${TABLE_PREFIX}'\"\ny" | '${HBASE_PATH}' shell -n'
echo "list table..."
ssh root@${HBASE_HOST} 'echo -e "list_all \"'${TABLE_PREFIX}'\"\ny" | '${HBASE_PATH}' shell -n'