热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hbase中Region,Split,Store的关系

在Hbase中split是一个很重要的功能,Hbase是通过把数据分配到一定数量的reg

Hbasesplit是一个很重要的功能,Hbase是通过把数据分配到一定数量的region来达到负载均衡的。一个table会被分配到一个或多个region中,这些region会被分配到一个或者多个regionServer中。在自动split策略中,当一个region达到一定的大小就会自动split成两个regiontableregion中是按照row key来排序的,并且一个row key所对应的行只会存储在一个region中,这一点保证了Hbase的强一致性 。

在一个region中有一个或多个stroe,每个stroe对应一个column families(列族)。一个store中包含一个memstore 0 或 多个store files。每个column family 是分开存放和分开访问的。

 

概念:

1、Split决定数据放到哪一个region()的一种策略,默认为当前文件大于10G时进行分割。

http://hbase.apache.org/book.html#hbase_default_configurations

2、regionhbase的一个存储区域,如果设置为本地存储,一般为一个目录。如以下表有四个regions:

 


则查看本地目录:

drwxrwxr-x. 5 wangjian wangjian 72 6月  18 18:23 70dc383dfd9ef681280843252bba5f4f

drwxrwxr-x. 4 wangjian wangjian 60 6月  18 17:27 73c271f026da046b6bc91e930c9a2d1b

drwxrwxr-x. 5 wangjian wangjian 72 6月  18 18:23 7d831c1fa9687c6a10f5376e6e0f6210

drwxrwxr-x. 4 wangjian wangjian 60 6月  18 17:27 e1a4395701a713510b10e144d734009e

正好对应有四个目录。

3、Store就是一个Column Family, 即一个Store就是一个列族。

 

经过上面的分析,Spit,Region,Store的关系为:

 



 

2、关于保存到hbase中的中文转成ascii码的形式

将中文保存到HBase数据库中。会出如:\xhh这样的形式。为什么呢?

首先需要说明的是hbase中保存的都是字节码,在保存过的过程中,会将字节码转成ascii码的形式加以保存。

以下保存一个字到hbase数据库中:

hbase(main):004:0> put "t2",'S003',"info:name",""

0 row(s) in 0.0670 seconds

然后查询:

hbase(main):006:0> get "t2","S003"

COLUMN                           CELL                                                                                       

 info:name                       timestamp=1529327955211, value=\xE5\xBC\xA0                                                

1 row(s) in 0.0690 seconds

查到的数据可见为:\xE5\xBC\xA0

关于Ascii见下表的说明:

转义字符

意义

ASCII码值(十进制)

\a

响铃(BEL)

007

\b

退格(BS) ,将当前位置移到前一列

008

\f

换页(FF),将当前位置移到下页开头

012

\n

换行(LF) ,将当前位置移到下一行开头

010

\r

回车(CR) ,将当前位置移到本行开头

013

\t

水平制表(HT) (跳到下一个TAB位置)

009

\v

垂直制表(VT)

011

\\

代表一个反斜线字符''\'

092

\'

代表一个单引号(撇号)字符

039

\"

代表一个双引号字符

034

\?

代表一个问号

063

\0

空字符(NULL)

000

\ooo

13位八进制数所代表的任意字符

三位八进制

\xhh

12位十六进制所代表的任意字符

二位十六进制

 

注意,最后一个\xhh,就是表示任意字符的ascii码。现在我们写一下段Java代码,将字的字节码转成十六进制:

String name = "张";

byte[] bs = name.getBytes();

for(byte b:bs) {

System.out.println(Integer.toHexString(b));

}

获取到的结果为:

ffffffe5

ffffffbc

ffffffa0

现在我们将前面的6个进行与运算。然后再转成大写:

String name = "张";

String str = "";

byte[] bs = name.getBytes();

for (byte b : bs) {

String tem = Integer.toHexString(b & 0xff);

str+="\\x"+tem.toUpperCase();

}

System.out.println(str);

输出的结果为:

\xE5\xBC\xA0

现在再比较一下保存到Hbase中的数据,是不是相同的结果:

hbase(main):006:0> get "t2","S003"

COLUMN                           CELL                                                                                       

 info:name                       timestamp=1529327955211, value=\xE5\xBC\xA0                                                

 

Java代码中,连接Hbase读取到的值可以直接转回成中文形式:

用于连接Hbase的公共代码:

package cn.wangjian.hbase.utils;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;

