Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1800839
  • 博文数量: 286
  • 博客积分: 3713
  • 博客等级: 少校
  • 技术积分: 2275
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-11 09:47
个人简介

http://blog.chinaunix.net/uid/16979052.html

文章分类

全部博文(286)

文章存档

2018年(1)

2017年(16)

2016年(9)

2015年(17)

2014年(15)

2013年(112)

2012年(116)

分类: HADOOP

2013-03-19 09:39:34

H2 { margin-top: 0.46cm; margin-bottom: 0.46cm; direction: ltr; color: rgb(0, 0, 0); line-height: 173%; text-align: justify; page-break-inside: avoid; page-break-after: avoid; }H2.western { font-family: "Verdana",sans-serif; font-size: 14pt; font-weight: bold; }H2.cjk { font-family: "黑体","SimHei",monospace; font-size: 14pt; font-weight: bold; }H2.ctl { font-family: "Verdana",sans-serif; font-size: 14pt; font-weight: bold; }P { margin-bottom: 0.21cm; direction: ltr; color: rgb(0, 0, 0); text-align: justify; }P.western { font-family: "Verdana",sans-serif; font-size: 10pt; }P.cjk { font-family: "华文细黑"; font-size: 10pt; }P.ctl { font-family: "Verdana",sans-serif; font-size: 12pt; }STRONG { font-weight: bold; }A:link { color: rgb(0, 0, 255); text-decoration: underline; }

1Apache Hadoop项目

HadoopApache开源组织的一个分布式计算开源框架,基于 Hadoop可以轻松地编写可处理海量数据的分布式并行程序,并将其运行于由成百上千个结点组成的大规模计算机集群上。Hadoop Doug Cutting(道格·卡廷)在2004年开始开发并于2005年秋天作为Nutch的一部分被正式引入到ApacheHadoopHDFSMapReduceHBaseHiveZooKeeper等成员组成。其中,HDFS MapReduce 是两个最基础最重要的成员。Hadoop子项目的组成如下图所示:

7-1 Hadoop子项目组成图


  • Core

一系列分布式文件系统和通用I/O的组件和接口(序列化、Java RPC和持久化数据结构)20097core被更名为common

  • Avro

一种提供高效、跨语言RPC的数据序列系统,持久化数据存储。(在本书写作期间,Avro只是被当作一个新的子项目创建,而且尚未有其他Hadoop子项目在使用它。)

  • MapReduce

分布式数据处理模式和执行环境,运行于大型商用机集群。

  • HDFS

分布式文件系统,运行于大型商用机集群。

  • Pig

一种数据流语言和运行环境,用以检索非常大的数据集。Pig运行在MapReduceHDFS的集群上。

  • Hbase

一个分布式的、列存储数据库。HBase使用HDFS作为底层存储,同时支持MapReduce的批量式计算和点查询(随机读取)

  • ZooKeeper

一个分布式的、高可用性的协调服务。ZooKeeper提供分布式锁之类的基本服务用于构建分布式应用。


  • Hive

分布式数据仓库。Hive管理HDFS中存储的数据,并提供基于SQL的查询语言(由运行时引擎翻译成MapReduce作业)用以查询数据。

  • Chukwa

分布式数据收集和分析系统。Chukwa运行HDFS中存储数据的收集器,它使用MapReduce来生成报告。

2MapReduce

MapReduce是一种用于数据处理的编程模型,适合于大规模数据(TB 级)的计算。Map Reduce 是它的主要思想,来源于函数式编程语言,它的原理如下图所示:

Map 负责将数据打散,Reduce负责对数据进行聚集,用户只需要实map reduce 两个接口,即可完成TB 级数据的计算,常见的应用包括:日志分析和数据挖掘等数据分析应用。另外,还可用于科学数据计算,如圆周率PI 的计算等。Hadoop MapReduce 的实现也采用了Master/Slave 结构。Master 叫做JobTracker,而Slave 叫做TaskTracker。用户提交的计算叫做Job,每一个Job 会被划分成若干个TasksJobTracker负责Job Tasks 的调度,而TaskTracker负责执行Tasks

