• 1.HBase如果加了列限定,如果该列不存在时返回的结果为empty.
  • 2.HBase在scan时指定的StartRow里面不能加-
  • 3.HBase在scan时过滤掉指定列不存在的记录
  • 4.利用MapReduce导出hbase数据
  • 5.利用mapReduce插入数据到HBase

1.HBase如果加了列限定,如果该列不存在时返回的结果为empty.

看下面的代码:

?
1
2
  Get get = new Get(Bytes.toBytes("100"));
    get.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name"));

这里加入了列限定,也就是只返回列族info下面的name字段。但是如果name字段根本不存在,返回的Result在调用result.isEmpty()时则返回为true,也就是说就算其他字段存在,也什么都没返回来,包括rowkey也没有返回来。当然,如果是限定多个列,只要一个列存在就可以正常返回。所以需要注意。

2.HBase在scan时指定的StartRow里面不能加-

看下面的代码:

?
1
2
3
4
Scan scan = new Scan();
 scan.setStartRow(Bytes.toBytes("3136947-"));
 scan.setStopRow(Bytes.toBytes("3136947-" + 1));

我的本意是查询rowkey以 3136947- 开头的行,但是因为我的里面有一个-(“杠”),所以什么都没返回,去掉-后正常。这说明这里是不能使用-,-也并不是转义字符,转义后也还是scan不出来的。不知道其他字符是不是也不行,没有测试。 所以需要注意。

3.HBase在scan时过滤掉指定列不存在的记录

如果想返回某个字段必须存在的行,不存在该字段的记录过滤掉不返回,方法如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
Scan scan = new Scan();
        scan.setStartRow(Bytes.toBytes("3136947"));
        scan.setStopRow(Bytes.toBytes("3136947" + 1));
        scan.addColumn(Bytes.toBytes("info"),
                Bytes.toBytes("name"));
        SingleColumnValueFilter filter = new SingleColumnValueFilter(Bytes.toBytes("info"),
                Bytes.toBytes("name"),
                CompareFilter.CompareOp.NOT_EQUAL, Bytes.toBytes("0"));
        filter.setFilterIfMissing(true);
        scan.setFilter(filter);

注意:如果是判断某个列是否存在,必须在addColumn里面加上该列,也就是必须返回的字段里面必须包含该列,否则也不会返回,因为在处理的时候是调用addColumn然后才会调用过滤器。

这里的过滤器里面指定该列的字段值必须不等于0(当然,如果你的name里有等于0的当然不能使用0),并且设置setFilterIfMissing为true,也就是设置为如果该列不存在就过滤掉这条数据,默认为false。

4.利用MapReduce导出hbase数据

如果hbase作为数据的输出,job设置如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Configuration conf = HBaseConfiguration.create();
        Scan scan = new Scan();
        scan.setStartRow(Bytes.toBytes("3136947"));
        scan.setStopRow(Bytes.toBytes("3136947" + 1));
        scan.addColumn(Bytes.toBytes("info"), Bytes.toBytes("name"));
        scan.addFamily(UserStoreHelper.FAMILY_INFO);
        scan.addColumn(UserStoreHelper.FAMILY_INFO, UserStoreHelper.USER_ID);
        scan.addColumn(UserStoreHelper.FAMILY_INFO, UserStoreHelper.FRIENDS);
        scan.addColumn(UserStoreHelper.FAMILY_INFO, UserStoreHelper.LEVEL_CODE);
        final Job job = new Job(conf, "exportHBaseUser");
        job.setJarByClass(TestJobCreator.class);
        job.setOutputFormatClass(TextOutputFormat.class);
        FileOutputFormat.setOutputPath(job, new Path("test1"));
       // job.setReducerClass(HbaseExportReduce.class);
       // job.setPartitionerClass(UserPartitioner.class);
       // job.setNumReduceTasks(14);
        TableMapReduceUtil.initTableMapperJob(Bytes.toBytes("usertable"),
                scan,
                TestMapper.class,
                Text.class,
                NullWritable.class,
                job);

在initTableMapperJob里面设置的map必须继承org.apache.hadoop.hbase.mapreduce.TableMapper,并且最后两个设置的参数是自己定义的map的输出时的key和value的类型。

5.利用mapReduce插入数据到HBase

如果hbase作为数据的输入。代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
final Configuration conf = HBaseConfiguration.create();
 final Job job = new Job(conf, "Sync-To-HBase");
 job.setJarByClass(PostStoreExportHBaseJobCreator.class);
   //我这里是以mongodb为输入    
  job.setInputFormatClass(MongoInputFormat.class);
   TableMapReduceUtil.initTableReducerJob("usertable", null, job);
    //把数据转换为hbase表格式的map
   job.setMapperClass(TestMapper.class);
    //直接入hbase库不需要reduce    
    job.setNumReduceTasks(0);

