cdh界面 hue 配置hbase_海量数据存储技术之HBase:使用HBase Shell操纵HBase

9adc616b54da34dcbf60c0e60731e4f8.png

Apache HBase Shell是JRuby的IRB,并在此基础上加入了HBase特有的命令。

JRuby是用Java实现的Ruby解释器。通过JRuby,你可以在JVM上直接运行Ruby程序,调用Java的类库。

IRB即interactive ruby,交互式Ruby。

运行HBase Shell:$ ./bin/hbase shell

例如,我使用CDH搭建的Hadoop集群,并且安装了HBase;登录后,在集群上直接使用命令:hbase shell

b27fb67720be4d307485cb5d308643c2.png

输入命令:help ,然后回车,可以看到对各种命令的简单描述。

7573b3141db548391698cd7fbc286f67.png

输入命令:help "COMMAND" 可看具体信息。

例:help "move"

8a3937585ffa6386cc37d8e8af5e01c1.png

常用命令举例:

1) 查看表结构

desc '表名'

62b2ecd2fc5e731383d7bb2039019f57.png

2)执行大合并

major_compact '表名'

3)列出Region

list_regions '表名'

0f13c50bee044ebd34510871c21e1035.png

看的不是很清晰,取一条:

SERVER_NAME:

bg87.cnki.com,16020,1539856447742

REGION_NAME:CNKI_Search201702,1412*1487792102000#1170222153901497888|4170222193201735373$,1539880666725.bbe3ff87712f654cb29a05243229effe.

START_KEY:1412*1487792102000#1170222153901497888|4170222193201735373$

END_KEY:

358*1487455399000#1161229194701353797|5170218220001766105$

SIZE:957

REQ:4705

LOCALITY:1.0

还可以有选择性的输出信息,例如只输出服务器名称,起始键

list_regions 'testtable', {}, ['SERVER_NAME', 'start_key','end_key']

52032e9ae92939f6c0a921a38b3a0075.png

4)移动Region

move 'ENCODED_REGIONNAME', 'SERVER_NAME'

找到ENCODED_REGIONNAME:

从REGION_NAME中找,上例中倒数第二个句点后的一段就是,即bbe3ff87712f654cb29a05243229effe

例:

move '8a5e97bcb910be18cf6f9e07f59816c6','bg84.cnki.com,16020,1539856459310'

5)修改表结构

例:将表CNKI_Search201701的COMPRESSION都改为snappy

alter 'CNKI_Search201701',{NAME => 'im', COMPRESSION => 'snappy'}, {NAME => 'fw', COMPRESSION => 'snappy'},{NAME => 'wf', COMPRESSION => 'snappy'}

6)列出所有表:

list

7) 查询表行数

count '表名'

1使用Ruby编写脚本

在HBase的bin目录下可以找到以rb为后缀的脚本文件,为了运行这个脚本,可以使用命令

$ ./bin/hbase org.jruby.Main PATH_TO_SCRIPT

PATH_TO_SCRIPT是脚本路径。

让我看看bin目录下的ruby脚本。

67ad8beae5310da70b80fe38c79740ec.png

其实切换到bin目录下,使用下面的命令也是可以的。

$ hbase-jruby SCRIPT

例如,$ hbase-jruby get-active-master.rb

让我们看看hbase-jruby这个文件里有啥:

12020e563be83a1668c74f11d455ad17.png

看,它其实封装了org.jruby.Main。

2以非交互模式运行Shell

非交互模式会捕获HBase Shell命令退出的状态(成功或失败),如果使用普通模式,那么HBase Shell总是返回它自己的执行状态,大多数时候返回代表成功的数字0。

使用-n或--non-interactive选项开启非交互模式。

fba44f05e354e586a5c084fb1901a20d.png

不过我使用CDH安装的HBase长时间无法返回。

ebf2a06477dd76e089c911c6fa682ed8.png

3操作系统脚本中的HBase Shell

你可以在操作系统脚本中使用HBase Shell,比如Bash shell,这种大多数Linux和Unix默认的交互式命令接口。以下准则使用Bash语法,但可以调整,使其可同C样式的shell一起使用,例如csh或tcsh,而且经过调整后,还可以和Microsoft Windows 脚本解释器一起使用。

注意:以这种方式生成 HBase Shell 命令的速度很慢,所以要注意何时将HBase 操作与操作系统命令行相结合是合适的。

例,将命令传递给HBase Shell

使用echo命令和|(管道)操作,以非交互模式将命令传递给HBase Shell。务必要转义HBase命令中的字符,否则shell将会解释这些字符。

$ echo "describe 'test1'" | ./hbase shell -n

如果想抑制所有输出,使用下面的命令:

