hbase shell 进入hbase命令行 list 显示HBASE表 status 系统上运行的服务器的细节和系统的状态 version 返回HBase系统使用的版本 table_help 引导如何使用表引用的命令 whoami 返回当前HBase用户 # 建表 create \'base_test\',\'personal data\',\'professional data\' disable \'emp\' 禁用表 enable可以重新启用 is_disabled \'table name\' 查看表是否被禁用 disable_all \'r.*\' 禁用一系列表 describe \'emp\' 表描述 alter \'t1\', NAME => \'f1\', VERSIONS => 5 单元的最大数目设置为5 # 使用alter,可以设置和删除表范围,运算符,如MAX_FILESIZE,READONLY,MEMSTORE_FLUSHSIZE,DEFERRED_LOG_FLUSH等。 alter \'emp\', READONLY 设置表为只读 alter \'t1\', METHOD => \'table_att_unset\', NAME => \'MAX_FILESIZE\' alter \'table name\', \'delete\'=> \'column family\' # 删除列簇 alter \'employee\',\'delete\'=>\'professional\' exists \'emp\' 判断表是否存在 drop \'emp\' 删除表,删除表之前必须先禁用表 drop_all \'t.*\' 批量删除 put \'emp\',\'1\',\'personal data:name\',\'raju\' 插入数据 put \'emp\',\'1\',\'personal data:city\',\'hyderabad\' put \'emp\',\'1\',\'personal data:city\',\'Delhi\' 更新row=1,personal data=city数据的值为Delhi get \'emp\', \'1\' 查询数据 get \'emp\', \'1\', {COLUMN=>\'personal data:name\'} 查询指定行、指定列 delete \'emp\', \'1\', \'personal data:city\' 删除数据 deleteall \'emp\',\'1\' 删除所有数据 count \'emp\' 统计表的行数 truncate \'table name\' 禁止删除并重新创建一个表 grant <user> <permissions> [<table> [<column family> [<column; qualifier>]] R - 代表读取权限 W - 代表写权限 X - 代表执行权限 C - 代表创建权限 A - 代表管理权限 grant \'Tutorialspoint\', \'RWXCA\' revoke命令用于撤销用户访问表的权限 revoke \'Tutorialspoint\' user_permission \'emp\' 列出了emp表的所有用户权限。 # 新增列簇要先声明 disable \'emp\' alter \'emp\', NAME => \'daily\', VERSIONS =>1 enable \'emp\' # 为新列簇加入数据 put \'emp\',\'2017-11-30\',\'module:headline\',\'375683\' put \'emp\',\'2017-11-30\',\'module:community\',\'101464\' put \'emp\',\'2017-11-30\',\'module:car\',\'443372\' put \'emp\',\'2017-11-30\',\'module:service\',\'43633\' put \'emp\',\'2017-11-30\',\'module:my\',\'90770\' put \'emp\',\'2017-12-01\',\'module:headline\',\'369003\' put \'emp\',\'2017-12-01\',\'module:community\',\'103500\' put \'emp\',\'2017-12-01\',\'module:car\',\'437643\' put \'emp\',\'2017-12-01\',\'module:service\',\'41259\' put \'emp\',\'2017-12-01\',\'module:my\',\'91521\' # 查询数据——通过rowkey get \'emp\',\'2017-12-01\' # 查询数据——通过rowkey+columnkey get \'emp\',\'2017-12-01\',{COLUMN => \'basic:active\'} get \'emp\',\'2017-12-01\',\'basic:login\' get \'emp\',\'2017-12-01\',{COLUMN => \'basic:active\', TIMESTAMP => 1513218051477} get \'emp\',\'2017-12-01\',{COLUMN => \'basic:active\', TIMESTAMP => 1513218051477,VERSIONS => 1} # 查询数据——通过rowkey+多个columnkey get \'emp\',\'2017-12-01\',{COLUMN =>[\'basic:active\',\'basic:newadd\']} # 查询数据——通过rowkey+family get \'emp\',\'2017-12-01\',\'basic\' # 查询行数 count \'emp\' # 删除正行 deleteall \'emp\',\'row1\' # 按columkey查询 scan \'emp\',{COLUMN => \'basic:active\'} scan \'emp\',{COLUMN => [\'basic:active\',\'basic:newadd\'],LIMIT => 2} # rowkey模糊查询 scan \'emp\',{FILTER=>org.apache.hadoop.hbase.filter.PrefixFilter.new(org.apache.hadoop.hbase.util.Bytes.toBytes(\'2017-12\'))} # 通过时间戳查询 scan \'emp\',{TIMERANGE =>[1513218313453,1513218314019]} # rowkey模糊查询——前缀过滤 scan \'emp\',{ FILTER => "PrefixFilter (\'2017-11\')"} # 查询rowkey中包含\'12-0\'的 import org.apache.hadoop.hbase.filter.CompareFilter import org.apache.hadoop.hbase.filter.SubstringComparator import org.apache.hadoop.hbase.filter.RowFilter scan \'emp\', {FILTER => RowFilter.new(CompareFilter::CompareOp.valueOf(\'EQUAL\'), SubstringComparator.new(\'12-0\'))} # 查询rowkey 从2017-12-01开始,到2017-12-04截止,包含前不包含后 scan \'emp\', {STARTROW=>\'2017-12-01\', STOPROW=>\'2017-12-04\'} # 查询columnkey中前缀是\'lo\' scan \'emp\', FILTER=>"ColumnPrefixFilter(\'lo\')" # 查询value中包含\'57\'的 scan \'emp\', FILTER=>"ValueFilter(=,\'substring:57\')" # 计数器 incr \'emp\', \'2017-12-01\', \'daily:hits\', 1 incr \'emp\', \'2017-12-01\', \'daily:hits\' # 获取计数器 get_counter \'emp\', \'2017-12-01\', \'daily:hits\'
将hdfs上的数据push到hbase中
hadoop fs -put -f \'/data/bglogs/databoardshells/app_ctr.txt\' /tmp/hbase-input/
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=HBASE_ROW_KEY,ctr:c_key,ctr:show,ctr:click app_client /tmp/hbase-input/app_ctr.txt
新增命名空间的命令
alter_namespace
create_namespace
describe_namespace
drop_namespace
list_namespace
list_namespace_tables
一、hbase表名设计
汇总层标识+数据域+主维度+时间维度,比如:
dws_trd_slr_day
所有主维度相同的数据都在一张表里,避免表数量过多,从表名也可以看到存的是什么数据
二、rowkey设计
设计规则:MD5+主维度+维度标识+子维度1+时间维度+子维度2,例如:
卖家ID的MD5前4位+卖家ID+App+一级类目ID+ddd+二级类目ID
或者
卖家ID的MD5前4位+卖家ID+日期(yyyyMMdd)
MD5可以让整体数据散列,避免热点问题,卖家ID是必传的
对于一个卖家而言,所有数据其实都是连续存储的,通过指定STARTROW, STOPROW可以高效查询