天天看点

Hadoop--初识Hadoop

什么是hadoop?

搞什么东西之前,第一步是要知道what(是什么),然后是why(为什么),最后才是how(怎么做)。但很多开发的朋友在做了多年项目以后,都习惯是先how,然后what,最后才是why,这样只会让自己变得浮躁,同时往往会将技术误用于不适合的场景。

hadoop框架中最核心的设计就是:mapreduce和hdfs。mapreduce的思想是由google的一篇论文所提及而被广为流传的,简单的一句话解释mapreduce就是“任务的分解与结果的汇总”。hdfs是hadoop分布式文件系统(hadoop distributed file system)的缩写,为分布式计算存储提供了底层支持。

mapreduce从它名字上来看就大致可以看出个缘由,两个动词map和reduce,“map(展开)”就是将一个任务分解成为多个任务,“reduce”就是将分解后多任务处理的结果汇总起来,得出最后的分析结果。这不是什么新思想,其实在前面提到的多线程,多任务的设计就可以找到这种思想的影子。不论是现实社会,还是在程序设计中,一项工作往往可以被拆分成为多个任务,任务之间的关系可以分为两种:一种是不相关的任务,可以并行执行;另一种是任务之间有相互的依赖,先后顺序不能够颠倒,这类任务是无法并行处理的。回到大学时期,教授上课时让大家去分析关键路径,无非就是找最省时的任务分解执行方式。在分布式系统中,机器集群就可以看作硬件资源池,将并行的任务拆分,然后交由每一个空闲机器资源去处理,能够极大地提高计算效率,同时这种资源无关性,对于计算集群的扩展无疑提供了最好的设计保证。(其实我一直认为hadoop的卡通图标不应该是一个小象,应该是蚂蚁,分布式计算就好比蚂蚁吃大象,廉价的机器群可以匹敌任何高性能的计算机,纵向扩展的曲线始终敌不过横向扩展的斜线)。任务分解处理以后,那就需要将处理以后的结果再汇总起来,这就是reduce要做的工作。

hadoop解决两个问题海量数据存储、海量数据分析

提供了一个可靠的共享存储和分析系统,hdfs(hadoop distributed file system)实现存储,mapreduce实现分析处理。这两块是hadoop的核心。

hadoop具有最大化利用内存、最大化利用磁盘、最大化利用cpu的特点。

hbase:nosql数据库,最大化利用内存。

hdfs:架构设计原则(最大化利用磁盘):

    block(文件块):一个文件分块默认64m。

    namenode:保存文件系统的目录信息,读取信息。数据节点很多时,容易成为系统的瓶颈,避免这个问题,实现namenode一般都保存到内存中,同事持久化一部分信息在磁盘上,以备数据丢失。

    datanode:用于存储block。

    hdfs的ha策略:2.x开始hadoop支持namenode的active-standy模式,宕机时standy切换成active模式为整个应用提供服务。

Hadoop--初识Hadoop

mapreduce:

最大化利用cpu,分析处理大规模的数据集

通过图片可以简单了解,将同一操作,放在相当于多台处理器上并行执行,每个处理器执行1部分执行后,在将结果汇总在一起,这样减少了很多的时间。

Hadoop--初识Hadoop

继续阅读