$ echo "describe 'test'" | ./hbase shell -n > /dev/null 2>&1

例,检查脚本命令执行结果

由于脚本没有设计成交互式执行,所以需要一种方法来检查命令是否执行成功。成功执行的命令返回0,失败的命令返回非零值。Bash将命令的返回值存储在一个名为 $? 的特殊环境变量中。因为每次shell执行任何命令时都会为该变量重新赋值,所以应该将结果存储在另一个脚本定义的变量中。

不过,我们还应注意,成功执行的脚本返回值一定是0,但返回值非零不一定代表失败。因为RPC(远程过程调用)命令是无状态的,所以有可能是客户端连接断开了,或者受其他是他事件的影响。最好的办法就是,检查执行结果,比如,你创建了一张表,但shell返回了一个非零值,那么你查下这个表是否已经存在了。

下面的这个脚本展示了一种存储返回值的方法并根据返回值做出决定。

914abfdd71e88ccf5b9221443e17413d.png

4从命令文件读取HBase Shell命令

在txt文本中写HBase Shell命令,一行一个命令,例如:

2f84e9f391defcca7c6ae35a6bfeb926.png

例,引导HBase Shell执行命令

将命令文件的路径作为传递给hbase shell的唯一参数,如果脚本中不包含exit命令,则会返回提示符。无法以编程方式检查每个单独的命令是否成功。

6a8311496a385c344e04b546229c5ad5.png

5传递VM选项给Shell

使用HBASE_SHELL_OPTS环境变量将VM选项传递给HBase Shell 。在你的环境中进行设置HBASE_SHELL_OPTS,例如通过编辑 〜/ .bashrc,或将其设置为启动HBase Shell 的命令的一部分。下面的示例设置了几个与垃圾回收相关的变量,仅用于VM运行HBase Shell的时候。可以将命令写成一行,如果命令很长的话,也可以使用字符将命令分隔为多行。

f75a2f61e0aeac1f9bd68ad609dbc6a4.png

6重写配置文件启动HBase Shell

像hbase-2.0.5/hbase-2.1.3/hbase-2.2.0/hbase-1.4.10/hbase-1.5.0这几个版本的HBase,通过传递带有-D前缀的键值对,可以传递或重写hbase-*.xml中的配置项,

325c6520dbe86404422e894fc89e1b61.png

7 Shell技巧

表变量

HBase 0.95增加了面向对象jruby风格的表引用Shell,以前所有的HBase Shell命令都是面向过程风格的,它总是把表名当做参数传递给命令。HBase 0.95引入了将表看做jruby变量这一特性,表引用可以用于数据读写操作,如put, scan, get,禁用表,删表,描述表等。

HBase 0.95之前,你会这样写命令:

e5e45fdf2968fd37d78f1363541e9f55.png

从HBase 0.95版本开始,你会这样写命令,就是讲一个表赋给一个变量:

9ce90fb9a97e72fb42b9fce37960168d.png

如果一个表已经创建了,可以使用get_table方法将其赋给一个变量

52bc05762adf51c78f719a40f66a52ab.png

list命令也被扩展了,它能将表名集合拼接成字符串返回。可以使用jruby根据表名来操作表。list_snapshots命令与此相似。

d5f9ec6723f3f27855b5d81fd3fdc63d.png

irbrc文件

在主目录下创建一个irbrc文件,添加自定义项,比较有用的是,记录历史命令。然后可以跨Shell调用。

8de76a6100e96678dea53934aceab5c6.png

如果不想将每个表达式的结果打印到stderr,可以这样做,例如list命令返回的表集合。

fc2e54e17af4cc1244eb5c6ef7c53e49.png

日志数据的时间戳

从HBase日志文件中,将08/08/16 20:56:29,这种格式的日期转换为时间戳

1a74b203ac5dd2f08e7996f2c47f6971.png

再转成日期形式

ccc106e90ef632d1e70a92d30f86f6ed.png

Shell查询配置

0e63ee6cba934af6dfe54355fcf998cd.png

在Shell中设置配置

25b2b2ceeeae0e4911828f6b4f8888da.png

使用HBase Shell预分裂表

使用HBase Shell的create命令创建表时,可使用各种选项预先拆分表。

最简单的方法是在创建表格时指定一个分割点数组。请注意,当将字符串直接量指定为分割点时,将根据字符串所代表的字节形式创建分割点。所以将“10”指定分割点,实际上指定“x3130”为分割点。

分割点集合将定义n+1个区域,其中n是分割点的数量。最低的区域包含了所有第一个分隔点之前的所有可能最低的键值,但不包含第一个分割点;下一个区域将包含从第一个分割点开始的键值,但不包括下一个分割点键值。以此类推,直到最后一个分割点。最后一个区域将从最后一个分割点开始直到最后的所有可能的最大键值。

