【大数据存储与处理】实验二 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,一经查实,立即删除!

相关文章

vue2组件引入错误

问题描述 import CategoryList from /components/CategoryList/index.vue components: {CategoryList}, 使用以上代码正常引入 但是代码提醒没有任何反应 并且控制台显示 Unknown custom element: <Category> - did you register the component correctly? For recu…

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

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

@FeignClient注解详解

FeignClient FeignClient 是 Spring Cloud 中用于声明一个 Feign 客户端的注解。Feign 是一个声明式的 Web Service 客户端&#xff0c;它的目的是让编写 HTTP 客户端变得更简单。通过 Feign&#xff0c;只需要创建一个接口&#xff0c;并使用注解来描述请求&#xff0c;就可以…

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

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

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聊天机器人 网址&#xff1a;https://chat.openai.com 2.Anthropic Anthropic发布的与ChatGPT竞争的聊天机器人 网址&#xff1a;https://www.anthropic.com 3.文心一言 百度全新知识增强大语言模型&#xff01;国产聊天机器人 网址&…

你想成为Linux高手吗?这些技巧你必须知道

系统信息 arch 显示机器的处理器架构 name -m 显示机器的处理器架构 name -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 -(SMBIOS/DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hdparm -tT /dev/sda 在磁盘上执行测试读取操作 cat /proc/cpuinfo …

so-vits-svc的使用

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

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处理动态页面

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

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

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

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

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

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

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

九.数据处理之增删改

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

vue - 详解配置反向代理后,项目出现白屏的情况,js、css文件404问题解决方案(Vue解决项目白屏以及反向代理)

问题说明 添加反向代理代码后,前端运行白屏。 // 设置baseURL,8888是后端端口号,前端请求默认发送到baseURL的地址 var axios = require(axios) axios.defaults.baseURL = http://localhost:8888/api // 全局注册,之后可在其他组件中通过 this.$axios 发送数据 Vue.proto…

【jupyter notebook】jupyter notebook 调用另一个jupyter notebook 的函数

总结 使用 %run 魔法命令将 Notebook 转换为py文件使用 nbimporter 库手动复制代码优点notebook最前面加上即可最基本方法就跟导入py文件一样&#xff0c;不会被执行一遍快缺点所有的代码都会执行一遍修改原文件就要重新转换&#xff0c;且 从自定义的 .py 文件中导入函数时&a…

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

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

Codeforces Round 916 (Div. 3)(E:贪心 F贪心dfs G tarjan+topsort )

A&#xff1a;直接暴力统计每个字符的次数是否达标即可 #include<bits/stdc.h> using namespace std; const int N 3e510,mod998244353; #define int long long typedef long long LL; typedef pair<int, int> PII; typedef unsigned long long ULL;const long l…

微信小程序更新机制

1/同步更新 1、定期检查更新时&#xff1b; 2、长期未使用&#xff0c;首次进入会同步更新&#xff0c;但在弱网或者下载新版本失败的情况下&#xff0c;还会使用旧版本。 2/异步更新&#xff1a; 启动时异步更新 3/开发者手动触发更新 在启动时异步更新的情况下&#xff0c;…

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

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