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

1. 交互模式

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

  1. $ hbase shell
  2. hbase(main):001:0> list

2. 非交互模式

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

与交互模式比较

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

  1. $ echo "error cmd" | hbase shell > /dev/null 2>&1
  2. $ echo $?
  3. 0
  4. $ echo "error cmd" | hbase shell -n > /dev/null 2>&1
  5. $ echo $?
  6. 1

3. 使用Ruby脚本

  1. $ hbase org.jruby.Main PATH_TO_SCRIPT

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

  1. #!/usr/bin/env hbase-jruby
  2. include Java
  3. import org.apache.hadoop.hbase.HBaseConfiguration
  4. import org.apache.hadoop.hbase.ServerName
  5. import org.apache.hadoop.hbase.zookeeper.ZKUtil
  6. import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher
  7. # disable debug/info logging on this script for clarity
  8. log_level = org.apache.log4j.Level::ERROR
  9. org.apache.log4j.Logger.getLogger('org.apache.hadoop.hbase').setLevel(log_level)
  10. org.apache.log4j.Logger.getLogger('org.apache.zookeeper').setLevel(log_level)
  11. config = HBaseConfiguration.create
  12. zk = ZooKeeperWatcher.new(config, 'get-active-master', nil)
  13. begin
  14. master_address = ZKUtil.getData(zk, zk.masterAddressZNode)
  15. if master_address
  16. puts ServerName.parseFrom(master_address).getHostname()
  17. else
  18. puts 'Master not running'
  19. end
  20. ensure
  21. zk.close()
  22. end

执行命令如下:

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

4. 使用Bash脚本

示例1:

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

示例2:

  1. #!/bin/bash
  2. arr=('test:t1' 'test:t2')
  3. for table in ${arr[@]}
  4. do
  5. echo \'$table\'
  6. hbase shell << EOF
  7. disable '$table'
  8. drop '$table'
  9. exit
  10. EOF
  11. done

执行脚本:

  1. $ sh xxx.sh

5. 读取文本文件

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

  1. create 'test', 'cf'
  2. list 'test'
  3. put 'test', 'row1', 'cf:a', 'value1'
  4. put 'test', 'row2', 'cf:b', 'value2'
  5. put 'test', 'row3', 'cf:c', 'value3'
  6. put 'test', 'row4', 'cf:d', 'value4'
  7. scan 'test'
  8. get 'test', 'row1'
  9. disable 'test'
  10. enable 'test'
  11. exit

执行命令如下:

  1. $ hbase shell ./sample_commands.txt

6. 执行Java代码

  1. hbase(main):001:0> import java.util.Date
  2. 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
  3. => Java::JavaUtil::Date
  4. hbase(main):002:0> Date.new(1218920189000).toString()
  5. => "Sun Aug 17 04:56:29 CST 2008"
  6. hbase(main):004:0> import java.text.SimpleDateFormat
  7. => Java::JavaText::SimpleDateFormat
  8. hbase(main):005:0> import java.text.ParsePosition
  9. => Java::JavaText::ParsePosition
  10. hbase(main):006:0> SimpleDateFormat.new("yy/MM/dd HH:mm:ss").parse("08/08/16 20:56:29", ParsePosition.new(0)).getTime()
  11. => 1218891389000
  12. hbase(main):003:0>

7. 传递VM参数

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

  1. $ HBASE_SHELL_OPTS="-verbose:gc -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps \
  2. -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配置,如下所示:

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

