HBase详解(4)

Phoenix

安装(续)

  1. 在HBase中添加配置,是的Phoenix支持二级索引

    # 进入HBase的安装目录下
    cd /opt/software/hbase-2.5.5/conf/
    # 编辑文件
    vim hbase-site.xml

    在文件中添加

    <property><name>hbase.regionserver.wal.codec</name><value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
    </property>
    <property><name>hbase.region.server.rpc.scheduler.factory.class</name><value>org.apache.hadoop.hbase.ipc.PhoenixRpcSchedulerFactory</value>
    </property>
    <property><name>hbase.rpc.controller.factory.class</name><value>org.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory</value>
    </property>
  2. 远程分发

    scp hbase-site.xml root@hadoop02:$PWD
    scp hbase-site.xml root@hadoop03:$PWD
  3. 启动:Zookeeper -> HDFS -> HBase,启动Phoenix

    sqlline.py hadoop01:2181

操作

概述

  1. Phoenix将类SQL在底层转化为HBase API操作来执行,所以Phoenix中的每一个字段对应了HBase的命令

  2. 在Phoenix中,建表的时候需要指定一个或者多个字段作为主键,主键被映射成HBase的行键

  3. Phoenix在建表的时候,如果没有指定列族,那么这些列会默认被放入0列族

  4. 注意:Phoenix会自动的将表明、列名等转化为大写形式,如果要保持小写形式,那么需要使用双引号来标记

SQL

  1. 查看所有的表

    show tables;
    -- 或者
    !table
    -- 或者
    !tables
  2. 创建表

    create table employers(id varchar primary key,name varchar,age integer,gender varchar
    );
    ​
    -- 保持小写
    create table "department"("id" varchar primary key,"dept_name" varchar
    );
  3. 多个字段作为联合主键。注意:

    1. 如果需要将多个字段来作为联合主键,那么字段的声明顺序和主键的定义顺序必须相同

    2. 多字段作为联合主键的时候,要求字段类型必须一致

    3. 多字段的值不能为空

    create table students(grade integer not null,class integer not null,id integer not null,name varchar,age integer,gender varchar    constraint s_pk primary key(grade, class, id)
    );
  4. 需要注意的是,Phoenix为了减少对磁盘空间的占用,默认会对每一列的数据进行编码处理。如果不需要进行编码处理,那么在建表的时候可以在尾部添加

    column_encoded_bytes=0
  5. 建表的时候需要指定的列族

    create table users(id varchar primary key,basic.username varchar,basic.phone varchar,basic.password varchar,info.address varchar,info.age integer
    );
  6. 插入数据

    upsert into employers values('e0001', 'Danny', 25, 'male');
  7. 查询数据

    select * from employers;
  8. 删除数据

    delete from employers where id = 'e0001';
  9. 删除表

    drop table employers;
  10. 退出命令行

    !quit

JDBC操作

Thick Client
  1. Thick Client(胖客户端)是将Phoenix的所有的功能都集成到了客户端,因此提供的功能比较齐全,缺点是客户端打成jar包体积较大

  2. API操作

    package com.fesco.phoenix;
    ​
    import java.sql.*;
    ​
    // 胖客户端
    public class ThickClientDemo {
    ​public static void main(String[] args) throws SQLException {
    ​// 获取连接Connection con = DriverManager.getConnection("jdbc:phoenix:hadoop01:2181");// 获取表述Statement stat = con.createStatement();// 查询ResultSet rs = stat.executeQuery("select * from students");while(rs.next()){String name = rs.getString("name");System.out.println(name);}// 关闭连接rs.close();stat.close();con.close();
    ​}
    ​
    }
Thin Client
  1. Thin Client(瘦客户端)将Phoenix的功能进行了拆解,大部分的功能基本上由Phoenix服务器来承担,客户端只负责发送请求获取数据

  2. 从Phoenix5.X开始,Phoenix安装包中默认不提供对瘦客户端的支持,所以需要额外安装PhoenixQueryServer来增加支持

  3. 安装PhoenixQueryServer

    # 进入预安装目录
    cd /opt/presoftware/
    # 上传或者下载安装包
    # 解压
    tar -xvf phoenix-queryserver-6.0.0-bin.tar.gz -C ../software/
    # 进入安装路径
    cd /opt/software/phoenix-queryserver-6.0.0/
    # 将Phoenix的连接jar包复制到当前路径下
    cp /opt/software/phoenix-5.1.3/phoenix-client-hbase-2.5-5.1.3.jar ./
    # 启动QueryServer
    bin/queryserver.py start

二级索引

