Hadoop到底是什么(对一些现有文档进行整合)

大数据是个铺天盖地的词,而谈论大数据又不可避免地要提到Hadoop,Hadoop到底是什么玩意,以及有何功用。
Hadoop是Apache软件基金会管理的开源软件平台,但Hadoop到底是什么呢?简单来说,Hadoop是在分布式服务器集群上存储海量数据并运行分布式分析应用的一种方法。Hadoop被设计成一种非常“鲁棒”的系统,即使某台服务器甚至集群宕机了,运行其上的大数据分析应用也不会中断。此外Hadoop的效率也很高,因为它并不需要你在网络间来回捣腾数据。

以下是Apache的正式定义:

Apache Hadoop软件库是一个框架,允许在集群服务器上使用简单的编程模型对大数据集进行分布式处理。Hadoop被设计成能够从单台服务器扩展到数以千计的服务器,每台服务器都有本地的计算和存储资源。Hadoop的高可用性并不依赖硬件,其代码库自身就能在应用层侦测并处理硬件故障,因此能基于服务器集群提供高可用性的服务。

如果更深入地分析,我们发现Hadoop还有更加精彩的特性。首先,Hadoop几乎完全是模块化的,这意味着你们能用其他软件工具抽换掉Hadoop的模块。这使得Hadoop的架构异常灵活,同时又不牺牲其可靠性和高效率。

Hadoop的产生

随着我们网络的发达,科技的发达,我们网络上产生的数据越来越多,越来越大,那么大到什么地步,有10000G那么大吗?告诉你比那个大多了!那有1000T那么大吗?比那个也大多了,已经是单一的服务器解决不了的,那么我们不是可以多用几台服务器就解决了?一台一台服务器分别写入和读取数据是很麻烦的。

接着分布式文件系统就应运而生了,它可以管辖很多服务器用来存储数据,通过这个文件系统存储数据时,我们就感觉在操作一台服务器一样。分布式文件系统管理的是一个服务器集群。在这个集群中,数据存储在集群的节点(即集群中的服务器)中,但是该文件系统把服务器的差异给屏蔽了,我们的数据分布在不同的服务器中,分布在不同节点上的数据可能是属于同一个文件,为了组织众多的文件,把文件放到不同的文件夹中,文件夹可以一级一级的包含。这种组织形式称为命名空间(namespace)。命名空间管理着集群中的所有文件。命名空间的职责和正真存储真实数据的职责是不一样的。负责命名空间职责的节点称为主节点(master node),负责存储真实数据的职责的单称为从节点(slave node)。主节点负责管理文件系统的文件结构,从节点负责存储真实的数据,我们把这样的结构称为主从式结构(master-slave)。用户操作时也应该先和主节点打交道,查询数据在哪些从节点上存储,然后才从从节点存储,然后再从从节点读取。在主节点中,为了加快用户的访问速度,会把整个命名空间信息都放在内存中,当存储的文件越多时,那么主节点就需要越多的内存空间。在从节点存储数据时,有的原始数据可能很大,有的可能很小,如果大小不一样的文件不容易管理,那么抽象出一个独立的存储文件单位,称为:块(block)。然后数据存放在集群中,可能网络原因或者服务器硬件原因造成访问失败,所以又才用了副本机制(replication),把数据同时备份到多台服务器中,这样数据就更安全了。

Hadoop如何进行数据处理

对数据进行处理时,我们会把数据读取到内存中进行处理。如果我们对海量数据读取到内存中进行处理,比如数据大小是100T,我们要统计文件中一共有多少个单词。要想到文件加载到内存中几乎是不可能的,要想把数据加载到内存中几乎也是不可能的。随着技术发展,即使服务器有100T内存,这样的服务器也很昂贵,即使数据能够加载到内容,那么加载100T也是需要很长时间的。那么这就是我们遇到的问题,那么我们怎么处理呢?是否可以把程序代码放到存放数据的服务器上呢?(移动计算)因为程序代码相对于原始数据来说很小,几乎是可以忽略不计的,所以省下了原始数据的传输的时间。现在数据是存放在分布式的文件系统中,100T的数据可能存放在很多服务器上,那么就可以把代码分发到这些服务器上,在这些服务器上同时进行,也就是并行计算,这样就大大缩短了程序执行的时间。分布式计算需要的是最终的结果,程序代码在很多服务器上执行后会产生很多的结果,因此需要一段代码对这些中间结果进行汇总。Hadoop中的分布式计算一般分为两个阶段完成的,第一阶段负责读取各数据节点中的原始数据,进行初步处理,对各个节点的数据求单词书。然后把处理结果传输到第二阶段,对中间结果进行汇总,产生最终的结果。