b2f1ce7f7f6a8070238942da48f61e9b.png

在上面的例子中,将使用列族 "f" 创建表 "t1",预先拆分为四个区域。注意,第一个区域将包含从“x00”到“x30”(因为“x31”是“1”的 ASCII 码)的所有键值。

可以使用文件传递分割点。下面的例子中,从本地文件系统的文件中读取分割点。文件中,一行指定一个分割点键值。

77f58fcb430641ac1839ea5e9bc81a1b.png

其他选项是根据所需的区域数量和分割算法自动分割。HBase提供基于均匀拆分或十六进制密钥的分割键值范围算法,也可以提供自己的拆分算法来细分键值范围。

3f7cabb85c6b733e8ea5af1292f61cdd.png

HBase Shell实际是Ruby环境,可以使用Ruby脚本写分割算法。

d6dbe031ca52117e76b1f44f1bbd3f51.png

请注意,HBase Shell中的truncate命令在删除并重建具有默认选项的表时会将任何预分割都丢弃。如果需要truncate预分割的表,删除并重建表的时候,必须显式地指定自定义分割选项。

调试

可以设置调试开关,以便可以输出更多信息。例如想看到更多的异常栈追踪信息,那么使用下面的命令:

hbase> debug

设置日志级别为DEBUG,使用下面的命令:

$ ./bin/hbase shell -d

Count命令

使用count查询表大小时,指定正确的CACHE会查的更快

hbase> count '', CACHE => 1000

上面,一次拉取1000行。行数越多设置CACHE越小,默认一次取一行。


英文官方文档见:http://hbase.apache.org/book.html#shell

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434292.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓 图像清晰度识别_智能车牌识别系统的常见故障和解决方法

车牌号是车辆的唯一身份标志,它的特殊性与重要性从而决定了车牌识别系统在智慧城市交通管理系统中成为不可或缺的重要组成部分。下面智能车牌识别系统厂家畅荧智能科技将详细为您介绍一些智能车牌识别系统常见的故障问题和对应的解决方法。智能车牌识别系统的常见故…

post postman 传递数组对象_如何使用postman做接口测试

一,接口测试是什么什么是接口测试,不说广泛的概念,直接电脑打开浏览器,进入开发者工具(F12)随意进入一些网站可以看到下面左侧栏出现了一系列的数据:上面条数据都是一个单独的接口,点击单个接口&#xff0c…

形位公差符号大全_玩转CAD快捷键(大全),一篇文章就够了

CAD快捷键命令大全符号键(CTRL开头)CTRL1 PROPCLOSEOROPEN 对象特性管理器CTRL2或4 ADCENTER 设计中心CTRL3 CTOOLPALETTES 工具选项板CTRL8或QC QuickCalc 快速计算器控制键CTRLA AI_SELALL 全部选择CTRLC或CO/CP COPYCLIP或COpy 复制CTRLD或F6 COORDIN…

k近邻算法_K近邻(knn)算法是如何完成分类的?

摘要:K近邻算法是机器学习中的一个非常基础的算法。本文通过自生成数据,通过绘图的方式演示KNN算法的思路,让你不看数学公式就看了解什么是KNN算法。关键词:KNN算法1 生成一个二分类的数据集本文很多内容参考文献[1]。先生成一个两…

登录不上_《盗贼之海》登录不上?还在傻傻等待,快来让我教教你

大家都对这款海盗题材的游戏《盗贼之海》有兴趣了吧,相信大家都入手了它,但是也有很多朋友在入手后遇见了很多问题,别怕,今天干货来了,手把手教你。保证你流畅游戏,快人一步。我看见很多朋友都在问&#xf…

苹果X可以升级5G吗_苹果x可以用5g网络吗

随着5G网络的逐渐商用,越来越多5G原型机和量产机都即将推出,那么苹果iPhone X能够支持5G网络吗?下面就为您带来苹果iPhone x可以用5G网络吗的相关介绍,希望以上的介绍能够帮助到您。苹果x可以用5g网络吗1、iPhone X并不支持5G网络…

提交显示成功但是没有看到文件_如何向RTThread提交一个BSP?

RT-Thread今天的快速发展和所取得成绩,离不开所有开发者的持续贡献和社区小伙伴的竭力支持。一、前言今年6月,我在一款智能混合型的FPGA芯片上,完成了RT-Thread的移植,并向RT-Thread提交了一个完整的BSP,后续又根据审查…

WinForm中使用WPF的控件

