淘先锋技术网

首页 1 2 3 4 5 6 7

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既然这么优秀,那么他有那些特性呢?

  1. 高可靠性。采用冗余数据的处理方式。就是对于每一个数据,都保存有多个副本(副本的数量自己可以设置),万一哪一个副本出现问题了,其他的副本也是可以正常提供需要的
  2. 高效性。以分布式存储和分布式计算,两个核心的技术来处理PB级数据
  3. 高可扩展性。他的设计理念就是可以高效稳定的运行在廉价的计算机集群上,所以说对于他的存储,是可以扩展很多的计算机节点上的
  4. 高容错。还是冗余数据的存储,自动保存多个副本,自动将失败的任务重新分配
  5. 成本低。他的计算机集群可以很廉价,我们自己的电脑也可以是集群中的一部分

他运行在linux平台上,并支持多种编程语言,比如:C++

应用

他这么优秀,肯定有很多公司或者平台都在使用。

目前,雅虎就是拥有着全球最大的hadoop集群,大概25000个节点,主要用于支持广告系统和网页搜索。

还有Facebook,全球知名的社交网站,使用hadoop平台进行日志处理,推荐系统和数据仓库等方面

当然,我们国内也有好多公司在使用,比如说:百度淘宝。点开招聘首页,了解hadoopHbasespark等等

hadoop 改进和发展

早期,hadoop1.0的核心组件MapReduceHDFS,他是不包括像PigHiveHbase等其他组件的,所以会有以下的几个问题:

  1. 抽象层次低。很难从更高的角度看问题,需要人工编码
  2. 表达能力有限。MapReduce限制了所有可以解决的问题
  3. 我们自己管理Job作业之间的依赖关系,多个Job之间的工作流处理困难
  4. 难以看到程序自己的逻辑,缺乏高层次的理解逻辑,后期维护也困难
  5. 每个执行阶段都需要经过HDFS,执行迭代操作效率低
  6. 实时性差,适合批处理,不支持实时交互式

他的改进,也是经过了以下的几个方面
在这里插入图片描述

组件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

  1. 基于内存计算的大数据并行计算框架。提高了在大数据环境下数据处理的实时性,保证了高容错性和高可伸缩性,可以把他部署在廉价硬件之上形成集群
  2. MapReduce的替代方案,兼容HDFSHIVE等分布式存储层

MESOS

一个分布式资源管理框架,是分布式系统的内核

HBASE

  1. 大表格的结构化数据存储的可扩展分布式数据库。数据以key-value格式进行存储
  2. 他有自己的查询语句,和SQL不完全相同
  3. 运行时需要ZooKeeper协调服务的帮助
  4. ACID,原子性,一致性,隔离性,持续性

Ambari

一个基于web的工具,用来供给,管理和检测Apache Hadoop集群,提供对HDFSMapReduceHbaseZooKeeper等的支持

ZooKeeper

一个开源的,真对分布式应用程序的高性能协调服务,是HadoopHbase的重要组件,为分布式提供一致性服务

Sqoop

用于Hadoop/Hive与传统的关系型数据库(MySQL,Oracle等)之间进行数据的传递,可以将一个关系型数据库中的数据导入到HadoopHDFS中,也可以将HDFS中的数据导出到关系型数据库中

Storm

  1. 流处理框架,实现对数据流的处理和状态管理等操作
  2. 开源,免费,分布式,高容错的实时计算系统
  3. 令持续不断的流计算变得容易,弥补了Hadoop批处理所不能满足的实时要求

Kafka

也是流计算的一个框架,有一套流计算的jar包,简单容易集成

HIVE

  1. 基于Hadoop构建的一套数据分析系统,提供了丰富的SQL查询方式来分析HDFS中的数据
  2. 将结构化数据文件映射为一张数据表,将SQL语句转化为MapReduce任务来执行
  3. 查询耗时,不支持更新操作

安装可以参考之前的博客:https://blog.csdn.net/duchenlong/article/details/114597944?spm=1001.2014.3001.5501