【大数据存储与处理】实验二 HBase 过滤器操作

实验二 HBase 过滤器操作 

【实验目的】: 

1.掌握使用 HBase 过滤器进行全表扫描。 

【实验内容与要求】: 

在 HBase 中,Get 和 Scan 操作都可以使用过滤器来设置输出的范围,类似于 SQL 里面 

的 Where 查询条件。使用 show_filter 命令可以查看当前 HBase 支持的过滤器类型。 

使用过滤器的语法格式如下所示: 

scan '表名'{Filter => ”过滤器(比较运算符,’比较器’)

Filter=>指明过滤的方法,整体可用大括号引用,也可以不用大括号。过滤的方法使用 

双引号引用,而比较方式用小括号引用。 

在使用过滤器之前先创建这样的表结构: 

具体执行命令如下: 

创建表:create 'Student''StuInfo''Grades' 

插入第一个逻辑行的数据: 

put 'Student', '001', 'StuInfo:name','alice' 

put 'Student', '001', 'StuInfo:age','18' 

put 'Student', '001', 'StuInfo:sex','female' 

put 'Student', '001', 'Grades:english','80' 

put 'Student', '001', 'Grades:math','90' 

同样插入其他两行数据。 

1.行键过滤器 

包括 RowFilterPrefixFilterKeyOnlyFilterFirstKeyOnlyFilter 等 

格式:scan ‘表名{Filter =>“过滤器比较运算符,比较器’)”} 

1RowFilter:针对行键进行过滤 

例 1:显示行键前缀为 开头的键值对; 

scan 'student',{FILTER=>"RowFilter(=,'substring:001')"} 

例 2:显示行键字节顺序大于 002 的键值对; 

scan 'student',FILTER=>"RowFilter(>,'binary:002')" 

2PrefixFilter:行键前缀过滤器 

例 3:扫描前缀为 001 的行键 

scan 'student',FILTER=>"PrefixFilter('001')" 

3FirstKeyOnlyFilter:扫描全表,显示每个逻辑行的第一个键值对 

例 4: scan 'student',FILTER=>"FirstKeyOnlyFilter()" 

4InclusiveStopFilter:替代 ENDROW 返回终止条件行; 

例 5:扫描显示行键 001 到 002 范围内的键值对 

此条命令等同于: 

2.列族与列过滤器 

1FamilyFilter:针对列族进行比较和过滤。 

例 1:显示列族前缀为 stu 开头的键值对; 

scan 'student',FILTER=>"FamilyFilter(=,'substring:stu’) "

scan 'student',FILTER=>"FamilyFilter(>=,‘binary:stu’) "

2QualifierFilter:列标识过滤器。 

例 2:显示列名为 name 的记录; 

scan 'student',FILTER=>"QualifierFilter(=,'substring:name')" 

3ColumnPrefixFilter:对列名前缀进行过滤。 

例 2:显示列名为 name 的记录; 

scan 'student',FILTER=>"ColumnPrefixFilter('name') " 

等价于 scan 'student',FILTER=>"QualifierFilter(=,'substring:name')" 

