第三阶段:数据存储与计算(离线场景):3.2 数据存储hdfs

云计算

云计算的看法,是忽悠?还是能带来真实价值的东西?

云计算是对现有资源集中优化后,对客户提供服务,从现在的情况来看云计算真实的为大家提供了服务,比如:网盘等。至于云计算更为准确的定义为美国国家标准与技术研究院(NIST)定义:云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作或与服务供应商进行很少的交互。

 

云计算特点如下:

(1) 超大规模:“云”具有相当的规模,赋予用户前所未有的计算能力;

(2) 虚拟化:云计算支持用户在任意位置、使用各种终端获取应用服务;

(3) 高可靠性:“云”使用了数据多副本容错、计算节点同构可互换等措施来保障服务的高可靠性;

(4) 通用性:云计算不针对特定的应用,同一个“云”可以同时支撑不同的应用运行;

(5) 高可扩展性:“云”的规模可以动态伸缩,满足应用和用户规模增长的需要;

(6) 按需服务:“云”是一个庞大的资源池,可以需购买;

(7) 极其廉价:由于“云”的特殊容错措施可以采用极其廉价的节点来构成云,“云”的自动化集中式管理使大量企业无需负担日益高昂的数据中心管理成本;

(8) 潜在的危险性

 

云计算可以认为包括以下几个层次的服务:基础设施即服务(IaaS),平台即服务(PaaS)和软件即服务(SaaS)。

1.IaaS(Infrastructure-as-a-Service):基础设施即服务。消费者通过Internet可以从完善的计算机基础设施获得服务。例如:硬件服务器租用。

2.PaaS:PaaS(Platform-as-a- Service):平台即服务。PaaS实际上是指将软件研发的平台作为一种服务,以SaaS的模式提交给用户。因此,PaaS也是SaaS模式的一种应用。但是,PaaS的出现可以加快SaaS的发展,尤其是加快SaaS应用的开发速度。例如:软件的个性化定制开发。

3.SaaS:SaaS(Software-as-a- Service):软件即服务。它是一种通过Internet提供软件的模式,用户无需购买软件,而是向提供商租用基于Web的软件,来管理企业经营活动。例如:阳光云服务器。

Hadoop介绍

数据的介绍

数据来源

纽约证券交易所每天产生1 TB的交易数据。

著名社交网站Facebook的主机存储着约100亿张照片,占据PB级存储空间。

Ancestry.com,一个家谱网站,存储着2.5 PB数据。

互联网档案馆(The Internet Archive)存储着约2 PB数据,并以每月至少20 TB的速度增长。

瑞士日内瓦附近的大型强子对撞机每年产生约15 PB的数据。

 

数据的存储和分析

问题很简单:多年来硬盘存储容量快速增加的同时,访问速度-- 数据从硬盘读取的速度-- 却未能与时俱进。1990年,一个普通的硬盘驱动器可存储1370 MB的数据并拥有4.4 MB/s的传输速度 ,所以,只需五分钟的时间就可以读取整个磁盘的数据。20年过去了,1 TB级别的磁盘驱动器是很正常的,但是数据传输的速度却在100 MB/s左右。所以它需要花两个半小时以上的时间读取整个驱动器的数据。

 

什么是“大数据”?

Ÿ 2012年淘宝数据总量是20PB,每天大概会扫描900TB数据,每月会增加1.5P,日增0.06P数据,一天高峰阶段每秒要处理30G的数据。

Ÿ 2015年腾讯数据总量有100PB存储容量,有8800台单集群服务器,每天扫描8.5PB数据量,10000亿日接入消息数,10000个并发分拣业务接口。

 

 

 

认识Hadoop

Hadoop 就是为了解决面向互联网及其他来源的大数据的分析和并行处理计算模型。她的诞生引起了学术界、金融界以及商业界的广泛关注。其创建之初的宗旨就是让使用者和用户能够通过使用大量普通的服务器搭建相应的服务器集群来实现大数据的并行处理能力,其优先考虑的是数据扩展性和系统的可用性。

 

Hadoop 是一个粗暴的数据处理工具。可能在学习 Hadoop 以前,习惯了用精巧的算法,优雅的程序对数据进行处理。但是到 Hadoop 这里,就是通过蛮力对数据进行处理。一台计算机处理速度慢,那么就找十台计算机进行处理。十台计算机处理慢,找一百台进行处理。一百台计算机还是处理慢,那么就找一千台进行处理。这也是 Hadoop 处理数据的精髓。

 

Hadoop 由开源的 Java 程序所编写,由 Apache 基金会开发的完全免费使用的开源程序( Open Source)。 Hadoop 开创性地使用了一种从最低层结构上就与现有技术完全不同但是更加具有先进性的数据存储和处理技术。使用 Hadoop 无需掌握系统的低层细节,同时更不需要使用者购买和支付价格不菲的软硬件平台,无限制的在价格低廉的商用 PC 上搭建所需要规模的评选数据分析平台。

 

