大数据学习-2 认识Hadoop

一.什么是Hadoop?node

Hadoop能够简单的理解为一个数据存储和数据分析分布式系统。随着互联网的普及产生的数据是很是的庞大的,那么咱们怎么去处理这么大量的数据呢?传统的单一计算机确定是完成不了的,那么大致的出路只有两条,第一种是研究更牛逼的计算机(好比说超级计算机和量子计算机),可是超级计算机和量子计算机研究耗费的时间和金钱是不可思议的,第二条就是集群计算(数据量巨大一台计算机不行,我一百台,一万台计算机处理总能够了吧?)那么Hadoop就是后者。程序员

Hadoop并非去强化某一台计算机的计算能力而是去解决一百台、一万台计算机集群计算时的故障和异常,为这一百台、一万台计算机集群计算提供可能性服务。在简单来讲就是Hadoop就是让这么多计算机一块儿去处理一批数据,保证数据在这么多的机子上还不出错。算法

二.Hadoop的发展历史数据库

在这里咱们不得不去提一下Apache软件基金会,他是一个是专门为支持开源软件项目而办的一个非盈利性组织。在它所支持的Apache项目与子项目中,所发行的软件产品都遵循Apache许可证(Apache License)。编程

那么Hadoop就是在这个基金会下诞生的。服务器

最开始咱们仍是要讲到谷歌,谷歌为了摆脱IOE(IBM小型机、Oracle数据库以及EMC存储)就建立了他们的GFS(Google File System)也是一个文件分布式系统,并发表了三篇分别有关与GFS、MapReduce、BigTable的论文可是没有开源GFS的核心技术。而后在论文的指导下Doug Cutting(Hadoop之父)对其作了开发而且开源。最后Apache软件基金会对Doug Cutting的开发和其余公司的开发其进行了整合完善推出了Hadoop。网络

三.为何要使用Hadoop?数据结构

3.1开始咱们必定会有这样的问题就是为何MySQL、Oracle等等数据库不能知足大量的数据的查询呢?并发

首先传统的数据库底层仍是对磁盘的一个读写操做,那么读写操做就要涉及到一个寻找地址的操做,可是这个寻址操做是十分耗费时间的(虽然在数据库上有不少的优化包括索引操做等等),那么读取大量数据的时候这个时间必然会很长(再好的算法在合理的数据结构设计仍是会去遍历数据)。app

在一个就是就是更改数据库操做,对于有大量的数据数据库咱们去更新它的时候每每会增长这个数据库的压力,并且效率较为低下。

3.2那么传统的数据库在大数据(PB级别 1PB=1024TB)存在必定的缺陷那么咱们该怎么去解决呢?

如今咱们就要引入MapReduce这个概念,首先来了解一下MapReduce,在后面咱们会详细的去学习Hadoop中的MapReduce,MapReduce的简单介绍以下:

MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",和它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的状况下,将本身的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证全部映射的键值对中的每个共享相同的键组。(其实我如今也不太懂MapReduce这个编程模型,可是经过咱们后期的学习必定能够搞懂)

那么我么来对比一下他们MapReduce和传统的关系型数据库的对比

3.3MapReduce的三大设计目标

1.服务于只须要短短几分钟或者几个小时就能够完成任务

2.运行于同一个内部有高速网络链接的数据中心内

3.数据中心内部的计算机都是可靠的专门的硬件

四.部分专业名词介绍

4.1MapReduce中的专业名词

job:一个MapReduce程序就是一个job。

task:在一个job中能够有多个task,task能够是Map Task,Reduce Task,这个task就是每一个节点计算机的计算任务。

HDFS:Hadoop分布式文件系统(Hadoop distributed file system)

Namenode:它维护着文件系统树(filesystem tree)以及文件树中全部的文件和文件夹的元数据(metadata),没有namenode那么HDFS就不能运行

Secondary Namenode:主要做用是按期的将Namespace镜像与操做日志文件(edit log)合并,以防止操做日志文件(edit log)变得过大,若是namenode宕机了,secondary namenode中的文件就会用的上。大多数状况下会与NFS远程挂载。

DateNode:Datanode是文件系统的工做节点,他们根据客户端或者是namenode的调度存储和检索数据,而且按期向namenode发送他们所存储的块(block)的列表。集群中的每一个服务器都运行一个DataNode后台程序,这个后台程序负责把HDFS数据块读写到本地的文件系统。当须要经过客户端读/写某个 数据时,先由NameNode告诉客户端去哪一个DataNode进行具体的读/写操做,而后,客户端直接与这个DataNode服务器上的后台程序进行通 信,而且对相关的数据块进行读/写操做。

JobTracker:负责任务的管理和调度(一个hadoop集群中只有一台JobTracker)

TaskTracker:负责执行工做,在DataNode节点上执行(Map函数和Reduce函数运行的节点)

五.理解MapReduce

 5.1MapReduce高度抽象

 将多台计算机联合起来处理一个问题那么这个过程必定是至关复杂的,可是Hadoop将其高度的抽象了,他只须要程序员去编写map函数和reduce函数便可。

5.2MapReduce的工做流

 图片来自:https://blog.csdn.net/chaojixiaozhu/article/details/78931413

5.3map任务和reduce任务做用介绍

map任务将其输出写入本地硬盘,而非HDFS。这是为何?由于map的输出是中间结果:该中间结果由reduce任务处理后才产生最终输出结果,并且一旦做业完成,map的输出结果就能够删除。所以,若是把它存储在HDFS中并实现备份,不免有些小题大作。若是该节点上运行的map任务在将map中间结果传送给reduce任务以前失败,Hadoop将在另外一个节点上从新运行这个map任务以再次构建map中间结果。

reduce任务并不具有数据本地化的优点——单个reduce任务的输入一般来自于全部mapper的输出。在本例中,咱们仅有一个reduce任务,其输入是全部map任务的输出。所以,排过序的map输出需经过网络传输发送到运行reduce任务的节点。数据在reduce端合并,而后由用户定义的reduce函数处理。reduce的输出一般存储在HDFS中以实现可靠存储。对于每一个reduce输出的HDFS块,第一个副本存储在本地节点上,其余副本存储在其余机架节点中。所以,将reduce的输出写入HDFS确实须要占用网络带宽,但这与正常的HDFS流水线写入的消耗同样。(该部分截取自  https://blog.csdn.net/universe_ant/article/details/56494398

相关文章
相关标签/搜索