当前位置: 编程技术>综合
本页文章导读:
▪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网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!