- 浏览: 472897 次
- 性别:
- 来自: 南阳
文章分类
最新评论
-
yuanhongb:
这么说来,感觉CGI和现在的JSP或ASP技术有点像啊
cgi -
draem0507:
放假了还这么勤啊
JXL操作Excel -
chenjun1634:
学习中!!
PHP/Java Bridge -
Jelen_123:
好文章,给了我好大帮助!多谢!
hadoop安装配置 ubuntu9.10 hadoop0.20.2 -
lancezhcj:
一直用job
Oracle存储过程定时执行2种方法(转)
1. HFile详解
HFile文件分为以下六大部分
序号 |
名称 |
描述 |
1 |
数据块 |
由多个block(块)组成,每个块的格式为: [块头] + [key长] + [value长] + [key] + [value]。 |
2 |
元数据块 |
元数据是key-value类型的值,但元数据快只保存元数据的value值,元数据的key值保存在第五项(元数据索引块)中。 该块由多个元数据值组成。 |
3 |
fileInfo块 |
该块保存与HFile相关的一些信息。 fileInfo是以key值排序key-value类型的值。基本格式为: keyValue元素的个数 + (key + value类型id + value) + (key + value类型id + value) + …… |
4 |
数据索引块 |
该块的组成为: 索引块头 + (数据块在文件中的偏移 + 数据块长 + 数据块的第一个key) + (数据块在文件中的偏移 + 数据块长 + 数据块的第一个key) + …… |
5 |
元数据索引块 |
该块组成格式同数据块索引,只是某部分的意义不一样,组成格式: 索引块头 + (元数据在文件中的偏移 + 元数据value长 + 元数据key) + (元数据在文件中的偏移 + 元数据value长 + 元数据key) + …… |
6 |
HFile文件尾 |
该块记录了其他各块在hfile文件中的偏移信息和其他一些元信息。组成格式如下: 文件尾 + Fileinfo偏移 + 数据块索引偏移 + 数据块索引个数 + 元数据索引偏移 + 元数据索引个数 + 数据块中未压缩数据字节数 + 数据块中全部数据的key-value个数 + 压缩代码标识 + 版本标识 |
1.1.数据块详解
数据块组成图如下:
Data Block Magic {'D', 'A', 'T', 'A', 'B', 'L', 'K', 42 } |
|||
key长 |
value长 |
key |
value |
key长 |
value长 |
key |
value |
…… |
|||
key长 |
value长 |
key |
value |
Data Block Magic {'D', 'A', 'T', 'A', 'B', 'L', 'K', 42 } |
|||
key长 |
value长 |
key |
value |
key长 |
value长 |
key |
value |
…… |
|||
key长 |
value长 |
key |
value |
Blocks …… |
数据块部分由多个block块组成,每个数据块由块头 + 多个cell(key-value对)集合组成,如上图。每个数据块的大小在创建表的列族的时候可以指定,默认为(64 * 1024)。
1. 块大小的设定由HColumnDescriptor.setBlockSize(int)指定,默认(64 * 1024)。
2. 块大小设置,块设置的越小,访问速度越快,但数据块索引越大,消耗的内存越多。因为在加载HFile时会把数据块索引全部加载到内存中。
数据块组成说明:
1. Data Block Magic – 数据块头,8字节,固定字节如下:{'D', 'A', 'T', 'A', 'B', 'L', 'K', 42 }。
2. key长 – 4字节整型,记录每个cell的key的长度。
3. value长 – 4字节整型,记录每个cell的value的长度。
4. key – cell的key值,byte[]类型,组成如下:
rowKey的长(2字节)+ rowKey + family的长(1字节) + family + qualify + timestampe(8字节) + keyType类型(1字节)
1) rowKey的长度不能大于0x7fff(32767).
2) rowKey不能为空。
3) family(列族)的长度不能大于0x7f(127)
4) qualify(限定符)的长度不能大于(0x7fffffff(2147483647) – row长度 – family长度)。
5. value – cell的value值,byte[]类型,value值不能为空。
例如:在hbase中有一个表(student),其中有一个列族(info),该列族不压缩。其中的rowkey用学号表示,现在插入一个记录(rowkey='033', qualify='age', value='19')。那么该记录将被表示成一个cell(key-value对)保存到HFile中,那么该cell在HFile中的内容如下:
项 |
字节表示 |
key长 |
{0,0,0,24} |
value长 |
{0,0,0,2} |
key |
{0,3}+{'0', '3', '3'}+{4}+{'i', 'n', 'f', 'o'}+{'a', 'g', 'e'}+{0,0,0,0,0,0,0,8}+{4} |
value |
{'1', '9'} |
问题:
1. 块大小的设置策略?
2. keyType的说明?
3. compress压缩的说明?
1.2.元数据块详解
每个元数据是key-value类型的值,新增的元数据会按照从小到大的顺序排序。
在StoreFile中,如果使用BloomFilter,则StoreFile将会把BloomFilter的信息保存到HFile中的元数据中, 元数据块中只保存元数据的value值,key值保存在元数据索引块中。格式如下:
Meta Block Magic {'M', 'E', 'T', 'A', 'B', 'L', 'K', 99 } |
Meta Data Value |
Meta Block Magic {'M', 'E', 'T', 'A', 'B', 'L', 'K', 99 } |
Meta Data Value |
…… |
每个元数据由元数据头+元数据值组成。
1.3.FileInfo详解
fileInfo中保存的信息为key-value类型的值,其中key与value都是byte[]类型。每个新增的值在内部都以值key顺序从小到大进行排序。fileInfo保存了与该HFile相关的一些信息,其中有系统保留的一些固定的值,这些值的key以”hfile.”为前缀。也可以保存用户自定义的一些值,但这些值的key不能以”hfile.”开头。其中系统内部保留的一些值如下:
项 |
key(字符串表示,实际以二进制存储) |
value |
LASTKEY |
hfile.LASTKEY |
该HFile中的数据块中的最后一个值的key, 该值如果为空则不进行保存 |
AVG_KEY_LEN |
hfile.AVG_KEY_LEN |
该HFile中的数据块中的所有值key的平均长度。 |
AVG_VALUE_LEN |
hfile.AVG_VALUE_LEN |
该HFile中的数据块中的所有值value的平均长度。 |
COMPARATOR |
hfile.COMPARATOR |
在HFile中的数据块中的值都是以值的key进行排序来存放的,而key的组成比较复杂,这就需要一个key的比较器类,而该值保存了key值比较器的类的名称。 |
fileInfo在HFile中的格式如下:
filInfo中所有值(key-value对)的个数,整型 |
||
key |
value类型标识 |
value |
key |
value类型标识 |
value |
…… |
fileInfo各项说明:
1. filInfo中所有值(key-value对)的个数,整型,四字节。
2. key值,保存fileInfo中值得key值。在HFile中的组成为
key长+key
其中key长以压缩的整型保存,整型类型包括(byte,short,int,long),如果该整数用i表示,详细说明如下:
1. 当-112 <= i <= 127 时,用一个字节保存实际值。
2. 其他情况下,第一个字节表示该整型与正负与该整数占字节长度,随后存储的是从该整数补码的高位算起的第一个非0字节的所有值。如果第一个字节为v,详细说明如下:
a) 当-120<=i<=-113时,表示该值为正数,该数所占字节为-(v+112)
b) 当-128<=i<=-121时,表示该值为负数,该数所占字节为-(v+120)
例如:
原始值 |
压缩后,以字节表示 |
说明 |
-87 |
{-87} |
第一种情况 |
127 |
{127} |
第一种情况 |
-1246 |
{-122} + {4, -35} |
第二种情况的b类型。{-122}表示该数为负数,并且所占字节长度为-(-122+120)=2字节。其中{4,-35}保存的是-1246的补码1245的第一个非0字节开始的所有字节。1245的16进制为0x04DD,非0字节共2个,第一个为0x04(4),第二个为0xDD(-35),组合一起为{-122, 4,-35} |
130 |
{-113} + {-126} |
第二种情况的a类型。{-113}表示该数为正数,并且所占字节长度为-(-113+112)=1字节。其中{-126}保存的是130的补码130的第一个非0字节开始的所有字节。130的16进制为0x04DD,非0字节共2个,第一个为0x04(4),第二个为0x82(-126),组合一起为{-113, -126} |
3. value值,保存fileInfo中值的value值。在HFile中的组成为
value长+value
其中value长以压缩的整型保存,压缩整型具体格式参考key值中关于压缩整型的说明。
1.4.数据块索引
数据块索引保存的是每一个数据块在HFile文件中的位置、大小信息以及每个块的第一个cell的key值。格式如下:
Index Block Magic {'I', 'D', 'X', 'B', 'L', 'K', 41, 43 } |
||
block offset |
block size |
block first key |
block offset |
block size |
block first key |
…… |
||
block offset |
block size |
block first key |
格式各项说明:
1. block offset 块在HFile中偏移,long(8字节)。
2. block size 块大小,int(4字节)。
3. block first key 块中第一个cell(key-value)值得key.该值的组成为(key的长(压缩整型表示)+key值)
1.5.元数据块索引
该数据块的格式与数据库索引相同,元数据块索引保存的是每一个元数据在HFile文件中的位置、大小信息以及每个元数据的key值。格式如下:
Index Block Magic {'I', 'D', 'X', 'B', 'L', 'K', 41, 43 } |
||
meta offset |
meta size |
meta name |
meta offset |
meta size |
meta name |
…… |
||
meta offset |
meta size |
meta name |
格式各项说明:
1. meta offset 元信息在HFile中偏移,long(8字节)。
2. meta size 元信息数据大小,int(4字节)。
3. meta name 元信息中的key值.该值的组成为(key的长(压缩整型表示)+key值)
1.6.文件尾
文件尾主要保存了该HFile的一些基本信息。格式比较简单,如下:
Trailer Block Magic {'T', 'R', 'A', 'B', 'L', 'K', 34, 36 } |
FileInfo Offset (long) |
Data Index Offset (long) |
Data Index Count (int) |
Meta Index Offset (long) |
Meta Index Count (int) |
Total Uncompressed Bytes (long) |
Entry Count (int) |
Compression Codec (int) |
Version (int) |
说明如下:
1. FileInfo Offset – FileInfo信息在HFile中的偏移。long(8字节)。
2. DataIndex Offset – 数据块索引在HFile中的偏移。long(8字节)。
3. DataIndex Count – 数据块索引的个数。int(4字节)。
4. MetaIndex Offset – 元数据索引块在HFile中的偏移。long(8字节)。
5. MetaIndex Count – 元数据索引块的个数。int(4字节)。
6. TotalUncompressedBytes – 未压缩的数据块部分的总大小。long(8字节)。
7. Entry Count – 数据块中所有cell(key-value)的个数。int(4字节)
8. Compression Codec – 压缩算法为enum类型,该值表示压缩算法代码。(LZO-0,GZ-1,NONE-2),int(4字节)
9. Version – 版本信息。当前该版本值为1. int(4字节)。
================================================================
因为一直在做hbase的应用层面的开发,所以体会的比较深的一点是hbase的表结构设计会对系统的性能以及开销上造成很大的区别,本篇文章先按照hbase表中的rowkey、columnfamily、column、timestamp几个方面进行一些分析。最后结合分析如何设计一种适合应用的高效表结构。
发表评论
-
mysql 定时任务
2015-11-03 09:57 732定时任务 查看event是否开启: show variabl ... -
mysql定时器
2015-08-04 14:01 5645.1以后可以使用 ALTER EVENT `tes ... -
oracle安装成功后,更改字符集
2015-07-23 11:53 598看了网上的文章,乱码有以下几种可能 1. 操作系统的字符集 ... -
运用navicat for mysql实现定时备份
2015-06-05 15:02 1049使用navicat for mysql实现定时备份 首 ... -
Oracle10g数据文件太大,导致C盘空间不够用的解决方法
2015-03-19 15:22 880由于在安装的时候将Oracle安装到了C盘,表空间也创建到了C ... -
mysql 获取第一个汉字首字母
2015-03-18 17:48 590select dmlb, dmz, dmsm1, CHAR ... -
mysql字符串函数(转载)
2014-11-13 12:05 533对于针对字符串位置的操作,第一个位置被标记为1。 AS ... -
MySQL中tinytext、text、mediumtext和longtext详解
2014-11-07 11:37 807、数字类型 类型 范围 说明 ... -
数据库中计算两地图坐标点之间的距离
2014-09-11 14:29 951CREATE OR REPLACE FUNCTION DI ... -
Oracle 取随机数
2014-05-26 11:58 4431、从表中随机取记录 select * from ... -
ORACLE 将BLOB类型转成SQL语句插入
2014-05-06 16:35 1183比如有张表结构如下: create table TestBl ... -
Oracle10g通过DBLink访问MySQL示例
2014-04-22 14:35 6301, 首先在Oracle所在计算机安装MySQL的Client ... -
Oracle执行计划详解
2014-04-22 09:32 610Oracle执行计划详解 ----- 简介: 本文全面 ... -
完全卸载oracle11g步骤
2014-03-06 18:04 548完全卸载oracle11g步骤: ... -
ODI(Oracle Data Integrator)初探
2014-02-10 17:35 0ODI(Oracle Data Integrator ... -
ORACLE10G RMAN 命令
2013-12-02 13:48 1043RMAN 命令 连接到目标数据库(不用恢复目录数据库) ... -
oracle之rman入门指南
2013-12-02 13:43 696这篇文章主要介绍RMAN的常用方法,其中包含了作者一些自己的经 ... -
RMAN参考使用手册(转)
2013-12-02 13:40 904RMAN的概念与体系结构 Oracle 9i RMAN的配置 ... -
数据泵文件
2013-12-02 13:34 771expdp介绍 EXPDP命令行选项 1. ATTACH 该选 ... -
oracle表分区详解
2013-09-22 10:05 653此文从以下几个方面来整理关于分区表的概念及操作: ...
相关推荐
hfile 到 hbase 处女发表
MapReduce生成HFile入库到HBase 可能需要的jar包,一共有3个 可以直接放在每台机器的${HADOOP_HOME}/lib下 hadoopHadoop 1.1.2 + hbase 0.94.6.1
Hive HBase生成HFile 该项目包含一个示例,该示例利用Hive HBaseStorageHandler生成HFile。 这种模式提供了一种方法,用于获取已存储在Hive中的数据,将其导出为HFile,并从这些HFile批量加载HBase表。概述HFile生成...
yl-hbase-rep hbase快照,复制实现机制,源码解析 复制对等方的实现代码 批量加载代码示例 ...也可以通过编码的方式,通过bulkload生成hfile然后再合并到hbase 致谢 yl-hbase-rep实现机制参考了lily
一、将Hadoop中普通文本格式的数据转化为可被HBase识别的HFile文件,HFile相当于Oracle中的DBF数据 文件。 二、将HFile载入到HBase中,该过程实际就是将数据从一个地移动到HBase某表数据的存放地。
3.1. 从HBase 0.20.x or 0.89.x 升级到 HBase 0.90.x 3.2. 从 0.90.x 到 0.92.x 4. The HBase Shell 4.1. 使用脚本 4.2. Shell 技巧 5. 数据模型 5.1. 概念视图 5.2. 物理视图 5.3. 表 5.4. 行 5.5. 列族 5.6. Cells...
Spark SQL HBase 库 用于将 Spark 与 Apache HBase 数据结合使用的集成实用程序。 支持 基于 HBase 读取的扫描 ... 基于 HBase 读取的分析 HFile 基于 HBase 写入的批量加载 要求 这个库需要 Spark 1.2+
1、在HBase shell中创建数据表 create '表名', {NAME=>'Polygon/Polyline/Point'} 2、将要处理的tsv格式数据存储到HDFS上 ...hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles HFile路径 空间数据表名
hbase hfile v2 format draft 描述存储结构
NULL 博文链接:https://liuyq1991.iteye.com/blog/2109364
hbase1.x 跟2.x比较.docx
2.2 hbase的应用 7 2.3 HBase的体系结构简介 8 2.4 HBase的访问方式 9 2.5 适用场景 9 3 HBase使用流程 10 3.1 流程图 10 4 使用约定 12 4.1 权限管理 12 4.2 命名规范 12 5 模型设计 13 5.1 相关概念 13 5.2 模型...
/hbase/archive (1) 进行snapshot或者升级的时候使用到的归档目录。compaction删除hfile的时 候,也会把旧的hfile归档到这里等。 /hbase/corrupt (2) splitlog的corrupt目录,以及corrupt hfile的目录。
StoreFile是对HFile的封装。StoreFile真正存储在HDFS上。 所以写数据时先往HLog上写一份,再往MemStore上写一份。当MemStore达到一定大小则往StoreFile上写。若MemStore数据有丢失,则从HLog上恢复。 而读数据时先到...
关于hbase的入门知识.hbase是基于hdfs建立的数据库,可扩展性强。
该工具是HBase提供的一个将HDFS数据转化为HBase数据库数据的一个工具。 其实现过程是,先将HDFS文件转复制并转化为HFile文件,然后将HFile移动并加载成为HBase的数据文件。
使用 API 将数据放入工作中,但因为它必须遍历 HBase 的写入路径(即在将其刷新到 HFile 之前通过 WAL 和 memstore),它比您简单地绕过该批次并自己创建 HFiles 和将它们直接复制到 HDFS 中。 幸运的是 HBase 带有...
使用 API 将数据放入工作中,但因为它必须遍历 HBase 的写入路径(即在将其刷新到 HFile 之前通过 WAL 和 memstore),它比您简单地绕过该批次并自己创建 HFiles 和将它们直接复制到 HDFS 中。 幸运的是 HBase 带有...
hbase从HBase表中导入数据到Hbase表中将fruit表中的一部分数据,通过MR迁入到fruit_mr表中从HDFS中导入数据到Hbase表中根据HDFS中的数据导入到fruit_hdfs表中
该工具是HBase提供的一个将HDFS数据转化为HBase数据库数据的一个工具。 其实现过程是,先将HDFS文件转复制并转化为HFile文件,然后将HFile移动并加载成为HBase的数据文件。