Hadoop应用场景
Hadoop是专为离线处理和大规模数据分析而设计的,它并不适合那种对几个记录随机读写的在线事务处理模式。
大数据存储:Hadoop最适合一次写入、多次读取的数据存储需求,如数据仓库。
大数据分析:数据密集型并行计算:数据量极大,但是计算相对简单的并行处理。如:大规模Web信息搜索、日志分析。
Hadoop相关术语
Hadoop:这个名字不是一个缩写,而是一个虚构的名字。该项目的创建者,Doug Cutting解释Hadoop的得名 :“这个名字是我孩子给一个棕黄色的大象玩具命名的。我的命名标准就是简短,容易发音和拼写,没有太多的意义,并且不会被用于别处。小孩子恰恰是这方面的高手。” The Apache Hadoop software library is a framework that allows for the distributed processing of large data sets across clusters of computers using simple programming models.
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。Hadoop在分布式存储和分布式计算中都采用了主/从架构。分布式存储系统被称为Hadoop分布式文件系统,简称HDFS。分布式计算使用了MapReduce。MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
1、存储
NameNode:名字节点。NameNode位于HDFS的主端,它指导从端的DataNode执行底层的I/O任务。NameNode是HDFS的书记员,它跟踪文件如何被分割成文件块,而这些文件块又被哪些节点存储,以及分布式文件系统的整体运行状态是否正常。
DataNode:数据节点。每一个集群的从节点都会驻留一个DataNode守护进程,来执行分布式文件系统的繁重工作-将HDFS数据块读取或者写入到本地文件系统的实际文件中。当希望对HDFS文件进行读写时,文件被分隔为多个块,由NameNode告知客户端每个数据块驻留在哪个DataNode。客户端直接与DataNode守护进程通信,来处理与数据块相对应的本地文件。而后,DataNode会与其他DataNode进行通信,复制这些数据块以实现备份。
Secondary NameNode:次名字节点。SNN是一个用于监测HDFS集群状态的辅助守护进程。SNN与NameNode通信,根据集群所配置的时间间隔获取HDFS元数据的快照。SNN的快照可以有助于减少停机的时间,并降低数据丢失的风险。
2、计算
与存储的守护进程一样,计算的守护进程也遵循主/从架构:JobTracker作为主节点,监测MapReduce作业的整个执行过程,同时,TaskTracher管理各个任务在每个从节点上的执行情况。
JobTracker:作业跟踪节点。JobTracker守护进程是应用程序和Hadoop之间的纽带。一旦提交代码到集群上,JobTracker就会确定执行计划,包括决定处理哪些文件、为不同的任务分配节点以及监控所有任务的运行。如果任务失败,JobTracker将自动重启任务,但所分配的节点可能会不同,同时受到预定义的重试次数限制。
TaskTracker:任务跟踪节点。每个TaskTracker负责执行由JobTracker分配的单项任务。虽然每个从节点上仅有一个TaskTracker,但每个TaskTracker可以生成多个JVM来并行地处理许多map或reduce任务。TaskTracker的一个职责是持续不断地与JobTracker通信。如果JobTracker在指定的时间内没有收到来自TaskTracker的“心跳”,它会假定TaskTracker已经崩溃了,进而重新提交相应的任务到集群中的其他节点中。
3、Hadoop集群
这是一个典型的Hadoop集群的拓扑图。这是一个主/从架构,其中NameNode和JobTracker为主端,DataNode和TaskTracker为从端。
4、MapReduce数据流
map:映射。每个map任务处理一个数据分片,读取输入数据,输出中间数据。
shuffle:洗牌。节点间的数据交换在“洗牌”阶段完成。注意:输入数据被分配到不同节点之后,节点间通信的唯一时间是在“洗牌”阶段。这个通信约束对可扩展性有极大的帮助。
reduce:归约。读取mapper输出的中间数据,相同key的中间数据进入相同的reducer,最后保存数据到HDFS。