大数据学习带你了解Hadoop如何高效处理大数据

Hadoop与Google一样,都是小孩命名的,是一个虚构的名字,没有特别的含义。从计算机专业的角度看,Hadoop是一个分布式系统基础架构,由Apache基金会开发。Hadoop的主要目标是对分布式环境下的“大数据”以一种可靠、高效、可伸缩的方式处理。设想一个场景,假如您需要grep一个100TB的大数据文件,按照传统的方式,会花费很长时间,而这正是Hadoop所需要考虑的效率问题。

关于Hadoop的结构,有各种不同的说法。我们这里简单的理解为大数据学习Hadoop主要由三部分组成:HDFS(HadoopDistributedFileSystem),MapReduce与Hbase。

大数据学习加群:716581014

1、Hadoop组件之一:HDFS分布式文件系统具有哪些优点?

HDFS作为一种分布式文件系统,它和现有的分布式文件系统有很多共同点。比如,Hadoop文件系统管理的物理存储

资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。对于Client端而言,HDFS就像一个传统的分级

文件系统,可以创建、删除、移动或重命名文件等等。与此同时,HDFS与其他的分布式文件系统的区别也是显而易见的。

首先,HDFS设计目标之一是适合运行在通用硬件(commodityhardware)上的分布式文件系统。HDFS假设的硬件错误

不是异常,而是常态。因为HDFS面向的是成百上千的服务器集群,每台服务器上存储着文件系统的部分数据,并且这

些机器的价格都很低廉。这就意味着总是有一部分硬件因各种原因而无法工作。因此,错误检测和快速、自动的恢复

是HDFS最核心的架构目标。从这个角度说,HDFS具有高度的容错性。

第二,HDFS的另一个设计目标是支持大文件存储。与普通的应用不同,HDFS应用具有很大的数据集,一个典型

HDFS文件大小一般都在G字节至T字节。这就意味着HDFS应该能提供比较高的数据传输带宽与数据访问吞吐量。相应的,HDFS开放了一些POSIX的必须接口,容许流式访问文件系统的数据。

第三,HDFS还要解决的一个问题是高数据吞吐量。HDFS采用的是“一次性写,多次读”这种简单的数据一致性模型。换句话说,文件一旦建立后写入,就不需要再更改了。网络爬虫程序就很适合使用这样的模型。

第四,移动计算环境比移动数据划算。HDFS提供了API,以便把计算环境移动到数据存储的地方,而不是把数据传输到计算环境运行的地方。这对于数据大文件尤其适用,可以有效减少网络的拥塞、提高系统的吞吐量。

HDFS的体系结构与工作流程

下面简单看一下HDFS的结构。图1所示为HDFS的体系结构图。HDFS采用的是Master/Slave架构。

NameNode节点作为Master服务器,有三部分功能。第一:处理来自客户端的文件访问。第二:管理文件系统的命名空间操作,如'打开'、'关闭'、'重命名'等。第三:负责数据块到数据节点之间的映射。从这个意义上说,它扮演中心服务器的角色。

DataNode节点作为Slave服务器,同样有三部分功能。第一:管理挂载在节点上的存储设备。第二:响应客户端的读写请求。第三:从内部看,每个文件被分成一个或多个数据块,被存放到一组DataNode,在Namenode的统一调度下进行数据块的创建、删除和复制。

HDFS采用Java语言开发,因此任何支持Java的机器都可以部署Namenode或Datanode。相应地,GNU/Linux操作

系统支持Namenode与Datanode。一个典型的部署场景是,一台GNU/Linux操作系统上运行一个Namenode实例,

作为Master中心服务器。而集群中的其它GNU/Linux操作系统分别运行一个Datanode实例,作为Slave服务器集群。

2、Hadoop组件之二:什么是MapReduce编程模型,MapReduce的工作流程是什么?

MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。MapReduce的设计目标是方便编程人员在不

熟悉分布式并行编程的情况下,将自己的程序运行在分布式系统上。

MapReduce的命名规则由两个术语组成,分别是Map(映射)与Reduce(化简)。这些术语来自于列表处理语言,如:

LISP,Scheme,或ML。从概念上来讲,MapReduce将输入元素列表(InputList)转换成输出元素列表(OutputList),

按照Map与Reduce规则各一次。

从MapReduce框架的实现角度看,MapReduce程序有着两个组件:一个实现了Mapper,另一个实现了Reducer。

第一次叫Mapping,如图2所示。MapReduce将InputList作为Mapping函数的输入参数,经过处理,把结果返回给

OutputList。举例来说,有一个函数toUpper(str),用来返回输入字符串的大写版本。那么这里的InputList指的是转

换前的常规字符串列表,MappingFunction指的是toUpper函数,而OutputList指的是转换后的大写字符串列表。值