在分布式计算中,程序代码应该允许放在哪些数据节点上,哪些节点运行第一阶段的代码,哪些节点运行第二阶段的代码;第一阶段代码执行完毕后,传输到第二阶段代码所在节点;如果中间执行失败了,怎么办?等等问题,都需要管理。运行这些管理职责代码的节点称为主节点(master node),运行第一二阶段程序代码的节点称为从节点(slave node)。用户的代码应该提交给主节点,由主节点负责把代码分配到不同的节点执行。

Hadoop分布式文件系统(HDFS)

如果提起Hadoop你的大脑一片空白,那么请牢记住这一点:Hadoop有两个主要部分:一个数据处理框架和一个分布式数据存储文件系统(HDFS)。

HDFS就像Hadoop系统的篮子,你把数据整整齐齐码放在里面等待数据分析大厨出手变成性感的大餐端到CEO的桌面上。当然,你可以在Hadoop进行数据分析,也可以见gHadoop中的数据“抽取转换加载”到其他的工具中进行分析。

在hadoop中,分布式存储系统统称为HDFS(hadoop distributed file system)。其中,主节点为名字节点(namenode),namenode就是master,namenode一是管理文件系统文件的元数据信息(包括文件名称、大小、位置、属性、创建时间、修改时间等等),二是维护文件到块的对应关系和块到节点的对应关系,三是维护用户对文件的操作信息(文件的增删改查);从节点称为数据节点(datanode),datanode就是slave,datanode主要是存储数据的。master只有一个,slave可以有多个,这就是master/slave模式

数据处理框架和MapReduce

顾名思义,数据处理框架是处理数据的工具。具体来说Hadoop的数据处理框架是基于Java的系统——MapReduce,你听到MapReduce的次数会比HDFS还要多,这是因为:

1.MapReduce是真正完成数据处理任务的工具

2.MapReduce往往会把它的用户逼疯

在常规意义上的关系型数据库中,数据通过SQL(结构化查询语言)被找到并分析,非关系型数据库也使用查询语句,只是不局限于SQL而已,于是有了一个新名词NoSQL。

有一点容易搞混的是,Hadoop并不是一个真正意义上的数据库:它能存储和抽取数据,但并没有查询语言介入。Hadoop更多是一个数据仓库系统,所以需要MapReduce这样的系统来进行真正的数据处理。

MapRduce运行一系列任务,其中每项任务都是单独的Java应用,能够访问数据并抽取有用信息。使用MapReduce而不是查询语言让Hadoop数据分析的功能更加强大和灵活,但同时也导致技术复杂性大幅增加。

目前有很多工具能够让Hadoop更容易使用,例如Hive,可以将查询语句转换成MapReduce任务。但是MapReduce的复杂性和局限性(单任务批处理)使得Hadoop在更多情况下都被作为数据仓库使用而非数据分析工具。

Hadoop的另外一个独特之处是:所有的功能都是分布式的,而不是传统数据库的集中式系统。

在hadoop中,分布式计算部分称为Mapreduce。其中,主节点称为作业节点(jobtracker),jobtracker就是master,jobtracker和namenode必须在同一台服务器上;从节点称为从节点(tasktracker),tasktracker就是slave,tasktracker必须运行在datanode上。master只有一个,slave可以有多个,这就是master/slave模式。在任务节点中,运行第一段的代码称为map任务,运行第二段代码称为reduce任务。

穷人的ETL

实际上大多数采用Hadoop的公司都没有将Hadoop用于大数据分析,而是把Hadoop作为一种廉价的海量存储和ETL(抽取、转换、加载)系统。

在这里插入图片描述

虽然被打上了“大数据分析工具”的标签,但在大多数企业眼里,Hadoop是“穷人的ETL”。目前确实有个别企业将Hadoop用于运行激动人心的分析工作,但这只是个案。Cloudera曾提出Hadoop的三大应用模式:Transform、Active Archive和Exploration,但是业内人士分析,目前至少有75%的部署Hadoop的企业还都只是停留在前两个模式中:将Hadoop作为廉价的ETL方案,或者用作垃圾数据填埋场(存储大量价值很低的数据)

企业采用Hadoop需要经历三个发展阶段,从一开始用来存储海量数据,到对数据进行处理和转换,到最终开始分析这些数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值