paulwong

HBASE读书笔记

GET、PUT是ONLINE的操作,MAPREDUCE是OFFLINE的操作


HDFS写流程
客户端收到要保存文件的请求后,将文件以64M为单位拆成若干份BLOCK,形成一个列表,即由几个BLOCK组成,将这些信息告诉NAME NODE,我要保存这个,NAME NODE算出一个列表,哪段BLOCK应该写到哪个DATA NODE,客户端将第一个BLOCK传到第一个节点DATA NODE A,通知其保存,同时让它通知DATA NODE D和DATA NODE B也保存一份,DATA NODE D收到信息后进行了保存,同时通知DATA NODE B保存一份,DATA NODE B保存完成后则通知客户端保存完成,客户端再去向NAME NODE中取下一个BLOCK要保存的位置,重复以上的动作,直到所有的BLOCK都保存完成。

HDFS读流程
客户端向NAME NODE请求读一个文件,NAME NODE返回这个文件所构成的所有BLOCK的DATA NODE IP及BLOCK ID,客户端并行的向各DATA NODE发出请求,要取某个BLOCK ID的BLOCK,DATA NODE发回所要的BLOCK给客户端,客户端收集到所有的BLOCK后,整合成一个完整的文件后,此流程结束。


MAPREDUCE流程
输入数据 -- 非多线程了,而是多进程的挑选数据,即将输入数据分成多块,每个进程处理一块 -- 分组 -- 多进程的汇集数据 -- 输出

HBASE表结构
HBASE中将一个大表数据分成不同的小表,每个小表叫REGION,存放REGION的服务器叫REGIONSERVER,一个REGIONSERVER可以存放多个REGION。通常REGIONSERVER和DATA NODE是在同一服务器,以减少NETWORK IO。
-ROOT-表存放于MASTER SERVER上,记录了一共有多少个REGIONSERVER,每个REGION SERVER上都有一个.META.表,上面记录了本REGION SERVER放有哪几个表的哪几个REGION。如果要知道某个表共有几个REGION,就得去所有的REGION SERVER上查.META.表,进行汇总才能得知。
客户端如果要查ROW009的信息,先去咨询ZOOPKEEPER,-ROOT-表在哪里,然后问-ROOT-表,哪个.META.知道这个信息,然后去问.META.表,哪个REGION有这个信息,然后去那个REGION问ROW009的信息,然后那个REGION返回此信息。


HBASE MAPREDUCE
一个REGION一个MAP任务,而任务里的map方法执行多少次,则由查询出来的记录有多少条,则执行多少次。
REDUCE任务负责向REGION写数据,但写到哪个REGION则由那个KEY归属哪个REGION管,则写到哪个REGION,有可能REDUCE任务会和所有的REGION SERVER交互。


在HBASE的MAPREDUCE JOB中使用JOIN
REDUCE-SIDE JOIN
利用现有的SHUTTLE分组机制,在REDUCE阶段做JOIN,但由于MAP阶段数据大,可能会有性能问题。
MAP-SIDE JOIN
将数据较少的一表读到一公共文件中,然后在MPA方法中循环另一表的数据,再将要的数据从公共文件中读取。这样可以减少SHUTTLE和SORT的时间,同时也不需要REDUCE任务。

posted on 2013-02-01 13:55 paulwong 阅读(470) 评论(0)  编辑  收藏 所属分类: 分布式HADOOPHBASE


只有注册用户登录后才能发表评论。


网站导航: