Hadoop 简介
1.介绍
Hadoop
是阿帕奇基金会(Apache
)开源的一款分布式系统基础架构。由以下几部分组成:HDFS
、MapReduce
和 YARN
。它使用户可以快速简便的开发分布式程序去处理数据,而不需掌握过多的分布式知识以及底层实现逻辑。更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』
2.发展史
1) 02年由 Doug Cutting
开发了一款网络搜索引擎 Nutch
,这便是 Hadoop
的前身。
2) 03年到04年诞生了 GFS
和 Map Reduce
。
3) 08年 Hadoop
创造了最快排序 1TB
数据的新世界纪录。Hive
成为了它的子项目。
4) 11年 Hadoop
1.0.0版本出现。
5) 13年到15年 Hadoop
2.x版本诞生并不断更新迭代。
6) 16年 Hadoop
进入3.x时代。
3.核心
分布式文件系统 HDFS
;分布式计算系统 MapReduce
;分布式资源管理系统 YARN
。更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』
3.1 HDFS
核心(角色):NameNode
、DataNode
作用:分布式文件存储
特点:高可靠性、高扩展性、高吞吐率。
副本可以保证高可靠性
原理:NameNode
负责管理存储所有的元数据信息(文件系统的目录信息、文件信息以及分块等信息)。DataNode
负责管理存储块文件。DataNode
会定时向 NameNode
报告自己的状态(比如磁盘空间、资源消耗、是死是活),可将此过程称为心跳。当客户端发起一次读或写的请求,请求先到达 NameNode
,它判断一下读写权限,再查找一个可用并适合的 DataNode
,然后向客户端返回该 DataNode
的相关信息。客户端拿到节点信息后与其交互,进行读或写操作。完成后客户端拿到对应结果(读取的数据或者写结果状态信息),最后向 NameNode
反馈结果。更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』
注意:HDFS
会将数据文件以指定的块大小拆分成数据块,并将数据块以副本的方式保存到不同的节点上。其中数据写入时采用的方式是先完成第一个副本,然后再将其复制到其他节点,保证一个节点出现异常,数据不会丢失。过程虽然复杂,但是用户无感知,所有的切分、容错、负载均衡等都悄悄的完成,使得用户只知道上传了一个文件或者读取了一个文件。
3.2 MapReduce
核心:Map
(映射)、Reduce
(归纳)
作用:大数据量计算
特点:简化并行应用开发,不需要关注并行计算底层实现,而是直接调用所提供的 API
即可。
原理:将输入的数据集切分为若干独立的数据块,由 map
任务以并行的方式处理。然后将 map
的输出先进性排序,然后再把结果输入 reduce
任务,由 reduce
任务来完成最终的统一处理。
注意:部署 Hadoop
集群时,通常计算节点和存储节点部署在同一节点,使作业优先调度到那些已经存储有数据的节点进行计算,这样可以大大节省数据传输消耗的带宽。更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』
3.3 YARN
来源:是为了解除 Hadoop1.x
中只能运行 MapReduce
框架的限制,将 MapReduce
框架中 Job Tracker
的资源管理和作业调度监控功能进行分离。
作用:为运行在 YARN
上的分布式应用程序提供统一的资源管理和调度
特点:为 Hadoop
集群在利用率、资源统一管理和数据共享等方面带来了极大便利;可以运行不同类型的作业:MapReduce
、Spark
等计算框架。
4.选择原因
首先当然是它开源,免费的原因(你懂得 ~)。其次就是社区活跃,参与的人超多,这样一来,在使用过程中有任何问题,随时可以找到解决办法,而不需死扣晦涩的文档。还有它适用于大数据分布式存储和计算的各个场景,满足很多人的需求。最后就是它的成熟性,发展的十余年间,被各大企业所验证。更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』
5.版本
1) 社区版(官方,免费,但可能需要自己再研发额外功能)
2) Cloudera CDH
(目前公司使用最多,安装、配置、升级等简便,文档完善,与 Spark
结合好,但是不开源,而且和社区版在某些功能上有些出入)
3) Hortonworks HDP
(原装 Hadoop
,开源,版本与社区版一致,支持 Tez
,集成了开源监控方案 Ganglia
和 Nagios
,但是安装升级等比较繁琐,需要费点功夫)