您现在的位置: 控嫩通讯有限公司 > 常见问题 >
HBase Shell 十大花式玩法
      发布时间:2020-04-22 05:19      作者:admin      点击:

原标题:HBase Shell 十大花式玩法

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

饥骋家政服务有限公司

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

1. 交互模式

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

1$ hbase shell

2

3hbase(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$?

30

4

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

6$echo$?

71

3. 使用Ruby脚本1$ hbase org.jruby.Main PATH_TO_

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

1#!/usr/bin/env hbase-jruby

2includeJava

3import org.apache.hadoop.hbase.HBaseConfiguration

4import org.apache.hadoop.hbase.ServerName

5import org.apache.hadoop.hbase.zookeeper.ZKUtil

6import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher

7

8# disable debug/info logging on this for clarity

9log_level = org.apache.log4j.Level::ERROR

10org.apache.log4j.Logger.getLogger( 'org.apache.hadoop.hbase').setLevel(log_level)

11org.apache.log4j.Logger.getLogger( 'org.apache.zookeeper').setLevel(log_level)

12

13config = HBaseConfiguration.create

14

15zk = ZooKeeperWatcher.new(config, 'get-active-master', nil)

16begin

17master_address = ZKUtil.getData(zk, zk.masterAddressZNode)

18ifmaster_address

19puts ServerName.parseFrom(master_address).getHostname

20else

21puts 'Master not running'

22end

23ensure

24zk.close

25end

执行命令如下:

1$ hbase org.jruby.Main get-active-master.rb

2xxxxxxxx.xxx.com.cn

4. 使用Bash脚本

示例1:

1#!/bin/bash

2echo"describe 'test:t1'"| hbase shell -n > tmp.log

3status=$?

4echo"The status was "$status

5if[ $status== 0 ]; then

6echo"The command succeeded"

7else

8echo"The command may have failed."

9fi

示例2:

1#!/bin/bash

2arr=( 'test:t1''test:t2')

3

4fortable in${arr[@]}

5do

6echo'$table'

7hbase shell << EOF

8disable'$table'

9drop '$table'

10exit

11EOF

12done

执行脚本:

1$ sh xxx.sh

5. 读取文本文件

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

1create'test', 'cf'

2list'test'

3put 'test', 'row1', 'cf:a', 'value1'

4put 'test', 'row2', 'cf:b', 'value2'

5put 'test', 'row3', 'cf:c', 'value3'

6put 'test', 'row4', 'cf:d', 'value4'

7scan'test'

8get'test', 'row1'

9disable'test'

10enable'test'

11exit

执行命令如下:

1$ hbase shell ./sample_commands.txt

6. 执行Java代码1hbase(main):001:0>import java.util.Date

2file:/usr/hdp/ 2.6. 5.0- 292/hbase/lib/ruby/jruby-complete- 1.6. 8.jar! /builtin/javasupport/core_ext/object. rb:99warning:already initialized constant Date

3=> Java::JavaUtil::Date

4hbase(main):002:0>Date.new( 1218920189000).toString

5=> "Sun Aug 17 04:56:29 CST 2008"

6

7hbase(main):004:0>import java.text.SimpleDateFormat

8=> Java::JavaText::SimpleDateFormat

9hbase(main):005:0>import java.text.ParsePosition

10=> Java::JavaText::ParsePosition

11hbase(main):006:0>SimpleDateFormat.new( "yy/MM/dd HH:mm:ss").parse( "08/08/16 20:56:29", ParsePosition.new( 0)).getTime

12=> 1218891389000

13

14hbase(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=ZK 0.remote.cluster.example.org,ZK1.remote.cluster.example.org,ZK2.remote.cluster.example.org -Draining= false

2...

3hbase(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"

5hbase(main):002:0>@shell.hbase.configuration.get( "raining")

6=> "false"

9. 表变量

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

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

1hbase(main):000:0>create 'test', 'f'

20row(s) in1.0970seconds

3hbase(main):001:0>put 'test', 'rold', 'f', 'v'

40row(s) in0. 008 0seconds

5hbase(main):002:0>scan 'test'

6ROW COLUMN CELL

7rold column= f:, timestamp= 1378473207660, value=v

81row(s) in0. 0130seconds

9hbase(main):004:0>disable 'test'

100row(s) in14.8700seconds

11hbase(main):005:0>drop 'test'

120row(s) in23.1670seconds

13hbase(main):006:0>

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

1hbase(main) :007> t = create 'test', 'f'

20row(s) in1.0970seconds

3=> Hbase::Table - t

4hbase(main) :008 > t.put 'r', 'f', 'v'

50row(s) in0. 0640seconds

6hbase(main) :009 > t.scan

7ROW COLUMN CELL

8r column= f:, timestamp= 1331865816290, value=v

91row(s) in0. 0110seconds

10hbase(main):038:0>t.disable

110row(s) in6.2350seconds

12hbase(main):039:0>t.drop

130row(s) in0. 2340seconds

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

1hbase(main) :011> create 't', 'f'

20row(s) in1.2500seconds

3

4=> Hbase::Table - t

5hbase(main):012:0>tab = get_table 't'

60row(s) in0. 0010seconds

7

8=> Hbase::Table - t

9hbase(main):013:0>tab.put 'r1', 'f', 'v'

100row(s) in0. 0100seconds

11hbase(main):014:0>tab.scan

12ROW COLUMN CELL

13r1 column= f:, timestamp= 1378473876949, value=v

141row(s) in0. 0240seconds

15hbase(main):015:0>

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

1hbase(main) :016> tables = list( 'ns:t.*')

2TABLE

3t

41row(s) in0. 1040seconds

5

6=> #<#<Class:0x7677ce29> :0x21d377a4>

7hbase(main) :017:0> tables.map { |t|disable t ; drop t}

80row(s) in2.2510seconds

9=> [nil]

10hbase(main):018:0>

10. 开启debug模式

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

方式一:

1hbase( main) :007:0> debug

2DebugmodeisON

3

4hbase( main) :008:0> debug

5DebugmodeisOFF

方式二:

1$ ./bin/hbase shell -d

原标题:真正的“小兵张嘎”:13岁参军,曾手刃100鬼子

原标题:幽默笑话:上次中午吃鱼卡鱼刺了,老婆一度怀疑是因为时辰不对!

记者丨何安安

原标题:2020年《中国水运报》征订开始了!欢迎订阅!

近日,以首家“云上市”身份在上交所挂牌的良品铺子股份有限公司,响应国家号召,不仅及时复工,更发布6500个岗位的全年招聘计划,薪资、待遇均未缩水,其中更包括一些百万年薪、面向全球的“高精尖”岗位。

 
 

Powered by 控嫩通讯有限公司 @2018 RSS地图 html地图

Copyright 站群系统 © 2013-2018 版权所有