Hadoop以分布式文件系统HDFS(Hadoop Distributed File System)和MapReduce为核心,为用户提供了系统底层细节透明得分布式基础构架。分布式文件系统HDFS的高容错性、高伸缩性等优点允许用户将Hadoop部署在低廉的硬件上,形成分布式文件系统;MapReduce分布式编程模型允许用户在不了解分布式系统底层细节的情况下开发并行运用程序。所以用户可以利用Hadoop快速简便地搭建分布式计算平台,并且可以充分利用集群的计算和存储能力,完成海量数据的处理。
Apache Hadoop 2.X版本包含以下模块:Hadoop通用模块;Hadoop分布式文件系统HDFS;支持应用数据高吞吐访问的分布式文件系统;Hadoop YARN,用于作业调度和集群资源管理地框架;Hadoop MapReduce,基于YARN地大数据并行处理系统。
Hadoop生态系统主要包括:Hive、HBase、Pig、Sqoop、Flume、ZooKeeper、Mahout、Spark、Storm、Shark、Phonix、Tez、Ambari等。
Hive:用于Hadoop地一个数据仓库系统,它提供了类似于SQL地查询语言,通过该语言可以方便的进行数据汇总,特定查询以及分析放在Hadoop兼容文件系统中的大数据。
HBase:一种分布的、可伸缩的、大数据存储库,支持随机、实时读/写访问。
Pig:一个分析大数据地平台。
Sqoop:为高效传输批量数据而设计的一种工具,用于Apache Hadoop和机构化数据库存储之间的数据传输。
Flume:一种分布式的、可靠的服务,用于高校搜集、汇总、移动大量日志数据。
ZooKeeper:一种集中服务,用于维护配置信息,命名,提供分布式同步,以及提供分组服务。
Mahout:一种基于Hadoop的机器学习和数据挖掘的分布式计算框架算法集,实现了多种MapReduce模式的数据挖掘算法。
Spark:一个开源数据分析集群计算框架,由UC Berkeley开发,建立于HDFS之上。Spark 和 Hadoop一样,用于构建大规模,低延时的数据分析应用。Spark采用Scala语言实现,使用Scala作为应用框架。
Storm:一个分布式的、容错的实时计算系统。Storm属于流处理平台,多用于实时计算并更新数据库;也可被用于“连续计算”,对数据流做连续查询,并将数据计算结果以流的形式输出给用户。
Shark:即Hive on Spark,一个专为Spark打造的大规模数据仓库系统,兼容Apache Hive, Shark支持Hive查询语言、元存储、序列化格式及自定义函数,与现有Hive部署无缝集成,是一个更快、更强大的替代方案。
Hadoop HDFS 原理
HDFS和现有的分布式文件系统有很多共同点,同时,它又和其他的有明显的区别。HDFS是一个高容错性(fault-tolerant)的系统,部署在廉价硬件上能提供高吞吐量的数据访问(high throughput),放宽了一部分POSIX的约束,来实现流式读取文件的系统数据的目的。
HDFS采用的是master/slave的架构,一个HDFS集群是由一个NameNode和一定数目的DataNodes组成。
Hadoop MapReduce 原理
这是一个快速高效用于编写并行处理大数据程序并应用在大集群上的编程框架。Map(映射)、Reduce(归纳)。一个MapReduce作业通常会把输入的数据集切分成若干独立的数据块,由map任务已完全并行的方式处理它们,框架会对map的输出先进行排序,然后把输出结果给reduce任务。作业的输入和输出通常会被存储在文件系统中,整个框架负,责任务的调度和监控,重新执行失败任务。
通常,运行MapReduce框架的计算节点和HDFS存储节点是运行在一组相同节点上的。MapReduce框架包括一个主节点(ResourceManager)、多个子节点(NodeManager)和MRAppMaster(每个任务一个)共同组成。应用程序至少应该指明输入/输出的参数位置(路径),并通过实现合适的接口或则抽象类提供map和reduce函数,再加上其他作业的参数,就构成了作业配置(job configuration)。Hadoop的job client提交作业(jar包/exe等)和配置信息给ResourceManager,后者负责分发这些软件和配置信息给slave,调度任务且监控它们的执行,同时提供状态和诊断信息给job-client。
(1)map阶段
InputFormat根据输入文件产生键值对,并传送到mapper类的map函数中;
map输出键值对到一个没有排序的缓冲内存中;
当缓冲内存达到给定值或者map任务完成,在缓冲中的键值对就会被排序,然后输出到磁盘中的溢出文件;
如果有多个溢出文件,那么就会整理这些文件到一个文件中,排好序;
这些排好序的、在溢出文件中的键值对就会等到Reducer的获取;
(2)Reduce阶段
Reducer获取Mapper的记录,然后产生另外的键值对,最后输出到HDFS中;
shuffle:相同的key被传输到同一个Reducer中;
当有一个Mapper完成以后,Reducer就开始获取相关的数据,所有的溢出文件会被排序到一个缓存区中;
当内存缓冲区满了以后,就会产生溢出文件到本地磁盘;
当Reducer所有相关的数据都传输完成以后,所有;溢出文件就会被整合排序;
Reducer中的reduce方法针对每个key调用一次;
Reducer的输出到HDFS。
Hadoop YARN 原理
那时在MapReduce框架中,作业执行受两种类型的进程控制:一个称为JobTracker的主要进程,它协调在集群上运行的所有作业,分配要在TaskTracker上运行的map和reduce任务;另一个就是许多称为TaskTracker的下级进程,它们运行分配的任务并定期向JobTracker汇报。
YARN(也成为MRv2),YARN称为下一代Hadoop计算平台,主要包括ResourceManager、ApplicationMaster、NodeManager,其中ResourceManager用来代替集群管理器,ApplicationMaster代替一个专用且短暂的JobTracker,NodeManager代替TaskTracker。
YARN最主要的思想就是将JobTracker两个主要的功能分离成单独的组件,这两个功能是资源管理和任务调度/监控。新的资源管理器全局管理所有应用计算资源的分配,每一个应用的ApplicationMaster负责相应的协调和调度。一个应用程序要么是一个单独的传统的MapReduce任务或者一个DAG(有向无环图)任务。ResouceManager和每一台机器的节点管理服务(NodeManager)能够管理用户在那台机器上的进程并对计算进行组织。事实上,每一个应用的ApplicationMaster是一个特定的框架库,它和ResourceManager来协调资源,和NodeManager协同工作以运行和监控任务。
ResourceManager有两个重要的组件:Scheduler和ApplicationsManager。Scheduler负责分配资源给每个正在运行的应用,同时需要注意Scheduler是一个单一的分配资源组件,不负责监控或跟踪任务状态。而且它不保证重启失败的任务。ApplicationsManager注意负责接收任务的提交,和执行应用的第一个容器ApplicationMaster协调,负责任务失败时重启。
客户端提交任务到ResourceManager的ApplicationsManager,然后Scheduler在获得了集群各个节点的资源后,为每个应用启动一个App Mastr用于执行任务。每个起到一个或多个Container用于实际执行任务。