我的编程空间,编程开发者的网络收藏夹
学习永远不晚

HBase操作注意事项

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

HBase操作注意事项

1.HBase如果加了列限定,如果该列不存在时返回的结果为empty. 看下面的代码:      

  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里面不能加“-” 看下面的代码:

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

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


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

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

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设置如下:

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"));
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作为数据的输入。代码如下:

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 


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

HBase操作注意事项

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python开发注意事项:处理文件和IO操作时的注意事项

Python作为一种功能强大且易于学习的编程语言,在开发过程中经常涉及处理文件和IO操作。然而,在处理文件和IO操作时,开发者需要注意一些重要事项,以确保代码的稳定性和可靠性。本文将就Python开发中处理文件和IO操作时的注意事项进行探讨
Python开发注意事项:处理文件和IO操作时的注意事项
2023-11-22

win7操作系统安装注意事项

1、安装Vista和Windows 7系统,在高级安装的时候不要格式化完C盘就安装,要删除c盘,建个c盘,并自动生成个100MB的隐藏未分配盘,此100MB永远不要乱动。如果没生成这个100MB空间,在Vista和Windows 7下就会出
2023-06-04

Redis事务操作限制和注意事项有哪些

在使用Redis事务操作时,有一些限制和注意事项需要注意:Redis事务是一组命令的集合,通过MULTI和EXEC命令来开启和提交事务,但是在事务执行期间,如果有错误发生,整个事务会被回滚,即使其中的某些命令已经执行成功。Redis事务不支
Redis事务操作限制和注意事项有哪些
2024-05-07

Node.js与MySQL交互操作及其注意事项

node.js作为服务端的js运行环境已经出现了有几年了,最近我有个朋友也在做这方面的开发,但是也是刚刚接触,遇到了很多坑。前几天他们在操作数据库的时候出现了点问题,后来我们一起看了看,其实都是node本身机制的一些问题,这里总结一下给新手
2022-06-04

Python 中关于文件操作的注意事项

文件操作#打开文件f = open('要打开的文件路径',mode = 'r/w/a', encoding = '文件原来写入时的编码')#操作data = f.read() #读取f.write('要写入的内容')#关闭文件f.clos
2023-01-31

ADO.NET操作注意哪些事宜

这篇文章主要介绍“ADO.NET操作注意哪些事宜”,在日常操作中,相信很多人在ADO.NET操作注意哪些事宜问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ADO.NET操作注意哪些事宜”的疑惑有所帮助!接下来
2023-06-17

python中字符串类型json操作的注意事项

python操作json的方法有json.dumps——将json对象(字典)转换为字符串对象json.loads——将字符串对象转换为json对象(字典)如果定义json对象jsonstring1={"results":[{"id":"1
2022-06-04

Golang文件删除操作的实施与注意事项

Golang 是一种开源的编程语言,由Google研发,旨在提高开发人员的生产力。在Golang中,删除文件是一项常见的操作,但需要注意一些细节以确保操作的安全和正确性。本文将介绍Golang中删除文件的实现方法,并给出一些注意事项和具体的
Golang文件删除操作的实施与注意事项
2024-02-24

MySQL 重命名表的操作方法及注意事项

目录 1.重命名表方法 2.注意事项总结: 1.重命名表方法 使用 RENAME TABLE 语句或 ALTER TABLE 语句都可以对表进行重命名,基本语法如下:# RENAME TABLE 语法: RENAME TABLE
2022-05-16

论坛UID修改注意事项,小心操作避免风险

论坛UID修改注意事项,小心操作避免风险在论坛中,用户ID(UID)是用户账号的唯一标识符,通常由系统自动生成且不可更改。然而,有时用户可能需要修改自己的UID,例如在账号信息泄露或隐私保护方面考虑。但是,修改UID并不是一项简单的操作,
论坛UID修改注意事项,小心操作避免风险
2024-03-10

在Linux操作系统下安装PyCharm的方法和注意事项

在Linux系统中安装PyCharm的步骤和注意事项PyCharm是一款由JetBrains公司开发的集成开发环境(IDE),专门用于Python开发。在Linux系统中安装PyCharm需要遵循一定的步骤和注意事项。本文将介绍在Linu
在Linux操作系统下安装PyCharm的方法和注意事项
2024-02-24

阿里云备案换服务器如何操作及注意事项

阿里云备案换服务器是一个涉及到服务器管理的重要步骤。在使用阿里云服务器的过程中,如果需要更换服务器,就需要进行备案换服务器的操作。这篇文章将会详细介绍如何进行阿里云备案换服务器,以及需要注意的事项。正文:步骤一:确定更换服务器在进行阿里云备案换服务器之前,首先需要确定需要更换的服务器类型、配置、带宽等信息。可以根
阿里云备案换服务器如何操作及注意事项
2023-11-21

编程热搜

目录