Hadoop介绍

Hadoop的基础概念:

Hadoop的前身是Apache Nutch,始于2002年,是Apache Lucene的子项目之一。在Google提出在基于自己的BigTable大规模数据存储的Map Reduce计算框架之后,Nutch的发起者开始尝试将二者结合并在2006年分离出来成立了一套完整的软件取名为Hadoop。因此,如今的Hadoop成为了一个包含HDFS,MapReduce,Pig,ZooKeeper等子项目的集合。

Hadoop的核心内容主要包括两块:HDFS和MapReduce。

1. HDFS

HDFS是一个分布式文件系统,全称是Hadoop Distributed File System。它是基于Java实现的可以部署在廉价的硬件上的,具有高吞吐率和高容错性的一套开源系统。由于HDFS放宽了POSIX的部分约束规范,使得它能以流形式访问文件系统中的数据。整个HDFS系统设计了两套自己的协议,都是基于TCP/IP协议之上设计的:Client Protocol和DataNode Protocol。Client Protocol负责客户端与文件系统的通信,而文件系统内部各个节点之间通过DataNode Protocol协议来实现内部的通信和文件和管理。HDFS采用了主从(Master/Slave)结构模型,一个HDFS由一个NameNode和若干个DataNode组成,其中NameNode作为主服务器,管理文件系统的命名空间和客户端的连接。集群中的DataNode则管理各自存储的数据。

2. MapReduce

MapReduce是一种编程模型,用于大规模数据集(TB级)运算。MapReduce在执行时先制定一个map函数,把输入键值对映射成新的键值对,经过一定处理之后交给reduce,之后reduce对想同key下所有的value进行处理再输出键值对作为最终的结果。其框架实现是由一个单独运行在主节点上的JobTracker和运行在每个集群从属节点上的TaskTracker共同组成。主节点负责调度构成一个个作业,这些作业分布运行在从属节点上,主节点监控它们的执行情况并管理失败的作业重新执行。

HDFS和MapReduce共同组成了Hadoop分布式系统体系结构的核心,HDFS实现分布式文件系统,MapReduce实现集群上的分布式计算和任务处理。

现在讨论得比较热的是Facebook主打的Hive,还有淘宝网所使用的HBase。这二者都是基于Hadoop的衍化项目:

1. Hive

Hive是一个建立在Hadoop基础之上的数据仓库,提供了一些用于数据整理、特殊查询和分析存储在Hadoop文件系统中数据的工具。Hive提供的是一种结构化数据截止类似传统SQL,可以使得熟悉SQL的工程师能够很轻松的重用SQL语法来查询Hadoop中的数据,该语言简称Hive QL。同时,在MapReduce部分也支持通过Hive QL语言编译成的一组组MapReduce任务,方便MapReduce开发人员进行Hadoop应用开发。

2. HBase

HBase是一个分布式、面向列的开源数据库。该技术来源于Google的BigTable(一个结构化数据的分布式存储系统)。HBase在Hadoop基础上提供了类似BigTable的分布式存储能力。HBase是一个适合于存储非结构化数据的数据库,因为它是基于列存储而不是行存储,用户将数据存储在稀松的表里,每一行数据都可以拥有可选择的键和任意数量的列。HBase主要用于需要随机访问实时读写大数据的应用。

笔者个人理解,一个Hive的实例是Facebook利用Hive QL强大的查询分析能力给的页面的广告商提供大量有价值的用户喜好数据,便于广告商在特定的时机投放回报率最高的广告。一个HBase的实例是淘宝网利用HBase分布式读写大数据的能力来支撑圣诞、光棍节这种庞大的实时在线交易数据。

不管是Hive还是HBase,都是基于Hadoop衍生而来的,笔者也认同许多人的观点,Hadoop并不是万能的,它的出现给传统的关系型数据库提出了巨大挑战,确实是在硬件和存储设备价格低廉的大背景下顺应而出的东西。但真的要使用它,发挥它的巨大优势,还是要根据各自的业务需求,选择继承也好、衍生也好,充分发挥计算本地化的分布式能力。

End

Hadoop是开源项目,源代码可以从这里下载到:http://hadoop.apache.org/core/version_control.html

相关推荐