前言:工欲善其事必先利其器,今天给大家介绍一下HBase Shell十大花式利器,在日常运维工作中,可以试着用起来。

1. 交互模式

也就是我们最常用到的Shell命令行的方式。

$ hbase shell

hbase(main):001:0> list

2. 非交互模式

$ echo "describe 'test1'" | hbase shell -n
# 结果输出到文件
$ echo "describe 'test1'" | hbase shell -n > tmp.log
# 不打印输出结果
$ echo "describe 'test'" | hbase shell -n > /dev/null 2>&1

与交互模式比较

如果我们想要知道HBase Shell命令执行之后是否成功,那一定要使用非交互模式。因为交互模式执行命令后总是返回0。当执行命令失败后,非交互模式将返回非0数值。如下示例:

$ echo "error cmd" | hbase shell > /dev/null 2>&1
$ echo $?
0 $ echo "error cmd" | hbase shell -n > /dev/null 2>&1
$ echo $?
1

3. 使用Ruby脚本

$ hbase org.jruby.Main PATH_TO_SCRIPT

我们拿HBase bin目录下的get-active-master.rb脚本举例:

#!/usr/bin/env hbase-jruby
include Java
import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.ServerName
import org.apache.hadoop.hbase.zookeeper.ZKUtil
import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher # disable debug/info logging on this script for clarity
log_level = org.apache.log4j.Level::ERROR
org.apache.log4j.Logger.getLogger('org.apache.hadoop.hbase').setLevel(log_level)
org.apache.log4j.Logger.getLogger('org.apache.zookeeper').setLevel(log_level) config = HBaseConfiguration.create zk = ZooKeeperWatcher.new(config, 'get-active-master', nil)
begin
master_address = ZKUtil.getData(zk, zk.masterAddressZNode)
if master_address
puts ServerName.parseFrom(master_address).getHostname()
else
puts 'Master not running'
end
ensure
zk.close()
end

执行命令如下:

$ hbase org.jruby.Main get-active-master.rb
xxxxxxxx.xxx.com.cn

4. 使用Bash脚本

示例1:

#!/bin/bash
echo "describe 'test:t1'" | hbase shell -n > tmp.log
status=$?
echo "The status was " $status
if [ $status == 0 ]; then
echo "The command succeeded"
else
echo "The command may have failed."
fi

示例2:

#!/bin/bash
arr=('test:t1' 'test:t2') for table in ${arr[@]}
do
echo \'$table\'
hbase shell << EOF
disable '$table'
drop '$table'
exit
EOF
done

执行脚本:

$ sh xxx.sh

5. 读取文本文件

假如我的文本文件是sample_commands.txt,内容如下:

create 'test', 'cf'
list 'test'
put 'test', 'row1', 'cf:a', 'value1'
put 'test', 'row2', 'cf:b', 'value2'
put 'test', 'row3', 'cf:c', 'value3'
put 'test', 'row4', 'cf:d', 'value4'
scan 'test'
get 'test', 'row1'
disable 'test'
enable 'test'
exit

执行命令如下:

$ hbase shell ./sample_commands.txt

6. 执行Java代码

hbase(main):001:0> import java.util.Date
file:/usr/hdp/2.6.5.0-292/hbase/lib/ruby/jruby-complete-1.6.8.jar!/builtin/javasupport/core_ext/object.rb:99 warning: already initialized constant Date
=> Java::JavaUtil::Date
hbase(main):002:0> Date.new(1218920189000).toString()
=> "Sun Aug 17 04:56:29 CST 2008" hbase(main):004:0> import java.text.SimpleDateFormat
=> Java::JavaText::SimpleDateFormat
hbase(main):005:0> import java.text.ParsePosition
=> Java::JavaText::ParsePosition
hbase(main):006:0> SimpleDateFormat.new("yy/MM/dd HH:mm:ss").parse("08/08/16 20:56:29", ParsePosition.new(0)).getTime()
=> 1218891389000 hbase(main):003:0>

7. 传递VM参数

可以使用HBase_Shell_OPTS环境变量将VM选项传递给HBase Shell。可以在环境中设置它,例如编辑~/.bashrc,或者将其设置为启动HBase Shell命令的一部分。下面的示例设置了几个与垃圾回收相关的变量,这些变量只在运行HBase Shell的VM的生存期内使用。该命令应在一行上运行,但为了可读性,它被\字符打断。

$ HBASE_SHELL_OPTS="-verbose:gc -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps \
-XX:+PrintGCDetails -Xloggc:$HBASE_HOME/logs/gc-hbase.log" hbase shell

8. 配置覆盖

