当前位置: 编程技术>综合
本页文章导读:
▪hbase学习笔记(1)——hbase体系结构 HBase体系结构
HBase的服务器体系结构遵从简单的主从服务器架构,它由HRegion Server群和HBase Master Server构成。
HBase Master Server负责管理所有的HRegion Server,而HBase中所有的服务器都是通过ZooKeeper.........
▪Linux学习笔记2 今天结合《UNIX环境高级编程》,看到第三章了,主要是熟悉了一下vi的操作,和几个命令
以下是今天的笔记:
./a.out > data 可以把标准输出重定向到data文件中
date 时间
who 显示了当.........
▪虚存管理
1、页表的数据结构
页号
标志
主存块号
修改位
外存地址
struct PageItem {
unsigned pageID; // 作业的页号
unsigned outMAddr; // 该页在外存上的地址
bool sta.........
[1]hbase学习笔记(1)——hbase体系结构
来源: 互联网 发布时间: 2013-11-10
HBase体系结构
HBase Master服务器
HBase的服务器体系结构遵从简单的主从服务器架构,它由HRegion Server群和HBase Master Server构成。
HBase Master Server负责管理所有的HRegion Server,而HBase中所有的服务器都是通过ZooKeeper来进行协调并处理HBase服务器运行期间可能遇到的错误。
HBase Master本身并不存储HBase中的任何数据,HBase逻辑上的表可能会被划分成多个HRegion,然后存储到HRegion服务器群中。
HBase Master服务器中存储的是从数据到HRegion服务器的映射。
HBase体系结构如下图:
HRegion
当表的大小超过设置值的时候,HBase会自动将表划分为不同的区域,每个区域包含所有行的一个子集。对用户来说,每个表是一堆数据的集合,靠主键来区分。从物理上来说,一张表是被拆分成多块,每块就是一个HRegion。
我们用表名+开始/结束主键来区分每一个HRegion。一个HRegion会保存一个表里面某段连续的数据,从开始主键到结束主键,一张完整的表格是保存在多个HRegion上面的。
HRegion服务器
所有的数据库数据一般是保存在Hadoop分布式文件系统(HDFS)上面的,用户通过一系列HRegion服务器获取这些数据。一台机器上一般只运行一个HRegion服务器,而且每一个区段的HRegion也只会被一个HRegion服务器维护。
HRegion服务器包括两大部分:HLOG部分和HRegion部分。
其中HLOG用来存储数据日志,采用的是先写日志的方式(Write-ahead log)。
HRegion部分由很多的HRegion组成,存储的是实际的数据。每一个HRegion又由很多的Store组成,每一个Store存储的实际上是一个列族(ColumnFamily)下的数据。
此外,每一个HSore中包含一块MemStore。MemStore驻留在内存中,数据来到时首先更新到MemStore中,当到达阀值之后再更新到对应的StoreFile(又名HFile)中。
每一个Store包含了多个StoreFile,StoreFile负责的是实际的数据存储,为HBase中最小的存储单元。
HBase中不涉及数据的直接删除和更新操作,所有的数据均通过追加的方式进行更新。数据的删除和更新在HBase合并(compact)的时候进行。当Store中StoreFile的数量超过设定的阀值时将触发合并操作,该操作会把多个StoreFile文件合并成一个StoreFile。
当用户需要更新数据的时候,数据会被分配到对应的HRegion服务器上提交修改。数据首先被提交到HLOG文件里面,在写入HLOG之后,commit()调用才会将其返回给客户端。HLOG文件用于故障恢复。例如某一台HRegionServer发生故障时,那么它所维护的HRegion会被重新分配到新的机器上。这时HLOG会按照HRegion进行划分。新的机器在加载HRegion的时候可以通过HLOG对数据进行恢复。
当一个HRegion变得过于巨大、超过了设定的阀值时,HRegion服务器会调用HRegion.closeAndSplit(),将此HRegion拆分为两个,并且报告主服务器让它决定由哪台HRegion服务器来存放新的HRegion。
这个拆分过程十分迅速,因为两个新的HRegion最初只是保留原来HRegionFile文件的引用。这时旧的HRegion会处于停止服务的状态,当新的HRegion拆分完成并且把引用删除了以后,旧的HRegion才会删除。
另外,两个HRegion可以通过调用HRegion.closeAndMerge()合并成一个新的HRegion,当前版本下进行此操作需要两台HRegion服务器都停机。
每台HRegion服务器都会和HMaster服务器通信,HMaster的主要任务就是告诉每个HRegion服务器它要维护哪些HRegion。
当一台新的HRegion服务器登录到HMaster服务器时,HMaster会告诉它先等待分配数据。当一台HRegion死机时,HMaster会把它负责的HRegion标记为未分配,然后再把它们分配到其它HRegion服务器中。
如果当前HBase已经解决了之前存在的SPFO(单点故障),并且HBase总可以启动多个HMaster,那么它就能通过Zookeeper来保证系统中总有一个Master在运行。
HMaster在功能上主要负责Table和HRegion的管理工作,具体包括:
- 管理用户对table的增、删、改、查操作;
- 管理HRegion服务器的负载均衡,调整HRegion分布;
- 在HRegion分裂后,负责新HRegion的分配;
- 在HRegion服务器停机后,负责失效HRegion服务器上的HRegion迁移。
HRegion是按照表名和主键范围来区分,由于主键范围是连续的,所以一般用开始主键就可以表示相应的HRegion。
但是,因为我们有合并和分割操作,如果正好在执行这些操作的过程中出现死机,那么就可能存在多份表名和开始主键相同的数据,这样的话只有开始主键就不够了,这就需要通过HBase的元数据信息来区分那一份才是正确的数据文件,为了区分这样的情况,每个HRegion都有一个‘regionId’来标识它的唯一性。
[2]Linux学习笔记2
来源: 互联网 发布时间: 2013-11-10
今天结合《UNIX环境高级编程》,看到第三章了,主要是熟悉了一下vi的操作,和几个命令
以下是今天的笔记:
./a.out > data 可以把标准输出重定向到data文件中
date 时间
who 显示了当前登录在该机器上的所有用户的列表
(但是不包括su的用户,因为su过去的用户进程空间是作为一个子空间存在,他并没有得
到一个登录的tty)
pwd命令用于显示当前工作目录
: set nu vi显示行号
: set nonu vi取消显示行号
od -c first.c 观看first.c文件里面的实际内容 -c表示以字符方式打印文件内容
clear 清屏
作者:lingxiu0613 发表于2013-1-8 18:12:54 原文链接
阅读:29 评论:0 查看评论
[3]虚存管理
来源: 互联网 发布时间: 2013-11-10
1、页表的数据结构
页号
标志
主存块号
修改位
外存地址
struct PageItem {
unsigned pageID; // 作业的页号
unsigned outMAddr; // 该页在外存上的地址
bool state; // 该页是否调入内存,若未调入内存,则blockID和modify字段无效
unsigned blockID; // 该页对应的内存物理块号
bool modify; // 该页是否被修改过
};
初始页表结构:
0 1 5 011 1 1 1 8 012 1 2 1 9 013 0 3 1 10 015 0 4 0 0 017 0 5 0 0 025 0 6 0 0 212 0 7 0 0 213 0
操作
页号
单元号(偏移量)
struct Instruction{
string OPC;
unsigned OPAPageID;
unsigned OPAUnitID;
};
指令序列表:
+ 0 040 + 1 050 * 2 016 存 3 022 取 0 054 - 6 040 移位 4 052 + 5 022 存 1 034 取 7 056 + 4 002 取 6 076
4、缺页中断机构算法
采用FIFO置换算法,流程图如下:
队列进出情况:
页面走向0
1
2
3
0
6
4
5
1
7
4
6
页框0
0
0
0
1
2
3
6
4
5
1
1
1
2
3
6
4
5
1
2
2
3
6
4
5
1
7
3
6
4
5
1
7
6
#define_CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<queue>
#include<vector>
#include<string>
#include<cassert>
usingnamespace std;
const intPAGE_NUMBER = 8; // 作业所占的页数
const intBLOCK_NUMBER = 4; // 系统最多为作业分配的块数
const intBLOCK_SIZE = 64; // 主存的每块长度
structPageItem {
unsigned pageID; // 作业的页号
unsigned outMAddr; // 该页在外存上的地址
bool state; // 该页是否调入内存,若未调入内存,则blockID和modify字段无效
unsigned blockID; // 该页对应的内存物理块号
bool modify; // 该页是否被修改过
// 默认构造函数
PageItem()
:pageID(0),
blockID(0),
state(false),
modify(false),
outMAddr(0){}
// 构造函数
PageItem (
unsigned _pageID,
unsigned _blockID,
bool _state,
bool _modify,
unsigned _outMAddr)
:pageID(_pageID),
blockID(_blockID),
state(_state),
modify(_modify),
outMAddr(_outMAddr){}
};
structInstruction {
string OPC;
unsigned OPAPageID;
unsigned OPAUnitID;
};
//FIFOQueue的最大长度即系统最多为作业分配的块数BLOCK_NUMBER
voidInterrupt(vector<PageItem> &pageTable, queue<unsigned>&FIFOQueue, const unsigned visitPageID)
{
assert(FIFOQueue.size() <=BLOCK_NUMBER);
// 按书上给的一定队满,待改进
if (FIFOQueue.size() == BLOCK_NUMBER) // 队满则置换,换出队头
{
unsigned num =FIFOQueue.front(); // 队头的页号num
pageTable[num].state = false;
if (pageTable[num].modify)
{
cout << "页" << num <<"被修改过,写回磁盘" << endl;
}
cout << "调页" << num <<"到磁盘" << endl;
FIFOQueue.pop();
pageTable[visitPageID].blockID= pageTable[num].blockID;
}
//pageTable[visitPageID].outMAddr = // 队不满时实际应按内存分配算法给出该页分配到的物理块号
cout << "调入页" << visitPageID<< endl;
pageTable[visitPageID].state = true;
pageTable[visitPageID].modify = false;
FIFOQueue.push(visitPageID);
// 实际还应修改内存分块表
}
intmain(int argc, char **argv)
{
freopen("cin.txt","r", stdin);
vector<PageItem>pageTable(PAGE_NUMBER); // 作业在内存的页表
queue<unsigned> FIFOQueue; //系统为作业分配的块队列,元素为该页的页号
for (int i = 0; i < PAGE_NUMBER;++i)
{
cin >>pageTable[i].pageID
>>pageTable[i].state
>>pageTable[i].blockID
>> pageTable[i].outMAddr
>>pageTable[i].modify;
if (pageTable[i].state)
{
FIFOQueue.push(i);
}
}
Instruction ins;
int cnt = 1;
while (cin >> ins.OPC >>ins.OPAPageID >> ins.OPAUnitID) //取指
{
cout << "执行指令" << cnt++ <<endl;
unsigned visitPageID =ins.OPAPageID; // 截取指令中的访问页号,来自MAR
if (ins.OPAPageID >=PAGE_NUMBER)
{
cout << "产生越界中断!" << endl; // 应抛出异常?
return 1;
}
while(!pageTable[visitPageID].state)
{
cout << &
最新技术文章:
 
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!