Phoenix Salted Table

1. 概念

Phoenix Salted Table是phoenix为了防止hbase表rowkey设计为自增序列而引发热点region读和热点region写而采取的一种表设计手段。通过在创建表的时候指定SALT_BUCKETS来实现pre-split。如下表示创建表的时候将表预分割到20个region里面。

CREATE TABLE SALT_TEST (a_key VARCHAR PRIMARY KEY, a_col VARCHAR) SALT_BUCKETS = 20;

对salted table创建二级索引,那么二级索引表也会相应与源表一样分割到相同数量的region里面。

2. 原理

Phoenix Salted Table的实现原理是在将一个散列取余数后的byte值插入到 rowkey的第一个字节里,并通过定义每个region的start key 和 end key 将数据分割到不同的region,以此来防止自增序列引入的热点,平衡集群的读写性能。

salted byte的计算方式大致如下:

hash(rowkey) % SALT_BUCKETS

SALT_BUCKETS的取值为1到256。

默认下salted byte将作为每个region的start key 及 end key,以此分割数据到不同的region,这样能做到具有相同salted byte的数据能够位于同一个region里面。

3. 实践

CREATE TABLE SALT_TEST (a_key VARCHAR PRIMARY KEY, a_col VARCHAR) SALT_BUCKETS = 4;

UPSERT INTO SALT_TEST(a_key, a_col) VALUES(‘key_abc‘, ‘col_abc‘);
UPSERT INTO SALT_TEST(a_key, a_col) VALUES(‘key_ABC‘, ‘col_ABC‘);
UPSERT INTO SALT_TEST(a_key, a_col) VALUES(‘key_rowkey01‘, ‘col01‘);

从phoenix sqlline.py查询数据,没感觉有什么不同:

通过hbase shell 观察验证,看出确实是在rowkey的第一个字节插入byte字节来迫使数据能够散列到不同的region,以提高hbase并发读写性能:

这里可以判断phoenix写入的时候做了处理,插入了这个字节,并且在读取的API里面也相应的进行了处理,将这个字节给过滤掉,所以只能通过phoenix接口来获取数据已确保拿到正确的rowkey

时间: 2024-10-12 05:11:17

Phoenix Salted Table的相关文章

Phoenix 导出csv文件

1. 是否存在高效的csv导出工具? phoenix提供了BulkLoad工具,使得用户可以将大数据量的csv格式数据高效地通过phoenix导入hbase,那么phoenix是否也存在高效导出csv数据的工具类呢? 这里可能有人会想是否能够按照导出常规hbase的方法来导出数据.比如自己写Java代码,或者用hbase原生支持的工具类,或者说采用pig提供的hbase工具类.是否能这么干取决于你phoenix建表时候字段的数据类型.如果字段采用的不是varchar.char等字符类型以及uns

Phoenix on HBase

(一)概要 Apache Phoenix是基于BSD许可开源的一个Java中间层,可以让开发者在Apache HBase上执行SQL查询.Apache Phoenix主要特性: 嵌入式的JDBC驱动,实现了大部分的java.sql接口,包括元数据API 可以通过多部行键或是键/值单元对列进行建模 完善的查询支持,可以使用多个谓词以及优化的扫描键 DDL支持:通过CREATE TABLE.DROP TABLE及ALTER TABLE来添加/删除列 版本化的模式仓库:当写入数据时,快照查询会使用恰当

phoenix 利用CsvBulkLoadTool 批量带入数据并自动创建索引

需要先创建表: CREATE TABLE IF NOT EXISTS population ( state CHAR(2) NOT NULL, city VARCHAR NOT NULL, population BIGINT CONSTRAINT my_pk PRIMARY KEY (state, city)); 在phoenix 目录下执行 hadoop jar /home/phoenix-4.6.0-HBase-1.0-bin/phoenix-4.6.0-HBase-1.0-client.j

CDH5..4.7+phoenix实现查询HBase异常:java.sql.SQLException: ERROR 1102 (XCL02): Cannot get all table regions

基础环境是用CM 安装的cdh5.4.7,phoenix使用的版本是phoenix-4.5.2-HBase-1.0-bin. 出现异常信息:java.sql.SQLException: ERROR 1102 (XCL02): Cannot get all table regions 下载地址:http://mirror.bit.edu.cn/apache/phoenix/phoenix-4.5.2-HBase-1.0/bin/phoenix-4.5.2-HBase-1.0-bin.tar.gz

org.apache.hadoop.hbase.DoNotRetryIOException: Class org.apache.phoenix.coprocessor.MetaDataEndpointImpl cannot be loaded Set hbase.table.sanity.checks to false at conf or table descriptor if you want

https://stackoverflow.com/questions/38495331/apache-phoenix-unable-to-connect-to-hbase 这个坑不该啊 首选配置hbase 集群是按照官网配置的 配置phoenix 是按照官网上配置的,结果就是报错了,看了stockflow上的答案才知道,,配置了backup-master时,master也cp phoenix-4.9.0-HBase-1.2-server.jar ~/apps/hbase/lib/ 换句话说每个

HBase 5、Phoenix使用

1.建表 执行建表语句 $ ./psql.py localhost:2181 ../examples/stock_symbol.sql 其中../examples/stock_symbol.sql是建表的sql语句 CREATE TABLE IF NOT EXISTS WEB_STAT ( HOST CHAR(2) NOT NULL, DOMAIN VARCHAR NOT NULL, FEATURE VARCHAR NOT NULL, DATE DATE NOT NULL, USAGE.CORE

phoenix 3.1 + hbase 0.94.21 的安装和使用

Apache Phoenix 是 HBase 的 SQL 驱动.Phoenix 使得 HBase 支持通过 JDBC 的方式进行访问,并将你的 SQL 查询转成 HBase 的扫描和相应的动作. 兼容性: Phoenix 2.x - HBase 0.94.x Phoenix 3.x - HBase 0.94.x Phoenix 4.x - HBase 0.98.1+ 1:hbase 0.94.21 的安装 参考http://blog.csdn.net/wind520/article/detail

Phoenix(sql on hbase)简介

Phoenix(sql on hbase)简介 介绍: Phoenix is a SQL skin over HBase delivered as a client-embedded JDBC driver targeting low latency queries over HBase data. Phoenix takes your SQL query, compiles it into a series of HBase scans, and orchestrates the runnin

JAVA 实现数据导入Phoenix

需要导入的jar 包有: 实现代码: package cn.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.util.Random; public class PhoenixTest { public static void insertDatas() { Statement s