概述

  1. 在HBase中,查询数据的时候,需要指定行键,通过行键来锁定数据

    get 'tableName', 'rowKey', 'cf:c'

    但是Phoenix将命令包装成了SQL形式,那么也就意味着必然会出现不通过主键来查询的情况,例如:

    -- 通过主键查询,对应到HBase上是有行键的
    select age from person where id = 'p001';
    -- 没有通过主键来查询指定数据
    select age from person name = 'tom';

    这个SQL在HBase上是先对全表来进行扫描(scan),然后扫描完成之后进行的过滤,因此效率会非常低

  2. Phoenix针对这种情况提供了二级索引:针对非主键列建立索引。那么建立索引之后,能够在不使用主键的前提下,来提升查询效率

全局索引(Global Index)

  1. 在Phoenix中,当建立索引的时候,如果不指定,那么默认建立的就是全局索引

  2. 建立全局索引的时候,在HBase中会生成一张新的表专门用于存储这个索引列,也就意味着,如果更改原始表中的数据,索引表中的数据同步更改,因此全局索引更适合于读多写少的场景

  3. 基本语法

    create index 索引(表)名 on 表名(列名);
    -- 例如
    create index s_name_index on students(name);
    -- 会在HBase中生成一个索引表s_name_index,其中以name列的值作为s_name_index的行键
    create index s_name_index on students(name, gender);
    -- 会在HBase中生成一个索引表s_name_index,其中以name列和gender列拼接的值作为s_name_index的行键

包含索引(Covered Index)

  1. 基本语法

    create index 索引(表)名 on 表名(列名1) include(列名2);
    create index s_name_index on students(name) include(gender);
    -- 针对name和gender类建立索引,但是在索引表中,只把name作为行键,gender作为普通列来存储

本地索引(Local Index)

  1. 全局索引是建立一个新的索引表,本地索引不是建立索引表,而是在原表中添加一个列族作为索引列族

  2. 这种方式的优势:当需要对数据进行更新的时候,不需要跨表更新

  3. 基本语法

    create local index 索引(表)名 on 表名(列名);
    create local index s_name_index on students(name, gender);

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

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

相关文章

LangChain-15 Manage Prompt Size 管理上下文大小,用Agent的方式询问问题,并去百科检索内容,总结后返回

背景描述 这一节内容比较复杂&#xff1a; 涉及到使用工具进行百科的检索&#xff08;有现成的插件&#xff09;有AgentExecutor来帮助我们执行后续由于上下文过大&#xff0c; 我们通过计算num_tokens&#xff0c;来控制我们的上下文 安装依赖 pip install --upgrade --qu…

「每日跟读」英语常用句型公式 第7篇

「每日跟读」英语常用句型公式 第7篇 1. He might as well ___ 其实可以___(也无妨) We might as well walk to school (我们其实可以走去学校) We might as well give up (我们其实可以放弃) You might as well go home (你其实可以回家) You might as well listen to h…

数据库设计说明书(Word模板)

2 数据库环境说明 3 数据库的命名规则 4 逻辑设计 5 物理设计 5.1 表汇总 5.2 表结构设计 6 数据规划 6.1 表空间设计 6.2 数据文件设计 6.3 表、索引分区设计 6.4 优化方法 7 安全性设计 7.1 防止用户直接操作数据库 7.2 用户帐号加密处理 7.3 角色与权限控制 8 数据库管理与维…

标准C库文件操作

open 系列API 和 fopen系列API的区别 1.来源: -open 是UNIX系统调用函数(包括LINUX系统)&#xff0c;返回的是文件描述符 -fopen是ANSIC标准的C语言库函数&#xff0c;在不同系统重调用不同内核的API 2.移植性: fopen 是C标准函数&#xff0c;具有良好的移植性&#xff1b; 而…

photomaker:customizing realistic human photos via stacked id embedding

PhotoMaker: 高效个性化定制人像照片文生图 - 知乎今天分享我们团队最新的工作PhotoMaker的技术细节。该工作开源5天Githubstar数已过6千次&#xff0c;已列入Github官方Trending榜第一位&#xff0c;PaperswithCode热度榜第一位&#xff0c;HuggingFace Spaces趋势榜第一位。项…

Vue2 —— 学习(四)

一、收集表单数据 &#xff08;一&#xff09;介绍 前面其实已经 学过了 v-model 双向绑定事件&#xff0c;能获取到表单中的内容到 vm 实例对象中 但是前面只是收集文本框&#xff0c;下面学习一下 各种类型表单数据收集 &#xff08;单/多 选&#xff0c;下拉框&#xff0…

关闭TED报ORA-28365: wallet is not open

关闭钱包报 实际状态是open状态&#xff1a; V$ENCRYPTION_WALLET.STATUS列如果不为CLOSED&#xff0c;重启后也不能是CLOSED&#xff0c;或者清理完成后&#xff0c;再次初始化报“Master Key已存在”错误。 获取UNDO表空间大小 SQL> show parameter undo_tablespace NA…

Elastic:加速生成式人工智能体验