9. 表变量

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

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

  1. hbase(main):000:0> create 'test', 'f'
  2. 0 row(s) in 1.0970 seconds
  3. hbase(main):001:0> put 'test', 'rold', 'f', 'v'
  4. 0 row(s) in 0.0080 seconds
  5. hbase(main):002:0> scan 'test'
  6. ROW COLUMN+CELL
  7. rold column=f:, timestamp=1378473207660, value=v
  8. 1 row(s) in 0.0130 seconds
  9. hbase(main):004:0> disable 'test'
  10. 0 row(s) in 14.8700 seconds
  11. hbase(main):005:0> drop 'test'
  12. 0 row(s) in 23.1670 seconds
  13. hbase(main):006:0>

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

  1. hbase(main):007 > t = create 'test', 'f'
  2. 0 row(s) in 1.0970 seconds
  3. => Hbase::Table - t
  4. hbase(main):008 > t.put 'r', 'f', 'v'
  5. 0 row(s) in 0.0640 seconds
  6. hbase(main):009 > t.scan
  7. ROW COLUMN+CELL
  8. r column=f:, timestamp=1331865816290, value=v
  9. 1 row(s) in 0.0110 seconds
  10. hbase(main):038:0> t.disable
  11. 0 row(s) in 6.2350 seconds
  12. hbase(main):039:0> t.drop
  13. 0 row(s) in 0.2340 seconds

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

  1. hbase(main):011 > create 't','f'
  2. 0 row(s) in 1.2500 seconds
  3. => Hbase::Table - t
  4. hbase(main):012:0> tab = get_table 't'
  5. 0 row(s) in 0.0010 seconds
  6. => Hbase::Table - t
  7. hbase(main):013:0> tab.put 'r1' ,'f', 'v'
  8. 0 row(s) in 0.0100 seconds
  9. hbase(main):014:0> tab.scan
  10. ROW COLUMN+CELL
  11. r1 column=f:, timestamp=1378473876949, value=v
  12. 1 row(s) in 0.0240 seconds
  13. hbase(main):015:0>

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

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

10. 开启debug模式

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

方式一:

  1. hbase(main):007:0> debug
  2. Debug mode is ON
  3. hbase(main):008:0> debug
  4. Debug mode is OFF

方式二:

  1. $ ./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. SpringCloud微服务:Sentinel哨兵组件,管理服务限流和降级

    源码地址:GitHub·点这里||GitEE·点这里 一.基本简介 1.概念描述 Sentinel 以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度保护服务的稳定性.包括核心的独立类库,监 ...

  2. ASP.NET MVC5实现芒果分销后台管理系统(二):Code First快速集成EntityFramework

    在上一篇文章中,我们已经搭建了整个芒果后台管理系统整个工程架构,并集成了AutoMapper,日志组件等,接下来我们将使用Entity Framework完善系统的持久化存储部分.这篇EF的构造,我将 ...

  3. video.js 视频自动全屏播放

    1.头部引用脚本 <link href="css/video-js.min.css" rel="stylesheet"> <link href ...

  4. 1. python跨目录调用模块

    快速镜像安装第三方库 :  pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy (三方库名字) 同目录下,我们可以直接调用模块, ...

  5. Mol Cell Proteomics. | Integration and analysis of CPTAC proteomics data in the context of cancer genomics in the cBioPortal (解读人:徐洪凯)

    文献名:Integration and analysis of CPTAC proteomics data in the context of cancer genomics in the cBioP ...

  6. mvc+ef入门(三)

    (1)新建一个DAL层用来放置Accountcontext.cs和Accountinitializer.新建一个models层用来归放sysuser,sysrole和sysuserrole,三个类.( ...

  7. 【攻防世界】simple-unpack

    知识:upx脱壳 simple-unpack 难度系数: 3.0 题目来源: 暂无 题目描述:菜鸡拿到了一个被加壳的二进制文件 提示说有壳子:然后用PE分析发现是ELF upx的壳子

  8. UNIX环境高级编程——TCP/IP网络编程 常用网络信息检索函数

    UNIX环境高级编程——TCP/IP网络编程   常用网络信息检索函数 gethostname()   getppername()   getsockname()   gethostbyname() ...

  9. Convert JS object to JSON string

    Modern browsers (IE8, FF3, Chrome etc.) have native JSON support built in (Same API as with JSON2). ...

  10. 字节码类库之Javassist

    Javassist优势 – 比反射开销小,性能高.–javassist性能高于反射,低于ASM运行时操作字节码可以让我们实现如下功能:– 动态生成 新的类– 动态改变某个类的结构 ( 添加 / 删除 ...