3HDFS

HDFS Google GFS 的开源版本,一个高度容错的分布式文件系统,它能够提供高吞

吐量的数据访问,适合存储海量(PB 级)的大文件(通常超过64M),其原理如下图所示:

HDFS采用Master/Slave 结构。NameNode 维护集群内的元数据,对外提供创建、打开、删除和重命名文件或目录的功能。DataNode 存储数据,并提负责处理数据的读写请求。ataNode定期向NameNode 上报心跳,NameNode 通过响应心跳来控制DataNode

4HBASE

HBase是一个开源的、分布式的、面向列的存储系统,该技术来源于Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Googl文件系统(File System)所提供的分布式数据存储一样,HBaseHadoop之上提供了类似于Bigtable的能力。


  • 数据模型

Hbase是一个类似Bigtable的分布式数据库,大部分特性和Bigtable一样,是一个稀疏的,长期存储的{存在硬盘上},多维度的,排序的映射表。这张表的索引是行关键字,列关键字和时间戳。每个值是一个不解释的字符数组数据都是字符串,没类型。

用户在表格中存储数据,每一行都有一个可排序的主键和任意多的列。由于是稀疏存储的,所以同一张表里面的每一行数据都可以有截然不同的列。

列名字的格式是":,都是由字符串组成,每一张表有一个family集合,这个集合是固定不变的,相当于表的结构,只能通过改变表结构来改变。但是label值相对于每一行来说都是可以改变的。

Hbase把同一个family里面的数据存储在同一个目录底下,而Hbase的写操作是锁行的,每一行都是一个原子元素,都可以加锁。

所有数据库的更新都有一个时间戳标记,每个更新都是一个新的版本,而hbase会保留一定数量的版本,这个值是可以设定的。客户端可以选择获取距离某个时间最近的版本,或者一次获取所有版本。


  • 概念视图:

一个表可以想象成一个大的映射关系,通过主键,或者主键+时间戳,可以定位一行数据,由于是稀疏数据,所以某些列可以是空白的,下面就是数据的概念视图:

Row Key

Time Stamp

Column "contents:"

Column "anchor:"

Column "mime:"

"com.cnn.www"

t9


"anchor:cnnsi.com"

"CNN"


t8


"anchor:my.look.ca"

"CNN.com"


t6

"..."



"text/html"

t5

"..."




t3

"..."





上图是一个存储Web网页的范例列表片断。行名是一个反向URL{即com.cnn.www}。contents列族{原文用 family,译为族,详见列族}存放网页内容,anchor列族存放引用该网页的锚链接文本。CNN的主页被Sports Illustrater{即所谓SICNN的王牌体育节目}和MY-look的主页引用,因此该行包含了名叫“anchor:cnnsi.com”和 “anchhor:my.look.ca”的列。每个锚链接只有一个版本{由时间戳标识,如t9t8};而contents列则有三个版本,分别由时间 戳t3t5,和t6标识。

  • 物理视图

虽然从概念视图来看每个表格是由很多行组成,但是在物理存储上面,它是按照列来保存的,这点在数据设计和程序开发的时候必须牢记。

上面的概念视图在物理存储的时候应该表现成下面那样子:

Row Key

Time Stamp

Column "contents:"

"com.cnn.www"

t6

"..."

t5

"..."

t3

"..."


Row Key

Time Stamp

Column "anchor:"

"com.cnn.www"

t9

"anchor:cnnsi.com"

"CNN"

t8

"anchor:my.look.ca"

"CNN.com"


Row Key

Time Stamp

Column "mime:"

"com.cnn.www"

t6

"text/html"


需要注意的是在概念视图上面有些列是空白的,这样的列实际上并不会被存储,当请求这些空白的单元格的时候,会返回null值。

如果在查询的时候不提供时间戳,那么会返回距离现在最近的那一个版本的数据。因为在存储的时候,数据会按照时间戳排序。


阅读(2155) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~