通过使用自带的数据格式和自定义的特定数据格式, Hadoop 基本上可以按照程序设计人员的要求处理任何数据,不论这个数据类型是什么样的。数据可以是音乐、电影、文本文件、 Log 记录等,都可以做出输入存储在 Hadoop 中。通过编写相应的 MapReduce 处理程序,她会帮助你获得任何你想要的答案。

 

Hadoop历史

Hadoop是Doug Cutting-- Apache Lucene创始人-- 开发的使用广泛的文本搜索库。

Hadoop这个名字不是一个缩写,它是一个虚构的名字。该项目的创建者,Doug Cutting如此解释Hadoop的得名:"这个名字是我孩子给一头吃饱了的棕黄色大象命名的。我的命名标准就是简短,容易发音和拼写,没有太多的意义,并且不会被用于别处。小孩子是这方面的高手。Googol就是由小孩命名的。"

雏形开始于2002年的Apache的Nutch,Nutch是一个开源Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。

随后在2003年Google发表了一篇技术学术论文谷歌文件系统(GFS)。GFS也就是google File System,google公司为了存储海量搜索数据而设计的专用文件系统。

2004年Nutch创始人Doug Cutting基于Google的GFS论文实现了分布式文件存储系统名为NDFS。

2004年Google又发表了一篇技术学术论文MapReduce。MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行分析运算。

2005年Doug Cutting又基于MapReduce,在Nutch搜索引擎实现了该功能。

2006年,Yahoo雇用了Doug Cutting,Doug Cutting将NDFS和MapReduce升级命名为Hadoop,Yahoo开建了一个独立的团队给Goug Cutting专门研究发展Hadoop。

     

Hadoop能干什么

数据清洗功能

在大数据应用技术中,前端的数据清洗功能远比我们想象的更重要。没有好的清洗自然也不可能有后续的数据建模和数据挖掘。数据清洗功能不仅受技术发展的限制,也和数据类型以及数据量息息相关。

 

 
   

在大数据分析平台必须拥有兼容性强、查询速率快的数据清洗模块。面对海量的待处理数据和非结构化数据的增加,数据清洗功能的工作量和工作强度也必然会增加。正是认识到数据清洗功能的重要性,国云数据的研发工程师才会不遗余力地加强大数据前端数据清理和数据兼容性的建设。

数据分析功能

数据分析能力是大数据平台的建设重心,也是大数据分析工具的存在意义。大数据分析平台的数据分析功能受到多个方面的影响,除了软件设计技术和内建架构,搭载的数据分析模型也相当重要,直接决定了大数据分析平台所能承担的数据分析任务。

 

例如在大数据魔镜中,除了有聚类分析模型、数据预测模型、关联分析模型三大主流数据分析模型外,还有相关性分析、决策树等数据分析模型,甚至可以根据需求自己设定分析路径的代码模式,从而能满足不同用户的多种目的数据分析要求。

 

数据可视化功能

数据可视化是当下最热门的大数据应用技术,数据可视化就是将数据或者数据分析结果以图表的形式展示在各种平台上。这要求大数据分析平台有着强大的数据图表渲染功能,并且要内置丰富的可视化效果,以满足用户的不同展示需求。


除了末端展示的需要,数据可视化也是数据分析时不可或缺的一部分,即返回数据时的二次分析。而数据可视化也利于大数据分析平台的学习功能建设,让没有技术背景和初学者也能很快掌握大数据分析平台的操作。

 

Apache Hadoop项目介绍