这里map的输出必须是key为ImmutableBytesWritable,value为 Put

HBase常用功能和HBase+MapReduce使用总结相关推荐

  1. Hbase常用操作记录

    Hbase常用操作记录 Hbase 创建表 查看表结构 修改表结构 删除表 创建表 语法:create <table>, {NAME => <family>, VERSI ...

  2. HBase 常用操作

    hbase只支持行级事务,不支持多行事务. 进入shell:hbase shell: 配置完分布式zk后: 单启Hmaster:hbase-daemon.sh start master HFile默认 ...

  3. HBase 常用Shell命令

    转自:http://my.oschina.net/u/189445/blog/595232 两个月前使用过hbase,现在最基本的命令都淡忘了,留一个备查~ hbase shell命令         ...

  4. 01 HBase基本概念和hbase shell常用命令用法

    本文转载自:http://archive.cnblogs.com/a/2178064/ 1. 简介 HBase是一个分布式的.面向列的开源数据库,源于google的一篇论文<bigtable:一 ...

  5. Hive 与 Hbase表映射(内部表与外部表),Hbase常用命令

    应用场景 1.将ETL操作的数据存入HBase 2.Hbase作为Hive的数据源 构建低延迟的数据仓库 Hive表映射至Hbase Hbase上有表 -> 外部表 创建Hive表映射HBase ...

  6. HBase–常用API操作篇

    2019独角兽企业重金招聘Python工程师标准>>> [常用到的几个类] 1. org.apache.hadoop.hbase.HBaseConfiguration 每一个hbas ...

  7. HBase总结(二十)HBase常用shell命令详细说明

    进入hbase shell console $HBASE_HOME/bin/hbase shell 如果有kerberos认证,需要事先使用相应的keytab进行一下认证(使用kinit命令),认证成 ...

  8. hbase 常用命令行操作总结

    前言 本篇针对hbase常用客户端操作命令,做一下总结,方便后续运营过程中使用: 1.查看帮助命令 help的命令展示出了常用的操作命令以及格式,通过这个命令可以快速定位到需要查询的命令: help ...

  9. HBase 常用Shell命

    http://www.cnblogs.com/nexiyi/p/hbase_shell.html 进入hbase shell console $HBASE_HOME/bin/hbase shell 如 ...

最新文章

  1. 判断两个图片的特征向量_响应式布局提高篇 图片正确的打开方式
  2. Java知识点总结(JDBC-封装JDBC)
  3. 文件管理详细知识要点
  4. maven 生成 xml
  5. 【机器学习基础】八种应对样本不均衡的策略
  6. Ubuntu 16.04安装SQLite Browser操作SQLite数据库
  7. android逆向分析有什么用,如何开始对Android应用的逆向分析?
  8. linux 自动启动设置
  9. Java语言和C语言相比,为什么C语言的运算速度会更快,是因为vjm的性能不行么?
  10. python ssh库paramiko学习
  11. python扫描端口hack_一款集http端口扫描和目录批量扫描为一体的自动化工具
  12. “易班”学生管理平台小项目 万字总结 泪目!!!
  13. 大学生上课为什么一定要认真听讲?
  14. flooding matlab仿真,无线传感器网络flooding路由协议MATLAB仿真.doc
  15. 3D Human相关研究:人体、姿态估计、人体重建等
  16. 查询计算机系男生修了,sql练习参考答案
  17. 手把手教你在阿里云服务器上安装Java环境(图文教程)
  18. ubuntu下安装librecad
  19. Java怎样掉包,如果不想你被称做掉包侠,那么请有效地学习机器学习算法知识...
  20. 芦荟妙用(摘自网络)

热门文章

  1. 【计算机网络】网络层 : IPv4 地址 ( IP 地址分类 | 特殊 IP 地址 | 私有 IP 地址 | A 类、B 类、C 类 IP 地址网络号主机号数量 )★
  2. 【C++ 语言】pthread_mutex_t 互斥锁
  3. Python单例设计模式
  4. 数学建模中的excel操作
  5. Cloud Native workshop
  6. 利用mk-table-checksum监测Mysql主从数据一致性操作记录
  7. 手机数据抓包以及wireshark技巧
  8. 数据结构与算法分析-第一章Java类(04)
  9. 浅谈高性能数据库集群——读写分离
  10. Socket 编程概述