以下版本hbase-2.0.5/hbase-2.1.3/hbase-2.2.0/hbase-1.4.10/hbase-1.5.0,通过在命令行上传递以-D为前缀的键/值,可以传递或重写hbase-*.xml中指定的hbase配置,如下所示:

$ hbase shell -Dhbase.zookeeper.quorum=ZK0.remote.cluster.example.org,ZK1.remote.cluster.example.org,ZK2.remote.cluster.example.org -Draining=false
...
hbase(main):001:0> @shell.hbase.configuration.get("hbase.zookeeper.quorum")
=> "ZK0.remote.cluster.example.org,ZK1.remote.cluster.example.org,ZK2.remote.cluster.example.org"
hbase(main):002:0> @shell.hbase.configuration.get("raining")
=> "false"

9. 表变量

HBase 0.95添加了为表提供jruby样式的面向对象引用的shell命令。以前,作用于表的所有shell命令都有一个过程样式,该样式始终将表的名称作为参数。HBase 0.95引入了将表分配给jruby变量的功能。表引用可用于执行数据读写操作,如放置、扫描和获取,以及管理功能,如禁用、删除和描述表。

例如,以前您总是指定一个表名:

hbase(main):000:0> create 'test', 'f'
0 row(s) in 1.0970 seconds
hbase(main):001:0> put 'test', 'rold', 'f', 'v'
0 row(s) in 0.0080 seconds
hbase(main):002:0> scan 'test'
ROW COLUMN+CELL
rold column=f:, timestamp=1378473207660, value=v
1 row(s) in 0.0130 seconds
hbase(main):004:0> disable 'test'
0 row(s) in 14.8700 seconds
hbase(main):005:0> drop 'test'
0 row(s) in 23.1670 seconds
hbase(main):006:0>

现在,可以将表分配给一个变量,并在jruby shell代码中使用结果。

hbase(main):007 > t = create 'test', 'f'
0 row(s) in 1.0970 seconds
=> Hbase::Table - t
hbase(main):008 > t.put 'r', 'f', 'v'
0 row(s) in 0.0640 seconds
hbase(main):009 > t.scan
ROW COLUMN+CELL
r column=f:, timestamp=1331865816290, value=v
1 row(s) in 0.0110 seconds
hbase(main):038:0> t.disable
0 row(s) in 6.2350 seconds
hbase(main):039:0> t.drop
0 row(s) in 0.2340 seconds

如果表已创建,则可以使用get_table方法将表分配给变量:

hbase(main):011 > create 't','f'
0 row(s) in 1.2500 seconds => Hbase::Table - t
hbase(main):012:0> tab = get_table 't'
0 row(s) in 0.0010 seconds => Hbase::Table - t
hbase(main):013:0> tab.put 'r1' ,'f', 'v'
0 row(s) in 0.0100 seconds
hbase(main):014:0> tab.scan
ROW COLUMN+CELL
r1 column=f:, timestamp=1378473876949, value=v
1 row(s) in 0.0240 seconds
hbase(main):015:0>

列表功能也得到了扩展,以便它以字符串形式返回表名列表。然后可以使用jruby根据这些名称编写表操作脚本。list_snapshots命令的作用也类似。

hbase(main):016 > tables = list('ns:t.*')
TABLE
t
1 row(s) in 0.1040 seconds => #<#<Class:0x7677ce29>:0x21d377a4>
hbase(main):017:0> tables.map { |t| disable t ; drop t}
0 row(s) in 2.2510 seconds
=> [nil]
hbase(main):018:0>

10. 开启debug模式

可以在shell中设置调试开关,以便在运行命令时看到更多的输出,例如更多的异常堆栈跟踪:

方式一:

hbase(main):007:0> debug
Debug mode is ON hbase(main):008:0> debug
Debug mode is OFF

方式二:

$ ./bin/hbase shell -d

转载请注明出处!欢迎关注本人微信公众号【HBase工作笔记】