(4MultipleColumnPrefixFilter:可以指定多个前缀 

例 3:显示列名为 name 和 age 的记录; 

scan 'student',FILTER=>"MultipleColumnPrefixFilter('name','age')" 

5ColumnRangeFilter :设置范围按字典序对列名进行过滤; 

scan 'student',FILTER=>"ColumnRangeFilter('bi',true,'na',true)" 

3.值过滤器 

1ValueFilter :值过滤器。 

例 1:查询值等于 19 的所有键值对 

scan 'student',FILTER=>"ValueFilter(=,'binary:19') " 

scan 'student',FILTER=>"ValueFilter(=,'substring:19') 

2SingleColumnValueFilter :在指定的列族和列中进行值过滤器。 

例 2:查询 stuinfo 列族 age 列中值等于 19 的所有键值对 

scan 'student',{COLUMN=>'stuinfo:age',FILTER=>"SingleColumnValueFilter('stuinfo','age',=,'binary: 19')"} 

4.其他过滤器 

1ColumnCountGetFilter :限制每个逻辑行返回的键值对数 

例 1:返回行键为 001 的前 个键值对 

get 'student','001',FILTER=>"ColumnCountGetFilter(3)" 

2PageFilter :基于行的分页过滤器,设置返回行数。 

例 2:显示一行 scan 'student',FILTER=>"PageFilter(1)" 

3ColumnPaginationFilter :基于列的进行分页过滤器,需要设置偏移量与返回数量 。 

例 3:显示每行第 列之后的 个键值对 

scan 'student',FILTER=>"ColumnPaginationFilter(2,1)" 

5python hbase 过滤器编程。 

编程输出 Student1 表中行键前缀为 00、列标识为 Name 的值。 

from thrift import Thrift 

from thrift.transport import TSocket 

from thrift.transport import TTransport 

from thrift.protocol import TBinaryProtocol 

from hbase import Hbase 

from hbase.ttypes import * 

host = '172.16.3.68' 

port = 9090 

table = 'Student1' 

transport = TSocket.TSocket(host, port) 

transport = TTransport.TBufferedTransport(transport) 

protocol = TBinaryProtocol.TBinaryProtocol(transport) 

client = Hbase.Client(protocol) 

transport.open() 

ss = client.scannerOpenWithPrefix("Student1","00",["StuInfo:Name"])

print("ss:",client.scannerGetList(ss,10)) 

#关闭 scannerId 

client.scannerClose(ss) 

程序运行结果: 

scannerOpenWithPrefix(tableName,startAndPrefix,columns):在指定表中,扫描具有指定 

前缀的行,扫描指定列的数据。返回一个 ScannerIDint 类型 

tableName:表名 

startAndPrefix:行前缀 

columns:列名列表,list 类型 

6. Hbase 批量数据导入。把/home/hadoop/datafile 目录下 music1.txtmusic2.txt、 

music3.txt 三个记事本文件数据导入到 hbase 中的 ms 表中。参考命令如下: 

  1. hbase shell 中建表:create 'ms','info' 

2hadoop fs -mkdir /user/hduser/ms 

3hadoop fs -put music1.txt music2.txt music3.txt /user/hduser/ms 

4hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=tmp -Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:singer,info:gender,info:ryghme,info:terminal ms /user/hduser/ms 

5hbase shell 中查看表数据:scan 'ms' 

思考题:HBase 的过滤器有哪些?分别具有什么作用? 

HBase 是一个分布式、面向列的NoSQL数据库,它提供了各种过滤器来帮助你在检索数据时进行过滤和筛选。这些过滤器可以用于扫描和查询操作,以便只返回符合特定条件的数据。以下是一些常见的 HBase 过滤器以及它们的作用:

1. SingleColumnValueFilter:

   - 作用:根据指定列的值进行过滤。

   - 用途:允许你筛选出特定列的值等于或不等于指定值的行。

2. SingleColumnValueExcludeFilter:

   - 作用:与 SingleColumnValueFilter 类似,但是它排除满足条件的行而不返回它们。

   - 用途:用于排除特定列的值等于或不等于指定值的行。

3. FamilyFilter:

   - 作用:基于列族进行过滤。

   - 用途:可以用于只检索特定列族的数据,或排除特定列族的数据。

4. QualifierFilter:

   - 作用:基于列限定符(Qualifier)进行过滤。

   - 用途:允许你只返回包含或不包含特定列限定符的列。

5. RowFilter:

   - 作用:基于行键进行过滤。

   - 用途:可以用于根据行键的前缀或模式来筛选行。

6. PrefixFilter:

   - 作用:根据行键的前缀进行过滤。

   - 用途:用于筛选出具有特定前缀的行。

7. PageFilter:

   - 作用:限制返回的结果数量。

   - 用途:允许你指定最大返回行数,通常用于分页查询。

8. TimestampsFilter:

   - 作用:基于时间戳进行过滤。

   - 用途:可以用于筛选出特定时间范围内的数据。

9. ValueFilter:

   - 作用:基于值进行过滤。

   - 用途:可以用于只返回具有特定值的行。

10. CompareFilter:

    - 作用:根据自定义的比较器进行过滤。

    - 用途:允许你定义自己的比较逻辑来筛选数据。

这些过滤器可以根据你的需求组合使用,以实现复杂的数据检索和过滤操作。你可以根据具体的业务需求选择合适的过滤器来优化查询性能并满足数据检索要求。注意,HBase 过滤器通常在客户端应用程序中配置和使用,以便在查询数据时应用过滤条件。

小结 

掌握使用 HBase 过滤器进行全表扫描。注意区分 hbase shell 命令和 linux 命令。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/234378.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【VScode和Leecode的爱恨情仇】command ‘leetcode.signin‘ not found

文章目录 一、关于command ‘leetcode.signin‘ not found的问题二、解决方案第一,没有下载Nodejs;第二,有没有在VScode中配置Nodejs第三,力扣的默认在VScode请求地址中请求头错误首先搞定配置其次搞定登入登入方法一:…

obswebsocket+douyinAPI+python,教你如何三步搭建自己的AI美女直播间,24小时的永动机

一:什么是AI直播美女直播间 就是在直播的时候通过弹幕进行选择不同的ai人物进行跳舞的直播间大致就是 可以看到左边是有提示,根据观众刷礼物的不同进行选择某一个AI人物进行展示,怎么通过技术手段实现呢 二:你需要懂的 其实还…

vmware安装银河麒麟V10高级服务器操作系统

vmware安装银河麒麟V10高级服务器操作系统 1、下载银河麒麟V10镜像2、VMware安装银河麒麟V10高级服务器操作系统2.1、新建虚拟机2.2、安装虚拟机 3、配置银河麒麟V10高级服务器操作系统3.1、安装vmware tools3.2、配置静态IP地址 和 dns3.3、查看磁盘分区 1、下载银河麒麟V10镜…

AI工具网站汇总——学习的好帮手

一、聊天AI 1.ChatGPT 地表最强AI聊天机器人 网址:https://chat.openai.com 2.Anthropic Anthropic发布的与ChatGPT竞争的聊天机器人 网址:https://www.anthropic.com 3.文心一言 百度全新知识增强大语言模型!国产聊天机器人 网址&…

so-vits-svc的使用

1. 启动工程 找到工程的路径,找到启动的bat文件,这里以 d:/so-vits-svc为例。 2. 启动过程 启动后会出现cmp的一个弹框,初始启动相对较慢,请耐心等待一会儿,启动完成后,会出现一个页面,如下…

JDK各个版本特性讲解-JDK14特性

JDK各个版本特性讲解-JDK14特性 一、Java14概述二、语法层面的变化1. instanceof2. switch表达式3. 文本块的改进4. Records记录类型 二、关于GC1.G1的NUMA内存分配优化2. 弃用SerialCMS,ParNewSerial Old3.删除CMS4.ZGC on macOS and Windows 三、其他变化1.友好的空指针异常提…

HAproxy做七层代理+keepalived高可用,实现动静分离,由nginx处理静态页面,tomcat处理动态页面

目录 一、三种软负载均衡器的区别 关于三种负载均衡器的性能对比: 关于三种负载均衡器的代理类型对比: 关于三种负载均衡器的健康检查对比: 二、haproxy的8中负载均衡调度算法 haproxy的会话保持的方式 haproxy的配置文件学习 三、实操…

(详解版)创建线程的四种方式

文章目录 Java中创建线程的四种方式1. 继承Thread类并重写 run 方法来创建线程2. 实现Runnable接口并实现 run 方法来创建线程。3. 使用Callable接口创建线程4. 使用Executor框架创建线程 Java中创建线程的四种方式 接下来我会详细解释这四种方式创建线程如何实现. 我们如果要…

【HarmonyOS开发】ArkTs关系型和非关系型数据库的存储封装

前面使用了首选项的存储方式,因此将其他的两种存储方式(键值型数据库和关系型数据库)也学习一下,简单记录一下,并进行封装,方便后续使用。 1、效果预览 2、使用条件 2.1 键值型数据库 键值型数据库实现数据…

RabbitMQ入门指南(三):Java入门示例

专栏导航 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、AMQP协议 1.AMQP 2.Spring AMQP 二、使用Spring AMQP实现对RabbitMQ的消息收发 1.案例准备阶段 2.入门案例(无交换机) 3.任务模型案例(Work Queues&#xff0…

九.数据处理之增删改

数据处理之增删改 1.插入数据1.1实际问题1.2方式1:VALUES的方式添加1.3方式2:将查询结果插入到表中 2.更新数据3.删除数据4.MySQL8新特性:计算列5.综合案例 1.插入数据 1.1实际问题 解决方式:使用INSERT语句向表中插入数据 1.2方…

文献速递:生成对抗网络医学影像中的应用——用于生成前列腺MR-only影像治疗剂量规划的合成CT的深度学习模型:多中心研究

文献速递:生成对抗网络医学影像中的应用——用于生成前列腺MR-only影像治疗剂量规划的合成CT的深度学习模型:多中心研究 本周给大家分享文献的主题是生成对抗网络(Generative adversarial networks, GANs)在医学影像中的应用。文…

电源模块测试方法 | 怎么测试电源负载瞬态响应?

负载瞬态响应测试是检测电源稳定性和质量的重要方法之一,而电源稳定性是设备正常运行的基础。通过负载瞬态响应测试来检测电源的响应速度和稳定性,从而优化电源设计,提升性能,确保电子设备可以稳定工作。 什么是负载瞬态响应测试?…

js知识点1:防抖节流

js知识点1:防抖节流 防抖节流 防抖节流,本质上是优化高频率执行代码的一种手段 定义: 防抖: n 秒后再执行该事件,若在 n 秒内被重复触发,则重新计时 节流: n 秒内只运行一次,若在 n 秒内重复触发&#xff0…

【C语言】SCU安全项目2-BufBomb

目录 关键代码解读: getxs() getbuf() test() 核心思路 具体操作1 具体操作2 前段时间忙于强网杯、英语4级和一些其他支线,有点摸不清头绪了,特别是qwb只有一个输出,太过坐牢,决定这个安全项目做完后就继续投身…

Spring MVC框架支持RESTful,设计URL时可以使用{自定义名称}的占位符@Get(“/{id:[0-9]+}/delete“)

背景:在开发实践中,如果没有明确的规定URL,可以参考: 传统接口 获取数据列表,固定接口路径:/数据类型的复数 例如:/albums/select RESTful接口 - 根据ID获取某条数据:/数据类型的复数/{id} - 例…

在Linux安装的Docker中开启IPv6

先在Linux中安装docker,然后在docker中开启IPv6。 安装docker 第一步,卸载旧版本docker。 若系统中已安装旧版本docker,则需要卸载旧版本docker以及与旧版本docker相关的依赖项。 命令:yum -y remove docker docker-client do…

CountDownLatch和Semaphore的区别?

CountDownLatch和Semaphore都是在Java中用于多线程协同的工具,但它们有一些重要的区别。 CountDownLatch: 用途: 主要用于等待一个或多个线程完成操作,它的计数器只能被减少,不能被增加。计数: 初始化时需…

栈-二叉树的中序遍历/easy

二叉树的中序遍历 1、题目2、解题思路3、复杂度最优解示例4、抽象与扩展 1、题目 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2]示例 2: 输入:roo…

科聪控制系统典型应用车型 —— 料箱机器人

料箱机器人即料箱AGV是一种智能化物流搬运设备,它可以代替人力完成出库入库和搬运工作,可根据出入库生产出货需求,将货物从起点运送到终点,自动柔性完成货到人货到点的操作。 提升仓储和物流效率的自动化利器 料箱机器人的投用能…