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列
中心思想就是 将一系列的列 合并成一个类 每个列都是这个类的属性 再进行压缩 就是压缩这个类