在WinForm中可以使用WPF中的控件,或者由WPF创建的自定义控件; 步骤1:创建WinForm工程; 步骤2:在WinForm工程的解决方案资源管理器中,在刚刚创建的WinForm解决方案中新建或者添加现有的WPF用户控件工程&…

docker php composer 使用_「PHP编程」如何使用Docker制作自己的LNMP/LAMP镜像

LNMP和LAMP是PHP常用的两种运行环境,L代表Linux,N代表Nginx,A代表Apache,M代表Mysql,P代表PHP。在文章《「PHP编程」安装开发环境太烦?告诉你几个简单方法,分分钟搞定》中我们介绍了&#xff0c…

中天数相减获得差_Power BI 了解DAX中LASTDATE和MAX之间的区别

许多刚开始使用DAX的小伙伴在使用LASTDATE搜索某个时间段内的最后日期。或者他们使用NEXTDAY检索给定日期之后的日期。尽管这些函数可以实现它们所承诺的功能,但它们并不打算在简单的表达式中使用。相反,它们是设计用于时间智能计算的表函数。错误地使用…

python gif_python 将png图片格式转换生成gif动画

先看知乎上面的一个连接 用Python写过哪些【脑洞大开】的小工具? 这个哥们通过爬气象网站的气象雷达图,生成一个gif的动态图。非常有趣且很实用,那咱也实现下。 我们先实现一个从GIF提取帧的代码 我们这有个gif代码如下: from PIL…

HTTP代理原理以及HTTP隧道技术

通过HTTP协议与代理服务器建立连接,协议信令中包含要连接到的远程主机的IP和端口号,如果有需要身份验证的话还需要加上授权信息,服务器收到信令后首先进行身份验证,通过后便与远程主机建立连接,连接成功之后会返回给客…

goland环境配置_Goland辅助工具goimports和gomodules

1、goimports工具goimports工具是Go官方提供的一种工具,它能够为我们自动格式化 Go 语言代码并对所有引入的包进行管理,包括自动增删依赖的包引用、将依赖包按字母序排序并分类。我们在使用Goland IDE的时候,建议使用goimports工具。它具备包…

石头剪刀布python代码_python实现石头剪刀布程序

本文实例为大家分享了python实现石头剪刀布的具体代码,供大家参考,具体内容如下 概述: 如果你和我一样是一个有着其他语言基础的编程者,那我想这个小程序对于你来说是小case。由于本人初学Python,就先拿这个熟悉熟悉一…

ubuntu/wireshark --Lua: Error during loading: [string /usr/share/wireshark/init.lua]:45问题解决

错误如下: 解决方案:修改init.lua 直接运行wireshark的话会报错: Lua: Error during loading: [string "/usr/share/wireshark/init.lua"]:45: dofile has been disabled 要对其进行修改,终端运行 sudo gedit /usr…

ubuntu下IP、DNS配置

一、配置ip ubuntu的网络配置信息放在 /etc/network/interfaces 中,如果配置动态获取ip,则在上述文件中加入以下内容:auto eth0iface eth0 inet dhcp如果配置静态ip,则添加如下内容:auto eth0 iface eth0 inet statica…

python向空列表添加列表_Python列表核心知识点汇总

千里之行,始于足下。要练成一双洞悉一切的眼睛,还是得先把基本功扎扎实实地学好。今天带大家仔细温习一下Python的列表。温故而知新,不亦说乎。当然,温习的同时也要发散思考,因为有些看似无关紧要的、约定俗成的语言习…

sharepoint2010的弹出等待提示的对话框

根据MSDN的资料。我做了个测试&#xff0c;代码如下&#xff1a; <% Assembly Name"$SharePoint.Project.AssemblyFullName$" %> <% Assembly Name"Microsoft.Web.CommandUI, Version14.0.0.0, Cultureneutral, PublicKeyToken71e9bce111e9429c" …

java中输出值保留四位小数_Java工程师(3).变量和数据类型

变量什么是变量变量是内存中的一块存储空间&#xff0c;用于保存Java程序准备使用的数据。可以为变量赋予一个简短并易于记忆的名字方便我们使用变量的值。int 变量的声明因为经常要保存一些数据&#xff0c;所以变量是很常用的。使用变量必须先声明变量&#xff1a;int 变量的…

扫描路径_npj: 纳米团簇表面的自动扫描—吸附位点和扩散路径

海归学者发起的公益学术平台分享信息&#xff0c;整合资源交流学术&#xff0c;偶尔风月金属纳米团簇常用于催化&#xff0c;因具有较高的分散性&#xff0c;应用领域不断扩大。与较大的金属纳米颗粒相比&#xff0c;其固有活性通常要高出数倍。这种高出的催化活性主要归因于其…