得注意的是,在这里Mapping并没有改变输入字符串列表,而是返回一个新的字符串列表。

第二次叫Reducing,如图3所示。MapReduce将InputList作为Reducing函数的输入参数,经过迭代处理,把这些数

据汇集,返回一个输出值给OutputValue。从这个意义上来说,Reducing一般用来生成”总结“数据,把大规模的数

据转变成更小的总结数据。例如,+可以用来作一个reducing函数,去返回输入数据列表的值的总和。

从工作流程来讲,MapReduce对应的作业Job首先把输入的数据集切分为若干独立的数据块,并由Map组件以Task的

方式并行处理。处理结果经过排序后,依次输入给Reduce组件,并且以Task的形式并行处理。MapReduce对应的输

入输出数据由HDFS的DataNode存储。MapReduce对应的Job部署在Master服务器,由MasterJobTracker负责Task

的调度,监控,重新执行失败的任务等等。MapReduce对应的Job部署在若干不同的Slave服务器,每个集群节点含一

个slaveTaskTracker,负责执行由master指派的任务。

Hadoop框架由Java实现的,它提供了两种主要工具。HadoopStreaming是一种运行作业的实用工具,它允许用户创

建和运行任何可执行程序(例如:Shell工具)来做为mapper和reducer。HadoopPipes是一个与SWIG兼容的

C++API(没有基于JNITM技术),它也可用于实现Map/Reduce应用程序。这样,开发人员就可以利用MapReduce框

架,开发分布式应用程序,运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上T级别的

数据集。

3.Hadoop组件之三:什么是面向列开源分布式数据库Hbase?

HBase是一个分布式的、面向列的开源数据库,由Apache基金会开发。HBase不同于一般的关系数据库,它是一个适

合于非结构化数据存储的数据库。它基于列的而不是基于行的模式。用户存储数据行在一个表里。一个数据行拥有一

个可选择的键和任意数量的列。用户可根据键访问行,以及对于一系列的行进行扫描和过滤。HBase一个可以横向扩

张的表存储系统,能够为大规模数据提供速度极快的低等级更新。主要用于需要随机访问,实时读写大数据

(BigData)。这正是信息系统所需要的功能。

下面的例子演示的是将原来存放在MySQL中Blog中的数据迁移到HBase中的过程:

图4为MySQL中现有的表结构:表Blogtable表示博客本身,包括5个字段,BlogId为每位用户对应的博客ID号,类型

为Int,作为主键字段;Author为该用户的博客名称,类型为Varchar;Title为该用户的博客签名,类型为Varchar;URL为

博客网址链接,类型为Varchar;Text为博客的内容,类型为Varchar。Comment表示博客评论,包括5个字段。ID为

发表评论的用户ID,类型为Int,作为主键字段;BlogId为博客的原文ID,类型为Varchar。其中,BlogId作为

Comment表的外键,指向表Blogtable的主键。Title为评论标题,类型为Varchar;Author为发表该评论的用户名称,

类型为Varchar;Text字段为评论内容,类型为Varchar。

迁移HBase中的表结构:HBase以表的形式存储数据。表有行和列组成。列划分为若干个列族(rowfamily)。表

Blogtable表示博客本身。ID为RowKey,即Table的主键,用来检索记录。Table在水平方向有一个或者多个

ColumnFamily组成。表BlogTable包含5个ColumnFamily,Info的数据结构分为Info:Author,Info:Title,

Info:URL。如果想添加其它属性X,则对应的结构为Info:X。需要说明的是,ColumnFamily支持动态扩展,无需预先

定义Column的数量以及类型,但是,所有Column均以二进制格式存储,用户需要自行进行类型转换。

总之,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。简单的理解,

Hbase介于nosql和RDBMS之间。Hbase仅能通过主键(rowkey)和主键的range来检索数据,不支持条件查询以及排序

等,仅支持单行事务。Habase主要用来存储非结构化和半结构化的松散数据。针对Hbase的不足,Hadoop的一个数

据仓库工具Hive对此做出了弥补。Hive可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,

并将SQL语句转换为MapReduce任务运行。针对Hbase单行事务的限制,Hive也提供了扩展。据说,Facebook之所

以选择了Hbase,是因为他们HBase适用于处理以下两种类型的数据模式:1.一小组经常变化的临时数据;2.一组不断增

加但很少访问的数据。

Hadoop为企业来带了什么?

如今,“大数据”这一术语在IT经理人中变得越来越流行。美国国家海洋与大气管理局NOAA利用“大数据”进行气

象、生态系统、天气和商务研究。《纽约时报》使用“大数据”工具进行文本分析和Web信息挖掘。迪斯尼则利用它

们关联和了解跨不同商店、主题公园和Web资产的客户行为。

“大数据”不仅适用于大型企业,而是适用于各种不同规模的企业。例如,通过评估某位客户在网站上的行为,来更

