转载请注明出处:https://blog.csdn.net/l1028386804/article/details/88817432
在HBase上进行脚本编程
比如:创建包含两个列族、两个列的表,并插入一些数据,脚本如下:
vim hbasescript.script
create 'table','data'
for i in '0' ... '2' do
for j in '0' ... '2' do
for k in '0' ... '2' do
put 'table', "row-#{i}#{j}#{k}", "data:column#{j}#{k}", "name#{j}#{k}"
end
end
end
执行脚本:
hbase shell hbasescript.script
上面脚本会向表中插入27行记录,当然,我们也可以写脚本向表中加载数据,或者执行各种操作,比如将文本或者CSV文件内容插入表中。
也可以直接登录HBase shell执行命令:
hbase> for i in '0' ... '5' do \
hbase>* put "utable", "rowKey_#{i}", "address:address", "address#{i}" \
hbase>* end
上述脚本会在utable表中插入6行数据。
不登录HBase Shell也可以执行建表语句
echo "create 'tableToCreate', 'colFamily'" | hbase shell
下面的脚本用于扫描表中两个指定行之间的数据
vim scanTable.sh
#!/bin/bash
TableToScan=$1
RowStart=$2
RowEnd=$3
exec hbase shell << EOF
scan "${TableToScan}", {STARTROW => "${RowStart}", STOPROW => "${RowEnd}"}
EOF
可以执行./scanTable.sh emptable row100 row1000, 这会返回emptable表中row100到row1000之间的数据。
.irbrc文件
可以配置.irbrc文件实现HBase shell清屏,保存历史命令等功能。如果此文件不存在于用户的home目录,我们可以创建此文件,将下面的配置复制进去,就可以实现HBase shell清屏并保存历史命令:
1.在home目录下,打开.irbrc并加入如下代码:
vim .irbrc
#Clear HBase shell command
def clear
system('clear')
end
hadoop_home = "<your hadoop home path here>"
#Enabled hostory(commands executed previously will be preserved) in hbase shell
require "irb/ext/save-history"
#No. of commands to be saved. 50 here
IRB.conf[:SAVE_HISTORY] = 50
# The location to save the history file
IRB.conf[:HISTORY_FILE] = "#{ENV['HOME']}/.irb-save-history"
#List given HDFS path from hbase shell
def ls(path)
hadoop_home = '<your hadoop home path here>'
directory = "/" + path
system("#{hadoop_home}/hadoop fs -ls #{directory}")
end
#<hadoop home path> is the full path of the hadoop directory
Kernel.at_exit do
IRB.conf[:AT_EXIT].each do |i|
i.call
end
end
2.保存文件,打开HBase shell,执行clear和ls命令
hbase> clear
hbase> ls(directory ls)
3.可以将命令赋给变量,并使用:
hbase> var = create 'table', 'colFam'
4.现在可以使用var对table进行操作:
hbase> var.scan
也可以使用put、get命令
5.如果表已经创建了,直接将表赋给变量:
hbase> var = get_table 'table'
6.现在可以使用var对表进行操作:
hbase> var.scan
hbase> var.put 'row', 'colfam:name', 'shashwat'
hbase> var.disable
获取时间戳
通过HBase shell,可以将日期和时间转化成HBase的时间戳,在一些HBase命令中可以使用此时间戳:
hbase> import java.text.SimpleDateFormat
hbase> import java.text.ParsePosition
hbase> SimpleDateFormat.new("").parse("",ParsePosition.new(0)).getTime()
比如下面的例子:
hbase> SimpleDateFormat.new("yyyy-MM-dd HH:mm:ss").parse("2019-03-26 12:30:00", ParsePosition.new(0)).getTime()
在get命令的时候可以指定时间戳
get 'tableToGetDateFrom', 'row1', {COLUMN => 'colFam:Name', TIMESTAMP => 1571890624312}
也可以将时间戳转化成日期和时间:
hbase> import java.util.Date
hbase> Date.new(1571890624312).toString()
开启调试
hbase> debug
或者
hbase shell -d