Hadoop简介

        以下一部分内容参考网友。

1. hadoop的发展

        2002年,Appache Lucene的子项目Nutch,Nutch 是一个开源Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。

        2004年,google发表MapReduce论文,Doug cutting等人受到这篇文章的启发开始尝试实现MapReduce计算框架,并将它与NDFS(Nutch Distributed File System)结合,用以支持Nutch引擎的主要算法。由于NDFS与MapReduce在Nutch搜索引擎中有着良好的作用,2006年被分离出来成为一个独立的软件,并命名为Hadoop。自此,Hadoop就成为一个对大量数据进行分布式处理的软件框架

        hadoop的核心是MapReduce和HDFS(Hadoop Distributed File System)。HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。

        HDFS处于hadoop的底层,上层提供其他分布式处理框架如MapReduce、HBase、Hive、Pig等。


2.MapReduce

 MapReduce是一种编程模型,用于大规模数据集的并行计算。映射(Map)、化简(Reduce)的概念,首先指定一个Map(映射)函数,把输入键值对映射成一对新的键值对,经过一定的处理后交给Reduce,Reduce对相同key下的所有value进行处理后再输出键值作为最终的输出的结果。


                                                                        MapReduce结构示意图

       上图就是MapReduce大致的结构图,在Map前还可能会对输入的数据有Split(分割)的过程,保证任务并行效率,在Map之后还有Shuffle(混合)的过程,对于提高Reduce的效率以及减小数据传输的压力有很大的帮助。后面会具体提及这些部分的细节。

【注】MapReduce框架由一个单独运行在主节点的JobTracker和运行在每个集群从节点的TaskTracker共同组成的。主节点负责调度一个作业的所有任务,使它们分布在不同的从节点上。当一个Job被提交时,JobTracker接收到提交作业和其配置信息之后,就会将配置信息等分发给从节点,同时调度任务并监控TaskTracker的执行。

【注】input——>map——>shuffle——>reduce——>output


3.HDFS

       HDFS是一个分布式文件系统。因为HDFS具有高容错性特点,它部署在低廉(low-cost)的硬件上。它可以通过提供高吞吐率来访问应用程序的数据,适合那些有超大数据集的应用程序。


                                                               HDFS结构示意

     上图展示了HDFS三个重要角色:NameNode、DataNode和Client。NameNode可以看作是分布式文件系统中的管理者,主要负责管理文件系统的命名空间、集群配置信息和存储块的复制等。NameNode会将文件系统的Meta-data存储在内存中,这些信息主要包括了文件信息、每一个文件对应的文件块的信息和每一个文件块在DataNode的信息等。DataNode是文件存储的基本单元,它将Block存储在本地文件系统中,保存了Block的Meta-data,同时周期性地将所有存在的Block信息发送给NameNode。Client就是需要获取分布式文件系统文件的应用程序。这里通过三个操作来说明他们之间的交互关系。

【注】NameNode是所有元数据的管理者,用户保存的数据不会经过NameNode,而是直接流向存储数据的DataNode。


文件写入

    (1)Client向NameNode发起文件写入的请求。

    (2)NameNode根据文件大小和文件块配置情况,返回给Client它所管理部分DataNode的信息。

    (3)Client将文件划分为多个Block,根据DataNode的地址信息,按顺序写入到每一个DataNode块中。

文件读取

   (1)Client向NameNode发起文件读取的请求。

   (2)NameNode返回文件存储的DataNode的信息。

   (3)Client读取文件信息。

文件Block复制

   (1)NameNode发现部分文件的Block不符合最小复制数或者部分DataNode失效。

   (2)通知DataNode相互复制Block。

   (3)DataNode开始直接相互复制。

HDFS的几个特点

   (1)Block的放置:默认不配置。一个Block会有三份备份,一份放在NameNode指定的DataNode,另一份放在与指定DataNode非同一Rack上的DataNode,最后一份放在与指定DataNode同一Rack上的DataNode上。备份无非就是为了数据安全,考虑同一Rack的失败情况以及不同Rack之间数据拷贝性能问题就采用这种配置方式。

   (2) 心跳检测DataNode的健康状况,如果发现问题就采取数据备份的方式来保证数据的安全性。

   (3) 数据复制(场景为DataNode失败、需要平衡DataNode的存储利用率和需要平衡DataNode数据交互压力等情况):这里先说一下,使用HDFS的balancer命令,可以配置一个Threshold来平衡每一个DataNode磁盘利用率。例如设置了Threshold为10%,那么执行balancer命令的时候,首先统计所有DataNode的磁盘利用率的均值,然后判断如果某一个DataNode的磁盘利用率超过这个均值Threshold以上,那么将会把这个DataNode的block转移到磁盘利用率低的DataNode,这对于新节点的加入来说十分有用。

   (4) 数据交验:采用CRC32作数据交验。在文件Block写入的时候除了写入数据还会写入交验信息,在读取的时候需要交验后再读入。

   (5) NameNode是单点:如果失败的话,任务处理信息将会纪录在本地文件系统和远端的文件系统中。

   (6) 数据管道性的写入:当客户端要写入文件到DataNode上,首先客户端读取一个Block然后写到第一个DataNode上,然后由第一个DataNode传递到备份的DataNode上,一直到所有需要写入这个Block的NataNode都成功写入,客户端才会继续开始写下一个Block。

   (7)安全模式:在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结束。安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。运行期通过命令也可以进入安全模式。在实践过程中,系统启动的时候去修改和删除文件也会有安全模式不允许修改的出错提示,只需要等待一会儿即可。


                                                                          Hadoop结构示意图

      在Hadoop的系统中,会有一台Master,主要负责NameNode的工作以及JobTracker的工作。JobTracker的主要职责就是启动、跟踪和调度各个Slave的任务执行。还会有多台Slave,每一台Slave通常具有DataNode的功能并负责TaskTracker的工作。TaskTracker根据应用要求来结合本地数据执行Map任务以及Reduce任务。

       说到这里,就要提到分布式计算最重要的一个设计点:Moving Computation is Cheaper than Moving Data。就是在分布式处理中,移动数据的代价总是高于转移计算的代价。简单来说就是分而治之的工作,需要将数据也分而存储,本地任务处理本地数据然后归总,这样才会保证分布式计算的高效性。


4.Hive

      Hive是最早由Facebook设计的,是一个建立在Hadoop基础上的数据仓库。提供了一些对hadoop文件中的数据集进行数据整理、特殊查询和分析存储的工具。Hive提供一种结构话数据的机制,它支持类似于SQL的查询语言Hive QL来帮助用户查询hadoop中的数据。


5.HBase

       HBase是一个分布式的、面向列的开源数据库(有点类似于google的Bigtable)。该技术也是来源与google的Bigtable。如同Bigtable利用了Google文件系统(GFS,google file system)提供的分布式数据存储方式一样,HBase在Hadoop之上提供了类似Bigtable的能力。HBase不用互一般的数据库,因为它适合于非结构话数据而且是基于列模式而不是基于行模式。HBase和Bigtable使用相同的数据模型。在HBase的体系结构中,HBase主要由主服务器、域服务器和客户端三部分组成。


6.Pig

        pig是一个大型的数据集分析、评估平台。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值