Hadoop-1-介绍
1、简介
Apache Hadoop软件库是一个框架,它使用简单的编程模型,通过分布式计算机集群,来处理大型数据集。
它旨在从单个服务器扩展到数千台计算机,同时每台计算机都可以提供本地计算和存储的功能。
每台计算机都有可能出现故障,Hadoop本身不是依靠硬件来提供高可用性,而是设计用于检测和处理应用层的故障,从而保证整个计算机集群可以提供高可用的服务。
2、发展历史
Doug Cutting,Hadoop之父,也是Lucene项目的创始人。
Lucene提供了基于Java的全文检索技术。
Nutch则是基于Lucene所开发的Web爬虫程序(搜索引擎)。
同时Google先后发表了三篇论文:
2003年10月:GFS(The Google File System)
2004年12月:MapReduce(MapReduce: Simplified Data Processing on Large Clusters)
2006年11月:Bigtable(Bigtable: A Distributed Storage System for Structured Data)
从Nutch的0.8 release版本开始(25 July 2006),Nutch开始基于Hadoop架构。Doug Cutting把Nutch中的分布式文件系统以及实现MapReduce算法的代码独立出来,形成了一个新的开源项目,这就是Hadoop。
3、三大发行版本
1)Apache
这是最原始,也是最基础的版本,适合入门学习
2)Cloudera
CDH是Cloudera Hadoop的发行版,它完全开源,比Apache Hadoop在兼容性、稳定性和安全性上都有所增强
3)Hortonworks
HDP(Hortonworks Data Platform),完全开源,同时它也提供了一款开源的安装和管理系统
4、特性
1)高可靠性
Hadoop会维护多个工作数据的副本,同时在集群出现故障时,会对失败的节点进行重新分布处理
2)高扩展性
在集群间分配任务数据,可方便地扩展上千个节点
3)高效性
并行执行任务,提高任务的处理速度
5、组成
1)Hadoop Common
支持其他Hadoop模块的常用工具模块
2)Hadoop Distributed File System (HDFS™)
提供对应用程序数据的高吞吐量访问的分布式文件系统
3)Hadoop YARN
作业调度和集群资源管理的框架
4)Hadoop MapReduce
基于YARN的,并行处理大量数据的系统
5)Hadoop Ozone
Hadoop对象存储
6)Hadoop Submarine
Hadoop机器学习引擎
6、HDFS
HDFS,用于数据存储。它主要由三部分组成:
- NameNode(NN),存储文件的元数据,例如文件名、文件目录结构、文件属性(包括创建时间、文件权限和副本数)、每个文件的块列表和块列表所在的DataNode等
- DataNode(DN),在本地文件系统存储文件块数据,以及块数据的校验和
- Secondary NameNode(2NN),用于监控HDFS状态的后台辅助程序,它每隔一段时间就会获取HDFS元数据(NN)的快照
7、YARN
YARN,用于资源调度。它主要由四部分组成:
- Resource Manager,用于处理客户端请求,资源的分配和调度,启动和监控Application Master以及监控Node Manager
- Node Manager,单个节点上的资源管理,负责处理来自Resource Manager和Application Master的命令
- Application Master,负责数据的切分和任务的分配、监控与容错,以及为应用程序申请资源
- Container,对任务运行环境的抽象,封装了CPU、内存等多维资源以及环境变量、启动命令等任务运行相关的信息(容器技术)
8、MapReduce
MapReduce,用于计算。对输入数据(key/value 键值对)进行处理,并输出最终结果(key/value 键值对)
计算过程包括两部分:
- Map,将输入的数据转换为中间记录的各个任务,转换后的中间记录不需要与输入的数据类型保持一致。每个输入键值对可以映射到零个或多个输出键值对上
- Reduce,将映射的结果进行汇总,最终形成输出结果。它有3个主要阶段:shuffle,sort和reduce
一个MapReduce作业的输入输出类型:
(input) <k1, v1> ->
map -> <k2, v2> ->
combine -> <k2, v2> ->
reduce -> <k3, v3>
(output)
Google论文:
map (k1, v1) → list (k2,v2)
reduce (k2, list (v2) ) → list (v2)