首页 > 代码库 > Hadoop学习

Hadoop学习

一个Hadoop集群拥有多个并行的计算机,用以存储和处理大规模的数据集

Hadoop强调代码向数据迁移

要运行的程序在规模上比数据小的多,更容易移动,此外通过网络移动数据比加载运行程序更花时间,这样不如不移动数据,而是让运行程序(可执行代码)

加载到数据所在的机器上去

数据拆分后放在集群中分布,并且尽可能让计算也在同一台计算机上,最适合一次写入,多次读取的数据存储需求,在这方面它就像SQL世界的数据仓库

当你用MapReduce模型写应用程序,hadoop替你管理所有与扩展性相关的底层问题


NameNode位于HDFS主端,它指导端的I/O操作任务,NameNode是HDFS的书记员,它跟踪文件是如何分成文件块,以及这些文件块存在哪些存储节点,监控整个分布式系统是否正常运行状态。

运行NameNode,需要大量内存和I/O资源,不会同时是DataNode或者TaskTracker

每个HDFS集群的节点都会驻留一个DataNode守护进程,执行将HDFS数据块读取或写入到本地文件系统的文件中

当希望对HDFS文件读写时,文件被分割为多个快,由NameNode告知客户端每个数据块驻留在哪个DataNode

Datanode不断向NameNode报告。初始化时,每个DataNode将存储的数据块告知NameNode

Secondary NameNode(SNN)是一个用于监测HDFS集群状态的辅助进程,每个集群只有一个SNN,它独占一台服务器,它不会运行DataNode或TaskTracker守护进程。它不接收或记录HDFS的实时变化,它与NameNode通信,根据集群设置的时间间隔获取HDFS的元数据快照。

JobTracker是应用程序和Hadoop之间的纽带,一旦提交代码到集群上,JobTracker就会确定执行计划,它包括决定处理哪些文件,为不同的任务分配哪些节点以及监控所有任务的运行。如果任务失败,jobtracker会重启任务,但所分配的节点可能不同 ,同时受到预定义的重试次数限制,每个Hadoop集群只有一个jobtracker,它通常运行在集群服务器的主节点上,监测MapReduce作业的整个执行过程

TaskTracker管理每个任务在每个节点的执行情况,每个TaskTracker负责执行JobTracker分配的单项任务,虽然每个节点上仅有一个TaskTracker,但是每个TaskTracker可以生成多个JVM,来并行的处理许多Map或Reduce任务

TaskTracker的一个职责是持续不断的向JobTracker通信,如果JobTracker在指定时间内未收到TaskTracker的“心跳”,它会认为该节点的TaskTracker崩溃,进而提交相应的任务到集群的其他节点


单机模式,伪分布模式,全分布模式之间切换,使用符号链接而不是不断修改xml配置文件,需要为每种模式生成一个配置目录并存放相应的xml文件

然后可以使用linux命令 In -s conf.cluster conf  在不同配置之间切换,这个技巧有助于临时将一个节点从集群中分离出来。从而通过伪分布模式调试一个节点的MapReduce程序,但要确保这些模式在HDFS上有不同的文件存储位置,并在改配置之前停止所有守护进程