今天,Hadoop是一个分布式计算基础架构这把"大伞"下的相关子项目的集合。这些项目属于Apache软件基金会(http://hadoop.apache.org),后者为开源软件项目社区提供支持。虽然Hadoop最出名的是MapReduce及其分布式文件系统(HDFS,从NDFS改名而来),但还有其他子项目提供配套服务,其他子项目提供补充性服务。

Core

一系列分布式文件系统和通用I/O的组件和接口(序列化、Java RPC和持久化数据结构)。

Avro

一种提供高效、跨语言RPC的数据序列系统,持久化数据存储。(在本书写作期间,Avro只是被当作一个新的子项目创建,而且尚未有其他Hadoop子项目在使用它。)

MapReduce

分布式数据处理模式和执行环境,运行于大型商用机集群。

HDFS

分布式文件系统,运行于大型商用机集群。

Pig

一种数据流语言和运行环境,用以检索非常大的数据集。Pig运行在MapReduce和HDFS的集群上。

Hbase

一个分布式的、列存储数据库。HBase使用HDFS作为底层存储,同时支持MapReduce的批量式计算和点查询(随机读取)。

ZooKeeper

一个分布式的、高可用性的协调服务。ZooKeeper提供分布式锁之类的基本服务用于构建分布式应用。

Hive

分布式数据仓库。Hive管理HDFS中存储的数据,并提供基于SQL的查询语言(由运行时引擎翻译成MapReduce作业)用以查询数据。

Chukwa

分布式数据收集和分析系统。Chukwa运行HDFS中存储数据的收集器,它使用MapReduce来生成报告。(在写作本书期间,Chukwa刚刚从Core中的"contrib"模块分离出来独立成为一个独立的子项目。)

 

Hadoop的优缺点

优点:

(一)高可靠性:Hadoop按位存储和处理数据的能力值得人们信赖;

(二)高扩展性:Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。

(三)高效性:Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。

(四)高容错性:Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。

缺点:

(一)不适合低延迟数据访问。

(二)无法高效存储大量小文件。

(三)不支持多用户写入及任意修改文件。

 

Hadoop核心

Hadoop的核心就是HDFS和MapReduce,而两者只是理论基础,不是具体可使用的高级应用,Hadoop旗下有很多经典子项目,比如HBase、Hive等,这些都是基于HDFS和MapReduce发展出来的。

 

HDFS

HDFS(Hadoop Distributed File System,Hadoop分布式文件系统),它是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,适合那些有着超大数据集(large data set)的应用程序。

MapReduce

通俗说MapReduce是一套从海量源数据提取分析元素最后返回结果集的编程模型,将文件分布式存储到硬盘是第一步,而从海量数据中提取分析我们需要的内容就是MapReduce做的事了。

 

HDFS的设计特点

1、大数据文件,非常适合上T级别的大文件或者一堆大数据文件的存储,如果文件只有几个G甚至更小就没啥意思了。

2、文件分块存储,HDFS会将一个完整的大文件平均分块存储到不同计算器上,它的意义在于读取文件时可以同时从多个主机取不同区块的文件,多主机读取比单主机读取效率要高得多得都。

3、流式数据访问,一次写入多次读写,这种模式跟传统文件不同,它不支持动态改变文件内容,而是要求让文件一次写入就不做变化,要变化也只能在文件末添加内容。

4、廉价硬件,HDFS可以应用在普通PC机上,这种机制能够让给一些公司用几十台廉价的计算机就可以撑起一个大数据集群。

5、硬件故障,HDFS认为所有计算机都可能会出问题,为了防止某个主机失效读取不到该主机的块文件,它将同一个文件块副本分配到其它某几个主机上,如果其中一台主机失效,可以迅速找另一块副本取文件。

 

HDFS的关键元素

Block:将一个文件进行分块,通常是64M。

NameNode:保存整个文件系统的目录信息、文件信息及分块信息,这是由唯一一台主机专门保存,当然这台主机如果出错,NameNode就失效了。在Hadoop2.*开始支持activity-standy模式----如果主NameNode失效,启动备用主机运行NameNode。

DataNode:分布在廉价的计算机上,用于存储Block块文件。

 

MapReduce介绍

通俗说MapReduce是一套从海量源数据提取分析元素最后返回结果集的编程模型,将文件分布式存储到硬盘是第一步,而从海量数据中提取分析我们需要的内容就是MapReduce做的事了。

MapReduce的基本原理就是:将大的数据分析分成小块逐个分析,最后再将提取出来的数据汇总分析,最终获得我们想要的内容。当然怎么分块分析,怎么做Reduce操作非常复杂,Hadoop已经提供了数据分析的实现,我们只需要编写简单的需求命令即可达成我们想要的数据。

MapReduce是一种用于数据处理的编程模型。该模型非常简单。同一个程序Hadoop可以运行用各种语言编写的MapReduce程序。在本章中,我们将看到用Java,Ruby,Python和C++这些不同语言编写的不同版本。最重要的是,MapReduce程序本质上是并行的,因此可以将大规模的数据分析交给任何一个拥有足够多机器的运营商。MapReduce的优势在于处理大型数据集,所以下面首先来看一个例子。

 

MapReduce案例

一个气象数据集

在我们这个例子里,要编写一个挖掘气象数据的程序。分布在全球各地的气象传感器每隔一小时便收集当地的气象数据,从而积累了大量的日志数据。它们是适合用MapReduce进行分析的最佳候选,因为它们是半结构化且面向记录的数据。

例如:

0184010010999992015010100004+70933-008667FM-12+000999999V0200401N01701000301CN000100199-00631-00741098801ADDAA106002031AY171021AY231021GF109991999999999999999999MA1999999098681MD1110121+9999MW1731OD139902601999REMSYN07001001 11/01 90417 11063 21074 39868 49880 51012 60021 77373 333 91126=

 

例2-1:国家气候数据中心数据记录的格式

1. 0057  

2. 332130      # USAF weather station identifier  

3. 99999       # WBAN weather station identifier  

4. 19500101    # observation date  

5. 0300        # observation time  

6. 4  

7. +51317      # latitude (degrees × 1000)  

8. +028783     # longitude (degrees × 1000)  

9. FM-12  

10. +0171       # elevation (meters)  

11. 99999  

12. V020  

13. 320         # wind direction (degrees)  

14. 1           # quality code  

15. N  

16. 0072  

17. 1  

18. 00450       # sky ceiling height (meters)  

19. 1           # quality code  

20. C  

21. N  

22. 010000      # visibility distance (meters)  

23. 1           # quality code  

24. N  

25. 9  

26. -0128       # air temperature (degrees Celsius × 10)  

27. 1           # quality code  

28. -0139       # dew point temperature (degrees Celsius × 10)  

29. 1           # quality code  

30. 10268       # atmospheric pressure (hectopascals × 10)  

31. 1           # quality code

数据文件按照日期和气象站进行组织。从1901年到2001 年,每一年都有一个目录,每一个目录都包含一个打包文件,文件中的每一个气象站都带有当年的数据。例如,1990年的前面的数据项如下:

1. % ls raw/1990 | head  

2. 010010-99999-1990.gz  

3. 010014-99999-1990.gz  

4. 010015-99999-1990.gz  

5. 010016-99999-1990.gz  

6. 010017-99999-1990.gz  

7. 010030-99999-1990.gz  

8. 010040-99999-1990.gz  

9. 010080-99999-1990.gz  

10. 010100-99999-1990.gz  

11. 010150-99999-1990.gz

因为实际生活中有成千上万个气象台,所以整个数据集由大量较小的文件组成。通常情况下,我们更容易、更有效地处理数量少的大型文件,因此,数据会被预先处理而使每年记录的读数连接到一个单独的文件中。

由于源文件中的气温值按比例增加到10倍,所以结果1901年的最高气温是31.7°C(在本世纪初几乎没有多少气温读数会被记录下来,所以这是可能的)。为完成对跨越一世纪这么长时间的查找,程序在EC2 High-CPU Extra Large Instance机器上一共运行了42分钟。

为加快处理,我们需要并行运行部分程序。从理论上讲,这很简单:我们可以通过使用计算机上所有可用的硬件线程来处理在不同线程中的各个年份的数据。但是这之中存在一些问题。

首先,划分成大小相同的作业块通常并不容易或明显。在这种情况下,不同年份的文件,大小差异很大,所以一些线程会比其他线程更早完成。即使它们继续下一步的工作,但是整个运行中占主导地位的还是那些运行时间很长的文件。另一种方法是将输入数据分成固定大小的块,然后把每块分配到各个进程。

其次,独立线程运行结果在合并后,可能还需要进一步的处理。在这种情况下,每年的结果是独立于其他年份,并可能通过连接所有结果和按年份排序这两种方式来合并它们。如果使用固定大小的块这种方法,则此类合并会更紧凑。对于这个例子,某年的数据通常被分割成几个块,每个进行独立处理。我们将最终获得每个数据块的最高气温,所以最后一步是寻找这些每年气温值中的最大值。

最后,我们仍然受限于一台计算机的处理能力。如果手中所有的处理器都使用上都至少需要20分钟,那就只能这样了。我们不能使它更快。另外,一些数据集的增长会超出一台计算机的处理能力。当我们开始使用多台计算机时,整个大环境中的许多其他因素将发挥作用,可能由于协调性和可靠性的问题而出现当机等错误。谁运行整个作业?我们如何处理失败的进程?

因此,尽管并行处理可行,但实际上它非常复杂。使用Hadoop之类的框架非常有助于处理这些问题。

关系型数据库和MapReduce的比较

 

传统关系型数据库

MapReduce

数据大小

GB

PB

访问

交互型和批处理

批处理

更新

多次读写

一次写入多次读取

结构

静态模式

动态模式

集成度

伸缩性

非线性

线性

MapReduce和关系型数据库之间的另一个区别是它们操作的数据集中的结构化数据的数量。结构化数据是拥有准确定义的实体化数据,具有诸如XML文档或数据库表定义的格式,符合特定的预定义模式。这就是RDBMS包括的内容。另一方面,半结构化数据比较宽松,虽然可能有模式,但经常被忽略,所以它只能用作数据结构指南。例如,一张电子表格,其中的结构便是单元格组成的网格,尽管其本身可能保存任何形式的数据。非结构化数据没有什么特别的内部结构,例如纯文本或图像数据。MapReduce对于非结构化或半结构化数据非常有效,因为它被设计为在处理时间内解释数据。换句话说:MapReduce输入的键和值并不是数据固有的属性,它们是由分析数据的人来选

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值