作者&#xff1a;Matt Riley 搜索驱动的人工智能和开发人员工具专为速度和规模而打造。 在大型语言模型&#xff08;LLM&#xff09;和生成式 AI 的每日突破中&#xff0c;开发者站在了这场运动的最前沿&#xff0c;影响着它的方向和可能性。在这篇博客中&#xff0c;我将分享…

第十三篇【传奇开心果系列】Python自动化办公库技术点案例示例:深度解读Python自动化操作PPT

传奇开心果博文系列 系列博文目录Python自动化办公库技术点案例示例系列 博文目录前言一、 Python自动化操作PPT能力介绍二、常用库介绍三、创建新PPT示例代码四、编辑现有PPT示例代码五、批量处理示例代码六、数据驱动生成示例代码七、合并与拆分示例代码八、母版和版式操作示…

词频统计程序

使用Hadoop MapReduce处理文本文件&#xff0c;Mapper负责将文本分割为单词&#xff0c;然后Reducer对每个单词进行计数&#xff0c;最后将结果写入输出文件。 // 定义WordCount公共类 public class WordCount {// 主入口方法&#xff0c;处理命令行参数public static void m…

计算机视觉技术:深度学习在美颜SDK中的应用探索

当下&#xff0c;计算机视觉技术在美颜领域的应用变得越来越重要。接下来&#xff0c;小编将讲解深度学习在美颜SDK中的应用&#xff0c;以及它如何改变我们对美颜技术的认识和期待。 一、美颜技术的发展 虽然美颜技术可以在一定程度上改善图像质量&#xff0c;但往往难以满足…

Vue - 4( 8000 字 Vue 入门级教程)

一&#xff1a; Vue 初阶 1.1 关于不同版本的 Vue Vue.js 有不同版本&#xff0c;如 vue.js 与 vue.runtime.xxx.js&#xff0c;这些版本主要针对不同的使用场景和需求进行了优化&#xff0c;区别主要体现在以下几个方面&#xff1a; 完整版 vs 运行时版&#xff1a; vue.js&…

大厂设计师倾心推荐的在线作图免费网站

在当今数字时代&#xff0c;绘画已经成为各行各业的必备技能。无论你是设计师、学生、创作者还是业余爱好者&#xff0c;免费的在线绘图软件都是发挥创造力和表达想法的理想选择。本文将介绍七款强大免费的在线绘图软件&#xff0c;让你轻松实现自己的创作梦想。你可以在不安装…

数据资产概念解释

文章目录 概念数据资产表现形式数据资产的价值数据资产的定义和分类有哪些&#xff1f;数据资产管理的最佳实践和案例研究是什么&#xff1f;如何评估数据资产的价值及其对企业整体价值的贡献度&#xff1f;面对数据资产的非实体性和可加工性&#xff0c;企业如何有效管理和利用…

中间件漏洞攻防学习总结

前言 面试常问的一些中间件&#xff0c;学习总结一下。以下环境分别使用vulhub和vulfocus复现。 Apache apache 文件上传 (CVE-2017-15715) 描述: Apache(音译为阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上&#xff0c;由于其跨…

UE5、CesiumForUnreal实现建筑白模生长动画效果

文章目录 1.实现目标2.实现过程2.1 实现原理2.2 具体代码2.3 应用测试3.参考资料1.实现目标 在上篇文章加载本地建筑轮廓GeoJson数据生成建筑白模的基础上,本文通过材质“顶点偏移”实现建筑白模生长效果,GIF动图如下所示: 2.实现过程 常用的实现建筑生长效果的方式有两种,…

Unity 获取RenderTexture像素颜色值

拿来吧你~ &#x1f9aa;功能介绍&#x1f32d;Demo &#x1f9aa;功能介绍 &#x1f4a1;不通过Texture2D 而是通过ComputerShader 提取到RenderTexture的像素值&#xff0c;效率有提升哦&#xff01; &#x1f4a1;通过扩展方法调用&#xff0c;方便快捷&#xff1a;xxxRT.G…

Pytorch Windows EOFError: Ran out of input when num_workers>0

关于深度学习的一些学习框架,我使用过pytorch,caffe,caffe2,openchatkit,oneflow等,最近我将长达几十万字的报错手册重新进行了整理,制作出一个新的专栏,主要记录这几种常见的开发框架在安装和使用过程中常见的报错,以及我是如何解决掉的,以此来帮助更多的深度学习开…

牛客错题整理——C++

1.运行下图中代码&#xff0c;输出的结果是什么&#xff1f;这段代码有什么问题&#xff1f; class A { public:A(){ std::cout << "A is created." << std::endl; }~A(){ std::cout << "A is deleted." << s…

大语言模型如何工作?

此为观看视频How Large Language Model works的笔记。 GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一个大语言模型&#xff08;LLM&#xff09;&#xff0c;可以生成类似人类的文本。本文阐述&#xff1a; 什么是LLMLLM如何工作LLM的应用场景 什么是…