当前位置: 代码迷 >> 综合 >> 0925 hbase2 优化 压缩 hbase-mr
  详细解决方案

0925 hbase2 优化 压缩 hbase-mr

热度:96   发布时间:2023-12-21 23:05:02.0

Scan 可以设置起始和结束的rowkey   rowkey按字典排序  scan.setStartROw(rowkey的值)  scan.setStopRow()

查找时可以设过滤器 

FilterList 构造中设置返回匹配的数据形式 返回全部匹配(FilterList.Operator.MUST_PASS_ALL)  或者  返回第一次匹配到的

filterList.add() 添加匹配原则   

PrefixFilter prefixFilter =new PrefixFilter(phonenum.getBytes());   行键前缀匹配
SingleColumnValueFilter single=new SingleColumnValueFilter("cf".getBytes(), "type".getBytes(),CompareFilter.CompareOp.EQUAL,Bytes.toBytes(1));   列值匹配

 将设置的匹配原则添加到 FilterLits中 scan.setFilter(FilterList)  ResultScanner rs= table.getScanner(scan)  完成查询https://blog.csdn.net/u011750989/article/details/38558673  过滤器见百度

Hbase-MR互相操作

mr输出到HBase  reducer继承TableReducer<Text,Intwritable,ImmutableBytesWritable>  在context.write(null,put) 直接创建Put对象  将rowkey 和 列族 列值设置上     (需要先将表创建出来)在conf中设置hbase.zookeeper.quorum 

job.setMapperClass(WCMapper.class);
TableMapReduceUtil.initTableReducerJob("wordcount",WCReducer.class,job,null,null,null,null,false
);
job.setOutputKeyClass(ImmutableBytesWritable.class);
job.setOutputValueClass(Writable.class);            这两个是设置整个mr的输出

hbase输出到mr上 map 继承TableMapper<Text,IntWritable> map的输出类型  此时row是key  通过Cell获取想要的列值   reducer端正常操作 在Main端  conf设置hbase节点

TableMapReduceUtil.initTableMapperJob("phone_record",scan,LengthMapper.class,Text.class,IntWritable.class,job,false,false,TableInputFormat.class
);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);   同样设置MR的输出k,v

hbase-mr-hbase   结合TableMapper 和TableReducer 

 

 

 

优化  看文档

压缩

将hbase的存贮 以类的方式 存贮压缩  使用压缩工具 protobuf   1 安装压缩软件  2 根据列值 合成一个类的文件  3 编译 4 编译后的文件 辅助粘贴到idea上 5 在idea上 操作Myphone put进phone列    

中心思想就是 将一系列的列 合并成一个类  每个列都是这个类的属性   再进行压缩 就是压缩这个类