dsy851009 阅读(164) 评论(0)


1、基础了解

        先说说Hadoop是个什么玩意儿,一个分布式系统基础架构,由apache基金会所研发,用户可以利用集群的威力高速运算和存储数据;
        Hadoop实现了一个分布式文件系统(Hadoop Distributed Flie System),简称HDFS。HDFS有高容错性,且可以设计用来部署在低廉的硬件上。and可以提供高传输率来访问应用程序的数据,适合那些有着超大数据集的应用程序。
        Hadoop原本来自于谷歌一款名为MapReduce的编程模型包,谷歌的MapReduce框架可以把一个应用程序分解为许多并行计算指令,跨大量的计算节点运行非常巨大的数据集。使用该框架的一个典型例子就是在网络数据上运行的搜索算法,后来迅速发展成为分析大数据的领先平台。
        Hadoop是最受欢迎的在Internet上对搜索关键字进行内容分类的工具,但它也可以解决许多要求极大伸缩性的问题。例如,如果您需要grep一个10TB的巨型文件(比如我们的日志文件),会出现什么情况呢?在传统的系统上,这将需要很长的时间,但是Hadoop在设计时就考虑到这些问题,采用并行执行机制,因此能大大提高效率。

上面的如果你嫌罗嗦,可以略过,看下面:
重点:
        解决主要问题:海量数据存储(HDFS),分布式运算(Map Reduce)
     基于Hadoop的生态系统:数据仓库(Hive), Hbase (NoSQL数据库),Flume(数据采集)
    支持任何语言编写 MapReduce Job(通过Hadoop Streaming)
一句话总结:Hadoop就是融合了各种技术比如(MR等)多机高速处理大数据;

2、架构        

        Hadoop由许多元素构成,其最底部是HDFS,它存储Hadoop集群中所有存储节点上的文件,HDFS(对于本文)的上一层是MapReduce 引擎,该引擎由 JobTrackers 和 TaskTrackers 组成 ,对外部客户机而言,HDFS就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件,比如创建执行命令:hadoop fs -mkdir /fc/src/ 这样就创建了目录 /fc/src/,hadoop fs -rmr /fc/src/这样就删除了目录src,等等。Hadoop的架构是基于一组特定的节点构建的,如下图:它包括了 NameNode(仅一个,负责协调,提供元数据服务)、DataNode(可以多个,负责干活,提供存储块),这里括号的内容不明白的可以不用先管,继续往下看。

 1、NameNode

        NameNode 是一个通常在 HDFS 实例中的单独机器上运行的软件;
        存储在HDFS中的文件会被分成块(Block),然后将这些块复制到多个计算机中(就是DataNode中),每个块的大小通常为64M,块大小和复制数量(默认保存3份)在创建文件时有客户机决定,可以设置。NameNode负责管理文件系统名称空间和控制外部客户机的访问,主要提供名称查询服务,NameNode保存的信息主要包括:哪个文件分了多少块,每个块放在哪个节点上等这些信息,如下列表:
1、文件owership和permissions
2、文件包含哪些块
3、Block保存在哪个DataNode(由DataNode启动时上报)

NameNode的metadata(元数据) 信息在启动后会加载到内存,metadata存储到磁盘文件名为”fsimage”;

2、DataNode

        DataNode也是通常在HDFS实例中单独机器上运行的软件,Hadoop集群包含一个NameNode和大量DataNode。DataNode通常以机架的形式组织,机架通过一个交换机将所有系统连接起来;
        DataNode的主要工作:保存Block(数据块)、启动DataNode线程时会向NameNode汇报block信息、通过向NameNode发送心跳保持与其联系(3秒一次),如果NN(下面都用NN表示NameNode,DN表示DataNode,便于书写)10分钟没有收到DN的心跳,则认为其已经Lost,并copy其上的block(块)到其他DN。如下图:

这里讲下Block的副本放置策略:
1、第一个副本:放置在上传文件的DN;如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点
2、第二个副本:放置在于第一个副本不同的机架的节点上
3、第三个副本:与第二个副本相同集群的节点
4、更多副本:随机节点

再提下Block:
设置一个Block 64MB,如果上传文件小于该值,仍然会占用一个Block的命名空间(NameNode metadata),但是物理存储上不会占用64MB的空间
Block大小和副本数由Client端上传文件到HDFS时设置,其中副本数可以变更,Block是不可以再上传后变更的;所以要根据自己平时处理的文件大小自己设置,以免浪费块空间;

3、数据损坏处理

1、当DN读取block的时候,它会计算checksum
2、如果计算后的checksum,与block创建时值不一样,说明该block已经损坏。
3、client读取其它DN上的block;NN标记该块已经损坏,然后复制block达到预期设置的文件备份数
4、DN在其文件创建后三周验证其checksum

3、Hadoop三种运行模式

1、单机版
所有的程序(NN JT DN TT)运行于同一个JVM中,HDFS为本地文件系统
2、伪分布式
所有的程序运行于同一台机器的独立JVM中
3、分布式
不同程序运行于不同节点中,通常Master运行NN和JT,Slave机器运行DN和TT

本人曾安装过分布式模式,可以去hadoop分类下面看相关文章;


OK,整体系统介绍到这里,后续会整理MapReduce等子项目内容;如有错误请指教^_^