import org.apache.hadoop.hbase.client.Admin;

import org.apache.hadoop.hbase.client.Connection;

import org.apache.hadoop.hbase.client.ConnectionFactory;

import org.apache.hadoop.hbase.client.HBaseAdmin;

public class HBaseConnection {

protected HBaseAdmin hbaseadmin;

protected Connection connection;

public HBaseConnection() throws Exception {

Configuration conf = HBaseConfiguration.create();

conf.set("hbase.zookeeper.quorum", "hadoop91:2181");

connection = ConnectionFactory.createConnection(conf);

Admin admin = connection.getAdmin();

if (admin instanceof HBaseAdmin) {

this.hbaseadmin = (HBaseAdmin) admin;

}

}

public void close() throws Exception{

hbaseadmin.close();

connection.close();

}

}

 

用于查询的测试代码:

package cn.wangjian.hbase;

import org.apache.hadoop.hbase.TableName;

import org.apache.hadoop.hbase.client.Get;

import org.apache.hadoop.hbase.client.Result;

import org.apache.hadoop.hbase.client.Table;

import org.apache.hadoop.hbase.util.Bytes;

import cn.wangjian.hbase.utils.HBaseConnection;

/**

 * 使用Get对象查询,查询一个中文的值

 */

public class Demo08_ReadChinese extends HBaseConnection {

public Demo08_ReadChinese() throws Exception {

Table table = connection.getTable(TableName.valueOf("t2"));

Get get = new Get("S003".getBytes());//参数为行键

Result result =  table.get(get);

byte[] bs = result.getValue("info".getBytes(), "name".getBytes());

String str =  Bytes.toString(bs);

System.out.println(str);//张,可以直接返回中文

table.close();

close();

}

public static void main(String[] args) throws Exception {

new Demo08_ReadChinese();

}

}

 

 

 





推荐阅读
  • vue引入echarts地图的四种方式
    一、vue中引入echart1、安装echarts:npminstallecharts--save2、在main.js文件中引入echarts实例:  Vue.prototype.$echartsecharts3、在需要用到echart图形的vue文件中引入:   importechartsfrom"echarts";4、如果用到map(地图),还 ... [详细]
  • iOS snow animation
    CTSnowAnimationView.hCTMyCtripCreatedbyalexon1614.Copyright©2016年ctrip.Allrightsreserved.# ... [详细]
  • WPF项目学习.一
    WPF项目搭建版权声明:本文为博主初学经验,未经博主允许不得转载。一、前言记录在学习与制作WPF过程中遇到的解决方案。使用MVVM的优点是数据和视图分离,双向绑定,低耦合,可重用行 ... [详细]
  • 短视频app源码,Android开发底部滑出菜单首先依赖三方库implementationandroidx.appcompat:appcompat:1.2.0im ... [详细]
  • vsftpd配置(虚拟用户、匿名用户登录)
    一、ftp服务搭建(一)概述1.ftp连接及传输模式(1)控制连接TCP21,用于发送FTP命令信息 ... [详细]
  • 本文介绍了如何使用Python爬取妙笔阁小说网仙侠系列中所有小说的信息,并将其保存为TXT和CSV格式。主要内容包括如何构造请求头以避免被网站封禁,以及如何利用XPath解析HTML并提取所需信息。 ... [详细]
  • 本文详细介绍如何使用Netzob工具逆向未知通信协议,涵盖从基本安装到高级模糊测试的全过程。通过实例演示,帮助读者掌握Netzob的核心功能。 ... [详细]
  • 本文介绍了如何将包含复杂对象的字典保存到文件,并从文件中读取这些字典。 ... [详细]
  • 我有一个从C项目编译的.o文件,该文件引用了名为init_static_pool ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 利用python爬取豆瓣电影Top250的相关信息,包括电影详情链接,图片链接,影片中文名,影片外国名,评分,评价数,概况,导演,主演,年份,地区,类别这12项内容,然后将爬取的信息写入Exce ... [详细]
  • 微软推出Windows Terminal Preview v0.10
    微软近期发布了Windows Terminal Preview v0.10,用户可以在微软商店或GitHub上获取这一更新。该版本在2月份发布的v0.9基础上,新增了鼠标输入和复制Pane等功能。 ... [详细]
  • 开发日志:高效图片压缩与上传技术解析 ... [详细]
author-avatar
管怡6440_368
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有