HBase Shell 十大花式玩儿法的更多相关文章

  1. 选择阿里云数据库HBase版十大理由

    根据Gartner的预计,全球非关系型数据库(NoSQL)在2020~2022预计保持在30%左右高速增长,远高于数据库整体市场. 阿里云数据库HBase版也是踏着技术发展的节奏,伴随着NoSQL和大 ...

  2. 大数据技术之_11_HBase学习_01_HBase 简介+HBase 安装+HBase Shell 操作+HBase 数据结构+HBase 原理

    第1章 HBase 简介1.1 什么是 HBase1.2 HBase 特点1.3 HBase 架构1.3 HBase 中的角色1.3.1 HMaster1.3.2 RegionServer1.3.3 ...

  3. 大数据学习路线分享-Hbase shell的基本操作完整流程

    HBase的命令行工具,最简单的接口,适合HBase管理使用,可以使用shell命令来查询HBase中数据的详细情况.安装完HBase之后,启动hadoop集群(利用hdfs存储),启动zookeep ...

  4. Hadoop HBase概念学习系列之hbase shell中执行java方法(高手必备)(二十五)

    hbase shell中执行java方法(高手必备),务必掌握! 1. 2. 3. 4. 更多命令,见scan help.在实际工作中,多用这个!!! API参考: http://hbase.apac ...

  5. 云计算与大数据实验:Hbase shell终端操作之数据操作一

    [实验目的] 1)学会向表中添加记录 2)学会添加记录时动态添加列 3)学会查看一条记录 4)学会查看表中的记录总数 5)学会删除记录 [实验原理] Hbase shell作为Hbase数据的客户端, ...

  6. 云计算与大数据实验:Hbase shell基本命令操作

    [实验目的] 1)了解hbase服务 2)学会启动和停止服务 3)学会进入hbase shell环境 [实验原理] HBase是一个分布式的.面向列的开源数据库,它利用Hadoop HDFS作为其文件 ...

  7. 云计算与大数据实验:Hbase shell操作用户表

    [实验目的] 1)了解hbase服务 2)学会hbase shell命令操作用户表 [实验原理] HBase是一个分布式的.面向列的开源数据库,它利用Hadoop HDFS作为其文件存储系统,利用Ha ...

  8. 云计算与大数据实验:Hbase shell操作成绩表

    [实验目的] 1)了解hbase服务 2)学会hbase shell命令操作成绩表 [实验原理] HBase是一个分布式的.面向列的开源数据库,它利用Hadoop HDFS作为其文件存储系统,利用Ha ...

  9. 入门大数据---HBase Shell命令操作

    学习方法 可以参考官方文档的简单示例来 点击查看 可以直接在控制台使用help命令查看 例如直接使用help命令: 从上图可以看到,表结构的操作,表数据的操作都展示了.接下来我们可以针对具体的命令使用 ...

随机推荐

  1. 阅读GitHub源码的正确打开方式

    前言 近来发现阅读开源项目上手就整最新的代码不合适,缺少项目迭代的具体实现过程,想着若是可以看到针对问题的提交代码就好了,所以就有了本篇博客. 以文主要涉及:如何fork开源项目,如何保证本地仓库代码 ...

  2. postman使用简介

    postman进行Http类型的接口测试的功能测试(手工测试): 1.postman下载,解压,打开Chrome浏览器-->设置-->扩展程序-->勾选开发者模式-->加载已解 ...

  3. Caused by: java.lang.IllegalArgumentException

    Caused by: java.lang.IllegalArgumentException 是因为jdk较高而项目需要的是低版本的问题 1.将idea或idea里的语言级别调到适合自己项目的版本比如安 ...

  4. A Systems-Level Characterization of the Differentiation of Human Embryonic Stem Cells into Mesenchymal Stem Cells (解读人:王欣然)

    文献名:A Systems-Level Characterization of the Differentiation of Human Embryonic Stem Cells into Mesen ...

  5. Angular2入门(一)

    原先用vue.js写的项目,最近领导要求改用Angular,于是开始自学之路.网上搜索了众多资料,包括谷歌原版书籍,但是Angular自从17年开始分为AngularJs和Angular两个版本,相差 ...

  6. 浅谈VUE,使用watch方法监听父组件传到子组件的数据。

    props:['updateData'], data(){ return{ form: { _name:'', }, } }, 第一步接收数据: props:['updateData']   第二步动 ...

  7. Hive内外表的区分方法及内外部差异

    Hive内外部区分方法 查看hive元数据:进入mysql中hive元数据库,查看TBLS表,查看对应的表名和表类型: 在hive-cli界面:desc extended tablename,查看Ta ...

  8. iphone ios app互相调用

    正好要做这个,记录一下 1.ios应用程序间互相启动 2.网页如何调用自己的app http://www.dotblogs.com.tw/yang5664/archive/2012/11/24/850 ...

  9. 震惊!程序员的福音!不需要敲代码就能完成复杂的逻辑应用? —— Azure Logic App

    (大家看完标题可能以为是营销号,哈哈哈哈哈哈哈哈哈...客官请留步, 正经博主....好吧) 今天我们的主题是Azure Logic Apps Azure Logic Apps 是什么? 官方解释:h ...

  10. Windows下命令行MySQL安装

    通过zip压缩包文件直接安装 1.下载链接 https://dev.mysql.com/downloads/mysql/ 下载好后解压移动文件夹 2.配环境变量 path路径追加 3.创建初始化文件 ...