Hadoop,
Hadoop
分布式并行计算平台,文件系统是HDFS,HDFS实现数据的存储,MapReduce实现数据的分析和处理,可将MapReduce视为是关系型数据库管理系统的补充,MapReduce对非结构化和半结构化数据非常有效。数据本地化是MapReduce的核心特征,MapReduce程序本质上第并行运行的,分为map和reduce两个处理阶段(映射和规约),输入和输出都是键值对。相对于Hadoop框架来说,其最核心设计就是:HDFS和MapReduce。HDFS提供了海量数据的存储,MapReduce提供了对数据的计算。
MapReduce的工作原理:
ResourceManager:是YARN资源控制框架的中心模块,负责集群中所有的资源的统一管理和分配。它接收来自NM(NodeManager)的汇报,建立AM,并将资源派送给AM(ApplicationMaster)。
NodeManager:简称NM,NodeManager是ResourceManager在每台机器的上代理,负责容器的管理,并监控他们的资源使用情况(cpu,内存,磁盘及网络等),以及向 ResourceManager提供这些资源使用报告。
ApplicationMaster:以下简称AM。YARN中每个应用都会启动一个AM,负责向RM申请资源,请求NM启动container,并告诉container做什么事情。
Container:资源容器。YARN中所有的应用都是在container之上运行的。AM也是在container上运行的,不过AM的container是RM申请的。
1. Container是YARN中资源的抽象,它封装了某个节点上一定量的资源(CPU和内存两类资源)。
2. Container由ApplicationMaster向ResourceManager申请的,由ResouceManager中的资源调度器异步分配给ApplicationMaster;
3. Container的运行是由ApplicationMaster向资源所在的NodeManager发起的,Container运行时需提供内部执行的任务命令(可以是任何命令,比如java、Python、C++进程启动命令均可)以及该命令执行所需的环境变量和外部资源(比如词典文件、可执行文件、jar包等)。
另外,一个应用程序所需的Container分为两大类,如下:
(1) 运行ApplicationMaster的Container:这是由ResourceManager(向内部的资源调度器)申请和启动的,用户提交应用程序时,可指定唯一的ApplicationMaster所需的资源;
(2) 运行各类任务的Container:这是由ApplicationMaster向ResourceManager申请的,并由ApplicationMaster与NodeManager通信以启动之。
以上两类Container可能在任意节点上,它们的位置通常而言是随机的,即ApplicationMaster可能与它管理的任务运行在一个节点上。
整个MapReduce的过程大致分为 Map-->Shuffle(排序)-->Combine(组合)-->Reduce。
MapReduce的工作流程:单个作业被分成许多小份,输入数据也被切片分发到每个节点,各个节点只在本地数据上做运算,对应的运算过程称为map阶段;每个mapper的输出通过某种方式组合,称为reduce阶段。
众多机器学习算法如简单贝叶斯,KNN算法,SVM,K-Means算法都有对应的MapReduce实现。SVM对应的是Pegasos算法。
一些专有名词解释:
Pig:数据流语言和运行环境,用以探究大型数据集;
Hive:一种分布式的、按列存储的数据仓库;
MapReduce:分布式数据处理模型和执行环境,运行于大型商用机集群;
Avro:一种序列化系统;
Common:一系列组件和接口;
HBase:一种分布式的、按列存储的数据库。
Hadoop Pipes是Hadoop MapReduce的C++接口名称,C++接口中的键值按字节缓冲。
HDFS集群有两类节点以管理者-工作者模式运行,一个namenode(管理者)和多个datanode(工作者)。
序列化是指将结构化对象转化为字节流以便在网络上传输或写到磁盘进行永久存储的过程,反序列化相反。
MapReduce编程:首先写map函数和reduce函数,然后用单元测试来保证函数的运行符合预期结果,然后,写一个驱动程序(jobdriver)来运行作业,一旦程序按预期通过小型数据集的测试,就可以考虑放到集群上来运行,Hadoop提供了hook(钩子)来辅助分析分布式程序。
通过Job对象上的submit()来调用MapReduce作业,jobtracker用于协调作业的运行,tasktracker用于运行作业划分后的任务。
YARN:下一代MapReduce,将Jobtracker的职能划分为多个独立的实体,改善传统扩展瓶颈问题。
排序和归并是MapReduce的核心技术。