好地了解他们需要什么支持或寻找什么产品,或者弄清当前天气和其他条件对于送货路线和时间安排的影响。

面对“大数据”,Hadoop为揭示深奥的企业与外部数据的关键内幕提供了基础。从技术上看,Hadoop分布式文件系

统(HDFS)保证了大数据的可靠存储,而另一Hadoop核心组件MapReduce则提供高性能并行数据处理服务。这两项服

务提供了一个使对结构化和复杂“大数据”的快速、可靠分析变为现实的基础。

Hadoop已经迅速成长为首选的、适用于非结构化数据的大数据分析解决方案。基于Hadoop、利用商品化硬件对海量

的结构化和非结构化数据进行批处理,给数据分析领域带来了深刻的变化。通过挖掘机器产生的非结构化数据中蕴藏

的知识,企业可以做出更好的决策,促进收入增长,改善服务,降低成本。

Google与Hadoop有着千丝万缕的联系。如前所述,Hadoop主要是由HDFS、MapReduce和Hbase组成。而HDFS

是GoogleFileSystem(GFS)的开源实现,MapReduce是GoogleMapReduce的开源实现,HBase是GoogleBigTable

的开源实现。Hadoop分布式框架很有创造性,而且有极大的扩展性,使得Google在系统吞吐量上有很大的竞争力。

因此Apache基金会用Java实现了一个开源版本,支持Fedora、Ubuntu等Linux平台。

考虑到Hadoop在应对大规模非结构型数据中所起到的重要作用,微软也不得不放下架子,近日宣布开发一个兼容

WindowsServer与WindowsAzure平台的Hadoop开源版本。

IBM宣布在Hadoop上建立新的存储架构,作为群集运行DB2或Oracle数据库,目的是让应用程序,支持高性能分析,数据仓库应用程序和云计算的目的。

EMC也推出了世界上第一个定制的、高性能的Hadoop专用数据协同处理设备——GreenplumHD数据计算设备,为客户提供了最强大、最高效率的方法,充分挖掘大数据的价值。

互联网搜索巨头百度也在考虑使用Hadoop。不过,出于性能与安全的考虑,百度在采用Hadoop架构的时候,将Hadoop计算层进行了重新编写。

Hadoop作为一种分布式基础架构,可以使用户在不了解分布式底层细节的情况下,开发分布式程序。最后想要了解更

多内容的小伙伴可以加大数据学习群:716581014

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我是攻城师

Apache Pig如何与Apache Lucene集成?

2965
来自专栏包子铺里聊IT

五分钟深入 Hadoop 输入优化

当面试公司问起 Hadoop 经验时,我们当然不能只停留在 Mapper 干了什么、Reducer 干了什么。没有 Performance Tuning 怎么...

2557
来自专栏斑斓

Spark发布1.3.0版本

3月13日,Spark 1.3.0版本与我们如约而至。这是Spark 1.X发布计划中的第四次发布,距离1.2版本发布约三个月时间。据Spark官方网站报道,此...

3266
来自专栏cloudskyme

hadoop使用(三)

安装hbase 首先下载hbase的最新稳定版本 http://www.apache.org/dyn/closer.cgi/hbase/ 安装到本地目录中,我安...

3696
来自专栏华章科技

巧用MapReduce+HDFS,海量数据去重的五大策略

重复数据删除往往是指消除冗余子文件。不同于压缩,重复数据删除对于数据本身并没有改变,只是消除了相同的数据占用的存储容量。重复数据删除在减少存储、降低网络带宽方面...

833
来自专栏一名合格java开发的自我修养

Spark的误解-不仅spark是内存计算,hadoop也是内存计算

       市面上有一些初学者的误解,他们拿spark和hadoop比较时就会说,Spark是内存计算,内存计算是spark的特性。请问在计算机领域,mysq...

842
来自专栏祝威廉

为什么用Yarn来做Docker容器调度引擎

Mesos 其实我不是非常熟悉,所以有些内容可能会有失偏颇,带有个人喜好。大家也还是需要有自己的鉴别能力

893
来自专栏PPV课数据科学社区

Hadoop并非完美:8个代替 HDFS的绝佳方案

HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,坦白说HDFS是一个...

3325
来自专栏CSDN技术头条

Databircks连城:Spark SQL结构化数据分析

数据科学家们早已熟悉的R和Pandas等传统数据分析框架虽然提供了直观易用的API,却局限于单机,无法覆盖分布式大数据场景。在Spark 1.3.0以Spark...

1989
来自专栏云计算D1net

基于大数据分析系统Hadoop的13个开源工具

Hadoop是由Apache基金会开发的一个大数据分布式系统基础架构,最早版本是2003年原Yahoo! Doug Cutting根据Google发布的学...

3626

扫码关注云+社区