Hbase_应用

来源:互联网 发布:淘宝客鹊桥助手 编辑:程序博客网 时间:2024/06/10 02:02
  1. HBase使用场景:

    什么时候使用HBase:
    ①数据总量:如果只有数百万行和一些读写操作,是不需要HBase的。而如果有数十亿列,同时在很短时间内有数以千计的读写操作,这时就应该考虑HBase
    ② 如果数据模式是动态的或者可变的
    ③ 如果很多列包含很多null值
    ④ 当有大量的动态行
    ⑤ 如果数据包含不定数量的列
    ⑥ 如果需要维护数据的版本
    ⑦ 如果需要高扩展性
    ⑧ 如果需要在记录中做内置的压缩
    ⑨ 如果需要大量的I/O

    什么时候不使用HBase:
    ① 当数据规模总量不大时
    ② 当需要JOIN和其他一些关系型数据库特性时
    ③ 如果关系数据能满足需求

  2. 模式设计

    ① 避免生成连续序列或时间戳的行键,这在大量写入的时候可能会到导致读取线程挂起
    ② 总是让列族名和行键更小
    ③ 使用复合行健设计,以指定扫描的开始行键:

    Scan s = new Scan(startID)Table.getscanner(s)
  3. HBase管理

    压缩:hbase>major_compact #将每个store合成一个StoreFile

    添加节点:bin/hbase-daemon.sh start regionserver

    删除节点:
    ① 停止负载平衡器:hbase>balance_switch false
    ② 在退役的节点上停止RegionServer:hbase>hbase-daemon.sh stop regionserver
    ③ 当RegionServer停止了,它将关闭所有的region
    ④ Zookeeper上的RegionServer临时节点将消失
    ⑤ master节点将注意到RegionServer已经关闭并认为它已经崩溃
    ⑥ RegionServer的region服务重新分配完成

    另一种优雅的删除节点方式:
    ① bin/graceful_stop.sh
    ② 这种方式里会始终启动平衡器
    ③ 在退役的节点上停止RegionServer:hbase>hbase-daemon.sh stop regionserver

  4. HBase备份

    离线备份:

    hadoop discp hdfs://namenode:9000/hbase hdfs://datanode1:9000/hbaseBackup

    将数据从hdfs://namenode:9000/hbase复制到hdfs://datanode1:9000/hbaseBackup

    在线备份:
    ① 快照:
    开启快照功能:

    <name>hbase.snapshot.enabled</name>   <value>true</value>

    重启集群

       hbase>snapshot ‘emptable’,’baksnapshot01082014’     #表名、快照名

    查看快照列表

    hbase>list_snapshot

    删除快照

    hbase>delete_snapshot ‘baksnapshot01082014’

    使用快照克隆一个表

    hbase>clone_snapshot ‘baksnapshot01082014’,’emptable’

    恢复一个表到快照状态

    hbase>disable ‘table’hbase>restore_snapshot ‘baksnapshot01082014’

    ② 复制:
    修改配置:

    <name>hbase.replication</name>       <value>true</value>

    重启集群
    在主集群执行以下命令,添加对等集群:

    add_peer ‘ID’’CLUSTER_KEY’ID指定一个短整型,CLUSTER_KEY设置为从集群

    开启列族的复制

    disable ‘table’alter ‘table’,{NAME=>’colFam’,REPLICATION_SCOPE=>’1’}enable ‘table’设置为1表示开启复制,0表示关闭

    执行

    hbase>list_peers

    查看任意RegionServer的日志来验证是否复制成功
    停止复制的命令

    stop_replication

    ③ 使用Export和Import进行备份和恢复:

    hbase org.apache.hadoop.hbase.mapreduce.Export <tablename> <outputdir> [<versions> [starttime] [endtime]]hbase org.apache.hadoop.hbase.mapreduce.Import <tablename> <inputdir> 

    ImportTsv可以将Tab分割的数据(Tsv)导入到HBase表:

    hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=a,b,c <tablename> <hdfs-inputdir>

④ CopyTable

    hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name=Copynewtable    new.name指定目标的新表名
  1. 过滤器

    过滤器可以配合get或scan使用,通过RPC传到RegionServer端,RegionServer获取的数据通过过滤器进行过滤,然后返回给客户端

    Scan scan = new Scan();scan.setFileter(new ValueFilter(CompareOp.EQUAL,new SubstringComparator(“shash”)));