hadoop的简介和发展历史
hadoop 简介
首先,他是Apache
软件基金会旗下的一个开源分布式计算平台,提供了底层透明的分布式基础架构(不用关心他底层是怎么实现的,编代码操作就完事了)
其次,他的开发是基于java
语言的,有很好的跨平台特性,并且可以部署在廉价的计算机集群中,我们在编程使用的时候,是不限制语言去操作的
他的核心分为两部分,分布式存储和分布式计算。其中HDFS
为海量的数据提供了如何去存储,MapReduce
为海量的数据提供了计算
最后,他是一个开源的软件
hadoop 发展
他为啥起名叫hadoop
,大佬也说了,就是他孩子为一头吃饱了的棕色大象
取得一个名字,是一个玩具名。。。
一开始,他是Apache Lucene
的创始人Doug Cutting
开发的一个文本搜索库。但是,在开发的过程中,他遇到了一个棘手的问题,该搜索引擎框架无法扩展到拥有数十亿网页的网络,就是说当数据非常大的时候,就会出现一些问题。
一年之后,2003年,谷歌公司发布了关于分布式文件系统GFS
方面的论文,可以解决大规模数据存储的问题。然后大佬就开始了,在2004年,Nucene
项目模仿GFS
开发了自己的分布式文件系统---- NDFS,就是HDFS的前身
之后,2004年,谷歌公司发布了另外一篇论文,阐述了MapReduce
分布式编程思想。然后,2005年,Nutch开源实现了谷歌的MapReduce
,之后把他们独立了起来,就有了Hadoop
战绩
2008年,打破世界纪录,成为最快排序1TB
的数据系统,采用由910
个节点构成的集群进行运算,排序时间只用了209s
。
随后,2009年,更是将时间优化到了62s
hadoop 特性
他hadoop
既然这么优秀,那么他有那些特性呢?
- 高可靠性。采用冗余数据的处理方式。就是对于每一个数据,都保存有多个副本(副本的数量自己可以设置),万一哪一个副本出现问题了,其他的副本也是可以正常提供需要的
- 高效性。以分布式存储和分布式计算,两个核心的技术来处理PB级数据
- 高可扩展性。他的设计理念就是可以高效稳定的运行在廉价的计算机集群上,所以说对于他的存储,是可以扩展很多的计算机节点上的
- 高容错。还是冗余数据的存储,自动保存多个副本,自动将失败的任务重新分配
- 成本低。他的计算机集群可以很廉价,我们自己的电脑也可以是集群中的一部分
他运行在linux
平台上,并支持多种编程语言,比如:C++
应用
他这么优秀,肯定有很多公司或者平台都在使用。
目前,雅虎
就是拥有着全球最大的hadoop
集群,大概25000
个节点,主要用于支持广告系统和网页搜索。
还有Facebook
,全球知名的社交网站,使用hadoop
平台进行日志处理,推荐系统和数据仓库等方面
当然,我们国内也有好多公司在使用,比如说:百度
,淘宝
。点开招聘首页,了解hadoop
,Hbase
,spark
等等
hadoop 改进和发展
早期,hadoop1.0
的核心组件MapReduce
和HDFS
,他是不包括像Pig
,Hive
,Hbase
等其他组件的,所以会有以下的几个问题:
- 抽象层次低。很难从更高的角度看问题,需要人工编码
- 表达能力有限。
Map
和Reduce
限制了所有可以解决的问题 - 我们自己管理
Job
作业之间的依赖关系,多个Job
之间的工作流处理困难 - 难以看到程序自己的逻辑,缺乏高层次的理解逻辑,后期维护也困难
- 每个执行阶段都需要经过
HDFS
,执行迭代操作效率低 - 实时性差,适合批处理,不支持实时交互式
他的改进,也是经过了以下的几个方面
组件 | Hadoop1.0问题 | Hadoop2.0改进 |
---|---|---|
HDFS | 单一名称节点,存在单点失效问题 | 设计了 HDFS HA ,提供名称节点的热备 |
HDFS | 单一命名空间,资源不能隔离 | 设计了 HDFS Federation ,管理多个命名空间 |
MapReduce | 资源管理效率低 | 设计了新的资源管理效率框架YARN |
- 解决单一名称节点失效问题(单点故障)。
在Hadoop
中,每一个信息的NameNode
(维持系统文件和目录)是只能有一个的,万一这个不小心挂了,那后果很严重,重新启动所需要消耗的时间非常长。
那就可以弄几个备份的NameNode
节点,当主要的节点失效后,直接启动备份(后面详细介绍)
- 解决内存受限问题。
在这个问题中,因为NameNode
节点所需要存储的数据可能种类比较多,当积攒到一定的程度,就会出现我内存装不下的问题,虽然说这样是可以纵向扩展,让我这个节点的内存大一点,但是这个带来的问题就是,重新启动非常耗时。
所有说,对于数据,其实是可以进行一个分类,然后进行一次映射,每一类数据到一个指定的NameNode
中,不同的NameNode
存储的数据是完全不同的(和只有一个NameNode
不冲突),每个NameNode
又都有自己的备份,相互独立
hadoop 生态圈
组件 | 功能 | 解决hadoop 中的问题 |
---|---|---|
Pig | 处理大规模数据的脚本语言,只需要简单的几句语句,系统会自动转换为MqpReduce 的作业 | 抽象层次低,需要我们写很多代码 |
Spark | 基于内存的分布式并行编程框架,较高的实时性,较好支持迭代计算 | 延迟高,不适合迭代计算 |
Oozie | 工作流和写作服务引擎,协调hadoop 运行不同的任务 | 没有提供作业Job 之间依赖关系管理机制,需要我们自己处理作业之间的依赖 |
Tez | 支持DAG 作业的计算框架,对作业的操作进行重新分解和组合,形成一个大的DAG 作业,减少不必要的操作 | 不同的MapReduce 任务之间存在重复操作,降低了效率 |
KafKa | 分布式发布订阅消息系统,一般作为企业大数据分析平台的数据交换枢纽,不同类型的分布式系统可以统一接入到Kafka ,实现和Hadoop 各个组件之间的不同类型数据的实时高效交换 | Hadoop 生态系统中各个组件和其他产品之间缺乏统一的,高效的数据交换中介 |
- MapReduce。一个基于
YARN
的并行处理大数据的计算框架 - HDFS。一个分布式文件系统,用来支持对应用数据的高吞吐量的访问
- YARN。一个任务调度和集群资源管理的框架
Spark
- 基于内存计算的大数据并行计算框架。提高了在大数据环境下数据处理的实时性,保证了高容错性和高可伸缩性,可以把他部署在廉价硬件之上形成集群
- 是
MapReduce
的替代方案,兼容HDFS
,HIVE
等分布式存储层
MESOS
一个分布式资源管理框架,是分布式系统的内核
HBASE
- 大表格的结构化数据存储的可扩展分布式数据库。数据以
key-value
格式进行存储 - 他有自己的查询语句,和
SQL
不完全相同 - 运行时需要
ZooKeeper
协调服务的帮助 ACID
,原子性,一致性,隔离性,持续性
Ambari
一个基于web
的工具,用来供给,管理和检测Apache Hadoop
集群,提供对HDFS
,MapReduce
,Hbase
,ZooKeeper
等的支持
ZooKeeper
一个开源的,真对分布式应用程序的高性能协调服务,是Hadoop
和Hbase
的重要组件,为分布式提供一致性服务
Sqoop
用于Hadoop/Hive
与传统的关系型数据库(MySQL,Oracle等)之间进行数据的传递,可以将一个关系型数据库中的数据导入到Hadoop
的HDFS
中,也可以将HDFS
中的数据导出到关系型数据库中
Storm
- 流处理框架,实现对数据流的处理和状态管理等操作
- 开源,免费,分布式,高容错的实时计算系统
- 令持续不断的流计算变得容易,弥补了
Hadoop
批处理所不能满足的实时要求
Kafka
也是流计算的一个框架,有一套流计算的jar
包,简单容易集成
HIVE
- 基于
Hadoop
构建的一套数据分析系统,提供了丰富的SQL
查询方式来分析HDFS
中的数据 - 将结构化数据文件映射为一张数据表,将
SQL
语句转化为MapReduce
任务来执行 - 查询耗时,不支持更新操作
安装可以参考之前的博客:https://blog.csdn.net/duchenlong/article/details/114597944?spm=1001.2014.3001.5501