版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
绪论大数据发展背景及意义近几年来,随着计算机和信息技术的迅猛发展和普及应用,行业应用系统的规模迅速扩大,行业应用所产生的数据呈爆炸性增长【1】。动辄达到数百TB甚至数十至数百PB规模的行业/企业大数据已远远超出了现有传统的计算技术和信息系统的处理能力,因此,寻求有效的大数据处理技术、方法和手段已经成为现实世界的迫切需求。百度目前的总数据量已超过1000PB,每天需要处理的网页数据达到10PB~100PB;淘宝累计的交易数据量高达100PB;Twitter每天发布超过2亿条消息,新浪微博每天发帖量达到8000万条;中国移动一个省的电话通联记录数据每月可达0.5PB~1PB;一个省会城市公安局道路车辆监控数据三年可达200亿条、总量120TB。据世界权威IT信息咨询分析公司IDC研究报告预测:全世界数据量未来10年将从2009年的0.8ZB增长到2020年的35ZB(1ZB=1000EB=1000000PB),10年将增长44倍,年均增长40%。早几年人们把大规模数据称为“海量数据”,但实际上,大数据(BigData)这个概念早在2008年就已被提出。2008年,在Google成立10周年之际,著名的《自然》杂志出版了一期专刊,专门讨论未来的大数据处理相关的一系列技术问题和挑战,其中就提出了“BigData”的概念。随着大数据概念的普及,人们常常会问,多大的数据才叫大数据?其实,关于大数据,难以有一个非常定量的定义。维基百科给出了一个定性的描述:大数据是指无法使用传统和常用的软件技术和工具在一定时间内完成获取、管理和处理的数据集。进一步,当今“大数据”一词的重点其实已经不仅在于数据规模的定义,它更代表着信息技术发展进入了一个新的时代,代表着爆炸性的数据信息给传统的计算技术和信息技术带来的技术挑战和困难,代表着大数据处理所需的新的技术和方法,也代表着大数据分析和应用所带来的新发明、新服务和新的发展机遇。研究现状由于大数据处理需求的迫切性和重要性,近年来大数据技术已经在全球学术界、工业界和各国政府得到高度关注和重视,全球掀起了一个可与20世纪90年代的信息高速公路相提并论的研究热潮。美国和欧洲一些发达国家政府都从国家科技战略层面提出了一系列的大数据技术研发计划,以推动政府机构、重大行业、学术界和工业界对大数据技术的探索研究和应用。早在2010年12月,美国总统办公室下属的科学技术顾问委员会(PCAST)和信息技术顾问委员会(PITAC)向奥巴马和国会提交了一份《规划数字化未来》的战略报告,把大数据收集和使用的工作提升到体现国家意志的战略高度。报告列举了5个贯穿各个科技领域的共同挑战,而第一个最重大的挑战就是“数据”问题。报告指出:“如何收集、保存、管理、分析、共享正在呈指数增长的数据是我们必须面对的一个重要挑战”。报告建议:“联邦政府的每一个机构和部门,都需要制定一个‘大数据’的战略”。2012年3月,美国总统奥巴马签署并发布了一个“大数据研究发展创新计划”(BigDataR&DInitiative),由美国国家自然基金会(NSF)、卫生健康总署(NIH)、能源部(DOE)、国防部(DOD)等6大部门联合,投资2亿美元启动大数据技术研发,这是美国政府继1993年宣布“信息高速公路”计划后的又一次重大科技发展部署。美国白宫科技政策办公室还专门支持建立了一个大数据技术论坛,鼓励企业和组织机构间的大数据技术交流与合作。2012年7月,联合国在纽约发布了一本关于大数据政务的白皮书《大数据促发展:挑战与机遇》,全球大数据的研究和发展进入了前所未有的高潮。这本白皮书总结了各国政府如何利用大数据响应社会需求,指导经济运行,更好地为人民服务,并建议成员国建立“脉搏实验室”(PulseLabs),挖掘大数据的潜在价值。由于大数据技术的特点和重要性,目前国内外已经出现了“数据科学”的概念,即数据处理技术将成为一个与计算科学并列的新的科学领域。已故着名图灵奖获得者JimGray在2007年的一次演讲中提出,“数据密集型科学发现”(Data-IntensiveScientificDiscovery)将成为科学研究的第四范式,科学研究将从实验科学、理论科学、计算科学,发展到目前兴起的数据科学。为了紧跟全球大数据技术发展的浪潮,我国政府、学术界和工业界对大数据也予以了高度的关注。央视著名节目“对话”2013年4月14日和21日邀请了《大数据时代——生活、工作与思维的大变革》作者维克托·迈尔-舍恩伯格,以及美国大数据存储技术公司LSI总裁阿比分别做客“对话”节目,做了两期大数据专题谈话节目“谁在引爆大数据”、“谁在掘金大数据”,国家央视媒体对大数据的关注和宣传体现了大数据技术已经成为国家和社会普遍关注的焦点。而国内的学术界和工业界也都迅速行动,广泛开展大数据技术的研究和开发。2013年以来,国家自然科学基金、973计划、核高基、863等重大研究计划都已经把大数据研究列为重大的研究课题。为了推动我国大数据技术的研究发展,2012年中国计算机学会(CCF)发起组织了CCF大数据专家委员会,CCF专家委员会还特别成立了一个“大数据技术发展战略报告”撰写组,并已撰写发布了《2013年中国大数据技术与产业发展白皮书》。未来展望大数据在带来巨大技术挑战的同时,也带来巨大的技术创新与商业机遇。不断积累的大数据包含着很多在小数据量时不具备的深度知识和价值,大数据分析挖掘将能为行业/企业带来巨大的商业价值,实现各种高附加值的增值服务,进一步提升行业/企业的经济效益和社会效益。由于大数据隐含着巨大的深度价值,美国政府认为大数据是“未来的新石油”,对未来的科技与经济发展将带来深远影响。因此,在未来,一个国家拥有数据的规模和运用数据的能力将成为综合国力的重要组成部分,对数据的占有、控制和运用也将成为国家间和企业间新的争夺焦点。大数据的研究和分析应用具有十分重大的意义和价值。被誉为“大数据时代预言家”的维克托·迈尔-舍恩伯格在其《大数据时代》一书中列举了大量详实的大数据应用案例,并分析预测了大数据的发展现状和未来趋势,提出了很多重要的观点和发展思路。他认为:“大数据开启了一次重大的时代转型”,指出大数据将带来巨大的变革,改变我们的生活、工作和思维方式,改变我们的商业模式,影响我们的经济、政治、科技和社会等各个层面。由于大数据行业应用需求日益增长,未来越来越多的研究和应用领域将需要使用大数据并行计算技术,大数据技术将渗透到每个涉及到大规模数据和复杂计算的应用领域。不仅如此,以大数据处理为中心的计算技术将对传统计算技术产生革命性的影响,广泛影响计算机体系结构、操作系统、数据库、编译技术、程序设计技术和方法、软件工程技术、多媒体信息处理技术、人工智能以及其他计算机应用技术,并与传统计算技术相互结合产生很多新的研究热点和课题。大数据给传统的计算技术带来了很多新的挑战。大数据使得很多在小数据集上有效的传统的串行化算法在面对大数据处理时难以在可接受的时间内完成计算;同时大数据含有较多噪音、样本稀疏、样本不平衡等特点使得现有的很多机器学习算法有效性降低。因此,微软全球副总裁陆奇博士在2012年全国第一届“中国云/移动互联网创新大奖赛”颁奖大会主题报告中指出:“大数据使得绝大多数现有的串行化机器学习算法都需要重写”。大数据技术的发展将给我们研究计算机技术的专业人员带来新的挑战和机遇。目前,国内外IT企业对大数据技术人才的需求正快速增长,未来5~10年内业界将需要大量的掌握大数据处理技术的人才。IDC研究报告指出,“下一个10年里,世界范围的服务器数量将增长10倍,而企业数据中心管理的数据信息将增长50倍,企业数据中心需要处理的数据文件数量将至少增长75倍,而世界范围内IT专业技术人才的数量仅能增长1.5倍。”因此,未来十年里大数据处理和应用需求与能提供的技术人才数量之间将存在一个巨大的差距。目前,由于国内外高校开展大数据技术人才培养的时间不长,技术市场上掌握大数据处理和应用开发技术的人才十分短缺,因而这方面的技术人才十分抢手,供不应求。国内几乎所有着名的IT企业,如百度、腾讯、阿里巴巴和淘宝、奇虎360等,都大量需要大数据技术人才。大数据基础与技术盘点4.1大数据概念“大数据”是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产【2】。从某种程度上说,大数据是数据分析的前沿技术。简言之,从各种各样类型的数据中,快速获得有价值信息的能力,就是大数据技术。大数据技术的战略意义不在于掌握庞大的数据信息,而在于对这些含有意义的数据进行专业化处理。换句话来说,如果把大数据比作一种产业,那么这种产业实现盈利的关键,在于提高对数据的“加工能力”,通过“加工”实现数据的“增值”【3】。大数据分析相比于传统的数据仓库应用,具有数据量大、查询分析复杂等特点。大数据的4个“V”,或者说特点有四个层面:第一,数据体量巨大。从TB级别,跃升到PB级别;第二,数据类型繁多。前文提到的网络日志、视频、图片、地理位置信息等等。第三,处理速度快,1秒定律,可从各种类型的数据中快速获得高价值的信息,这一点也是和传统的数据挖掘技术有着本质的不同。第四,只要合理利用数据并对其进行正确、准确的分析,将会带来很高的价值回报。业界将其归纳为4个“V”——Volume(数据体量大)、Variety(数据类型繁多)、Velocity(处理速度快)、Value(价值密度低)。大数据最核心的价值就是在于对于海量数据进行存储和分析。比起现有的其他技术而言,大数据的“廉价、迅速、优化”这三方面的综合成本是最优的【4】。4.2大数据用途意义及弊端大数据可分成大数据技术、大数据工程、大数据科学和大数据应用等领域。目前人们谈论最多的是大数据技术和大数据应用。工程和科学问题尚未被重视。大数据工程指大数据的规划建设运营管理的系统工程;大数据科学关注大数据网络发展和运营过程中发现和验证大数据的规律及其与自然和社会活动之间的关系【5】。物联网、云计算、移动互联网、车联网、手机、平板电脑、PC以及遍布地球各个角落的各种各样的传感器,无一不是数据来源或者承载的方式。虽然大数据的拥护者看到了使用大数据的巨大潜力,但也有隐私倡导者担心,因为越来越多的人开始收集相关数据,无论是他们是否会故意透露这些数据或通过社交媒体张贴,甚至他们在不知不觉中通过分享自己的生活而公布了一些具体的数字细节。正因为如此,大数据的隐私问题一直被一些学者所诟病。4.3大数据技术盘点4.3.1分布式系统基础架构HadoopHadoop是一个开源的大数据分析软件,或者说编程模式。它是通过分布式的方式处理大数据的,因为开源的原因现在很多的企业或多或少的在运用Hadoop的技术来解决一些大数据的问题,在数据仓库方面Hadoop是非常强大的。但在数据集市以及实时的分析展现层面,Hadoop也有着明显的不足。目前,Hadoop已经成长为包括Hadoopcommon、HDFS、MapReduce、zookeeper、Avro、Chuwak、Hbase、Hive、Mahout、Pig在内的十个子项目。其中,HDFS和MapReduce是这个框架的核心。HDFS为海量的数据提供了存储,而MapReduce为海量的数据提供了计算【6】。4.3.2编程模型MapReduceMapReduce是Hadoop的核心组件之一,Hadoop主要分布式包括两部分,一是分布式文件系统HDFS,一部是分布式计算框,就是MapReduce,缺一不可【7】,也就是说,可以通过MapReduce很容易在Hadoop平台上进行分布式的计算编程。它极大地方便了编程人员在不会分布式并行编程的情况下,可以将自己的程序运行在分布式系统上。当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组【8】。4.3.3分布式数据库HBaseHBase是一个分布式的、面向列的开源数据库,它是Apache的Hadoop项目的子项目【9】。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。HBase利用Hadoop-HDFS作为其文件存储系统,利用Hadoop-MapReduce来处理HBase中的海量数据,利用Zookeeper作为对应的协同服务【10】。Hadoop框架的工作机制 Hadoop是一个用于构建云平台的Apache开源项目。使用Hadoop框架有利于我们方便、快速的实现计算机集群。在Hadoop平台上,采用了HDFS(分布式文件系统)来实现超大文件的存储和容错,而使用了MapReduce的编程模式来进行计算。将Hadoop运用到数据挖掘,一个关键的问题就是如何实现将传统的数据挖掘算法实行并行化。对于传统的数据挖掘算法,结合算法自身的特点,我们可以很容易或者需要深入研究才能发现它是否能够并行【11】。对于能够并行实现的算法,结合MapReduce编程模式,我们可以将其移植到Hadoop平台上,高效的、并行的完成数据挖掘任务。本节将对HDFS的核心机制和架构作深入的研究和分析。研究内容和观点主要来自Hadoop的官方站点【12】。前提设计和目标1.1硬件错误硬件错误是常态而不是异常。HDFS可能由成百上千的服务器所构成,每个服务器上存储着文件系统的部分数据。我们面对的现实是构成系统的组件数目是巨大的,而且任意组件都有可能失效,这意味着总是有一部分HDFS的组件是不工作的。因此错误检测和快速、自动的恢复是HDFS最核心的架构目标。1.2流式数据访问运行在HDFS上的应用和普通的应用不同,需要流式访问它们的数据集。HDFS的设计中更多的考虑到了数据批处理,而不是用户交互处理。比之数据访问的低延迟问题,更关键的在于数据访问的高吞吐量。POSIX标准设置的很多硬性约束对HDFS应用系统不是必需的。为了提高数据的吞吐量,在一些关键方面对POSIX的语义做了一些修改。1.3大规模数据集运行在HDFS上的应用具有很大的数据集。HDFS上的一个典型文件大小一般都在G字节至T字节。因此,HDFS被调节以支持大文件存储。它应该能提供整体上高的数据传输带宽,能在一个集群里扩展到数百个节点。一个单一的HDFS实例应该能支撑数以千万计的文件。1.4简单的一致性模型HDFS应用需要一个“一次写入多次读取”的文件访问模型。一个文件经过创建、写入和关闭之后就不需要改变。这一假设简化了数据一致性问题,并且使高吞吐量的数据访问成为可能。MapReduce应用或者网络爬虫应用都非常适合这个模型。目前还有计划在将来扩充这个模型,使之支持文件的附加写操作。1.5“移动计算比移动数据更划算”一个应用请求的计算,离它操作的数据越近就越高效,在数据达到海量级别的时候更是如此。因为这样就能降低网络阻塞的影响,提高系统数据的吞吐量。将计算移动到数据附近,比之将数据移动到应用所在显然更好。HDFS为应用提供了将它们自己移动到数据附近的接口。1.6异构软硬件平台间的可移植性HDFS在设计的时候就考虑到平台的可移植性。这种特性方便了HDFS作为大规模数据应用平台的推广。Namenode和DatanodeHadoop为应用程序透明地提供了一组稳定可靠的接口。Hadoop框架的主要组成部分Hadoop分布式文件系统(HDFS)和MapReduce的实现。HDFS采用Master/Slave架构,一个HDFS集群由一个Namenode节点和一组DataNode节点组成。Namenode是一个中心服务器,负责管理文件系统的名字空间(NameSpace)以及客户端对文件的访问。在集群系统中,一般在一个节点上运行一个DataNode,负责管理它所在节点上的数据存储,并负责处理文件系统客户端的读写请求,在Namenode的统一调度下进行数据块的创建、删除和复制。Hadoop还实现了Google的MapReduce分布式计算模型,MapReduce把应用程序的总任务分割成许多子任务,每个子任务可以在任何集群节点(DataNode节点,通常也作为计算节点)上并行处理。HDFS创建了多份数据块(datablocks)的副本(Replicas),以保证各个子任务节点计算的可靠性(Reliability)【13】。由于采用了分布式文件系统和MapReduce模型,因此Hadoop框架具有高容错性及对数据读写的高吞吐率,能自动处理失败节点。Namenode和Datanode被设计成可以在普通的商用机器上运行。这些机器一般运行着GNU/Linux操作系统(OS)。HDFS采用Java语言开发,因此任何支持Java的机器都可以部署Namenode或Datanode。由于采用了可移植性极强的Java语言,使得HDFS可以部署到多种类型的机器上。一个典型的部署场景是一台机器上只运行一个Namenode实例,而集群中的其它机器分别运行一个Datanode实例。这种架构并不排斥在一台机器上运行多个Datanode,只不过这样的情况比较少见。集群中单一Namenode的结构大大简化了系统的架构。Namenode是所有HDFS元数据的仲裁者和管理者,这样,用户数据永远不会流过Namenode。Namenode上的文件名称空间信息存储在FsImage文件中,Namenode上还有一个事务日志文件EditLog。这两个文件要有备份,以防文件损坏或者Namenode宕机导致系统不可恢复。Namenode的作用主要有以下3个:一是文件映射,把一个文件映射到一批数据block,把文件数据映射到Namenode上;二是集群的配置管理,数据块的管理和复制;三是日志处理。文件系统的名字空间(namespace)HDFS支持传统的层次型文件组织结构。用户或者应用程序可以创建目录,然后将文件保存在这些目录里。文件系统名字空间的层次结构和大多数现有的文件系统类似:用户可以创建、删除、移动或重命名文件。当前,HDFS不支持用户磁盘配额和访问权限控制,也不支持硬链接和软链接。但是HDFS架构并不妨碍实现这些特性。Namenode负责维护文件系统的名字空间,任何对文件系统名字空间或属性的修改都将被Namenode记录下来。应用程序可以设置HDFS保存的文件的副本数目。文件副本的数目称为文件的副本系数,这个信息也是由Namenode保存的。数据复制HDFS被设计成能够在一个大集群中跨机器可靠地存储超大文件。它将每个文件存储成一系列的数据块,除了最后一个,所有的数据块都是同样大小的。为了容错,文件的所有数据块都会有副本。每个文件的数据块大小和副本系数都是可配置的。应用程序可以指定某个文件的副本数目。副本系数可以在文件创建的时候指定,也可以在之后改变。HDFS中的文件都是一次性写入的,并且严格要求在任何时候只能有一个写入者。Namenode全权管理数据块的复制,它周期性地从集群中的每个Datanode接收心跳信号和块状态报告(Blockreport)。接收到心跳信号意味着该Datanode节点工作正常。块状态报告包含了一个该Datanode上所有数据块的列表。4.1副本存放副本的存放是HDFS可靠性和性能的关键。优化的副本存放策略是HDFS区分于其他大部分分布式文件系统的重要特性。这种特性需要做大量的调优,并需要经验的积累。HDFS采用一种称为机架感知(rack-aware)的策略来改进数据的可靠性、可用性和网络带宽的利用率。目前实现的副本存放策略只是在这个方向上的第一步。实现这个策略的短期目标是验证它在生产环境下的有效性,观察它的行为,为实现更先进的策略打下测试和研究的基础。大型HDFS实例一般运行在跨越多个机架的计算机组成的集群上,不同机架上的两台机器之间的通讯需要经过交换机。在大多数情况下,同一个机架内的两台机器间的带宽会比不同机架的两台机器间的带宽大。通过一个机架感知的过程,Namenode可以确定每个Datanode所属的机架id。一个简单但没有优化的策略就是将副本存放在不同的机架上。这样可以有效防止当整个机架失效时数据的丢失,并且允许读数据的时候充分利用多个机架的带宽。这种策略设置可以将副本均匀分布在集群中,有利于当组件失效情况下的负载均衡。但是,因为这种策略的一个写操作需要传输数据块到多个机架,这增加了写的代价。在大多数情况下,副本系数是3,HDFS的存放策略是将一个副本存放在本地机架的节点上,一个副本放在同一机架的另一个节点上,最后一个副本放在不同机架的节点上。这种策略减少了机架间的数据传输,这就提高了写操作的效率。机架的错误远远比节点的错误少,所以这个策略不会影响到数据的可靠性和可用性。于此同时,因为数据块只放在两个(不是三个)不同的机架上,所以此策略减少了读取数据时需要的网络传输总带宽。在这种策略下,副本并不是均匀分布在不同的机架上。三分之一的副本在一个节点上,三分之二的副本在一个机架上,其他副本均匀分布在剩下的机架中,这一策略在不损害数据可靠性和读取性能的情况下改进了写的性能。4.2副本选择为了降低整体的带宽消耗和读取延时,HDFS会尽量让读取程序读取离它最近的副本。如果在读取程序的同一个机架上有一个副本,那么就读取该副本。如果一个HDFS集群跨越多个数据中心,那么客户端也将首先读本地数据中心的副本。4.3安全模式Namenode启动后会进入一个称为安全模式的特殊状态。处于安全模式的Namenode是不会进行数据块的复制的。Namenode从所有的Datanode接收心跳信号和块状态报告。块状态报告包括了某个Datanode所有的数据块列表。每个数据块都有一个指定的最小副本数。当Namenode检测确认某个数据块的副本数目达到这个最小值,那么该数据块就会被认为是副本安全(safelyreplicated)的;在一定百分比(这个参数可配置)的数据块被Namenode检测确认是安全之后(加上一个额外的30秒等待时间),Namenode将退出安全模式状态。接下来它会确定还有哪些数据块的副本没有达到指定数目,并将这些数据块复制到其他Datanode上。文件系统元数据的持久化Namenode上保存着HDFS的名字空间。对于任何对文件系统元数据产生修改的操作,Namenode都会使用一种称为EditLog的事务日志记录下来。例如,在HDFS中创建一个文件,Namenode就会在Editlog中插入一条记录来表示;同样地,修改文件的副本系数也将往Editlog插入一条记录。Namenode在本地操作系统的文件系统中存储这个Editlog。整个文件系统的名字空间,包括数据块到文件的映射、文件的属性等,都存储在一个称为FsImage的文件中,这个文件也是放在Namenode所在的本地文件系统上。Namenode在内存中保存着整个文件系统的名字空间和文件数据块映射(Blockmap)的映像。这个关键的元数据结构设计得很紧凑,因而一个有4G内存的Namenode足够支撑大量的文件和目录。当Namenode启动时,它从硬盘中读取Editlog和FsImage,将所有Editlog中的事务作用在内存中的FsImage上,并将这个新版本的FsImage从内存中保存到本地磁盘上,然后删除旧的Editlog,因为这个旧的Editlog的事务都已经作用在FsImage上了。这个过程称为一个检查点(checkpoint)。在当前实现中,检查点只发生在Namenode启动时,在不久的将来将实现支持周期性的检查点。Datanode将HDFS数据以文件的形式存储在本地的文件系统中,它并不知道有关HDFS文件的信息。它把每个HDFS数据块存储在本地文件系统的一个单独的文件中。Datanode并不在同一个目录创建所有的文件,实际上,它用试探的方法来确定每个目录的最佳文件数目,并且在适当的时候创建子目录。在同一个目录中创建所有的本地文件并不是最优的选择,这是因为本地文件系统可能无法高效地在单个目录中支持大量的文件。当一个Datanode启动时,它会扫描本地文件系统,产生一个这些本地文件对应的所有HDFS数据块的列表,然后作为报告发送到Namenode,这个报告就是块状态报告。通讯协议所有的HDFS通讯协议都是建立在TCP/IP协议之上。客户端通过一个可配置的TCP端口连接到Namenode,通过ClientProtocol协议与Namenode交互。而Datanode使用DatanodeProtocol协议与Namenode交互。一个远程过程调用(RPC)模型被抽象出来封装ClientProtocol和Datanodeprotocol协议。在设计上,Namenode不会主动发起RPC,而是响应来自客户端或Datanode的RPC请求。健壮性HDFS的主要目标就是即使在出错的情况下也要保证数据存储的可靠性。常见的三种出错情况是:Namenode出错,Datanode出错和网络割裂(networkpartitions)。7.1磁盘数据错误,心跳检测和重新复制每个Datanode节点周期性地向Namenode发送心跳信号。网络割裂可能导致一部分Datanode跟Namenode失去联系。Namenode通过心跳信号的缺失来检测这一情况,并将这些近期不再发送心跳信号Datanode标记为宕机,不会再将新的IO请求发给它们。任何存储在宕机Datanode上的数据将不再有效。Datanode的宕机可能会引起一些数据块的副本系数低于指定值,Namenode不断地检测这些需要复制的数据块,一旦发现就启动复制操作。在下列情况下,可能需要重新复制:某个Datanode节点失效,某个副本遭到损坏,Datanode上的硬盘错误,或者文件的副本系数增大。7.2集群均衡HDFS的架构支持数据均衡策略。如果某个Datanode节点上的空闲空间低于特定的临界点,按照均衡策略系统就会自动地将数据从这个Datanode移动到其他空闲的Datanode。当对某个文件的请求突然增加,那么也可能启动一个计划创建该文件新的副本,并且同时重新平衡集群中的其他数据。这些均衡策略目前还没有实现。7.3数据完整性从某个Datanode获取的数据块有可能是损坏的,损坏可能是由Datanode的存储设备错误、网络错误或者软件bug造成的。HDFS客户端软件实现了对HDFS文件内容的校验和(checksum)检查。当客户端创建一个新的HDFS文件,会计算这个文件每个数据块的校验和,并将校验和作为一个单独的隐藏文件保存在同一个HDFS名字空间下。当客户端获取文件内容后,它会检验从Datanode获取的数据跟相应的校验和文件中的校验和是否匹配,如果不匹配,客户端可以选择从其他Datanode获取该数据块的副本。7.4元数据磁盘错误FsImage和Editlog是HDFS的核心数据结构。如果这些文件损坏了,整个HDFS实例都将失效。因而,Namenode可以配置成支持维护多个FsImage和Editlog的副本。任何对FsImage或者Editlog的修改,都将同步到它们的副本上。这种多副本的同步操作可能会降低Namenode每秒处理的名字空间事务数量。然而这个代价是可以接受的,因为即使HDFS的应用是数据密集的,它们也非元数据密集的。当Namenode重启的时候,它会选取最近的完整的FsImage和Editlog来使用。Namenode是HDFS集群中的单点故障(singlepointoffailure)所在。如果Namenode机器故障,需要手工干预。数据组织8.1数据块HDFS被设计成支持大文件,适用HDFS的是那些需要处理大规模的数据集的应用。这些应用都是只写入数据一次,但却读取一次或多次,并且读取速度应能满足流式读取的需要。HDFS支持文件的“一次写入多次读取”语义。一个典型的数据块大小是64MB。因而,HDFS中的文件总是按照64M被切分成不同的块,每个块尽可能地存储于不同的Datanode中。8.2Staging客户端创建文件的请求其实并没有立即发送给Namenode,事实上,在刚开始阶段HDFS客户端会先将文件数据缓存到本地的一个临时文件。应用程序的写操作被透明地重定向到这个临时文件。当这个临时文件累积的数据量超过一个数据块的大小,客户端才会联系Namenode。Namenode将文件名插入文件系统的层次结构中,并且分配一个数据块给它。然后返回Datanode的标识符和目标数据块给客户端。接着客户端将这块数据从本地临时文件上传到指定的Datanode上。当文件关闭时,在临时文件中剩余的没有上传的数据也会传输到指定的Datanode上。然后客户端告诉Namenode文件已经关闭。此时Namenode才将文件创建操作提交到日志里进行存储。如果Namenode在文件关闭前宕机了,则该文件将丢失。上述方法是对在HDFS上运行的目标应用进行认真考虑后得到的结果。这些应用需要进行文件的流式写入。如果不采用客户端缓存,由于网络速度和网络堵塞会对吞吐量造成比较大的影响。这种方法并不是没有先例的,早期的文件系统,比如AFS,就用客户端缓存来提高性能。为了达到更高的数据上传效率,已经放松了POSIX标准的要求。8.3流水线复制当客户端向HDFS文件写入数据的时候,一开始是写到本地临时文件中。假设该文件的副本系数设置为3,当本地临时文件累积到一个数据块的大小时,客户端会从Namenode获取一个Datanode列表用于存放副本。然后客户端开始向第一个Datanode传输数据,第一个Datanode一小部分一小部分(4KB)地接收数据,将每一部分写入本地仓库,并同时传输该部分到列表中第二个Datanode节点。第二个Datanode也是这样,一小部分一小部分地接收数据,写入本地仓库,并同时传给第三个Datanode。最后,第三个Datanode接收数据并存储在本地。因此,Datanode能流水线式地从前一个节点接收数据,并在同时转发给下一个节点,数据以流水线的方式从前一个Datanode复制到下一个。存储空间回收9.1文件的删除和恢复当用户或应用程序删除某个文件时,这个文件并没有立刻从HDFS中删除。实际上,HDFS会将这个文件重命名转移到/trash目录。只要文件还在/trash目录中,该文件就可以被迅速地恢复。文件在/trash中保存的时间是可配置的,当超过这个时间时,Namenode就会将该文件从名字空间中删除。删除文件会使得该文件相关的数据块被释放。注意,从用户删除文件到HDFS空闲空间的增加之间会有一定时间的延迟。只要被删除的文件还在/trash目录中,用户就可以恢复这个文件。如果用户想恢复被删除的文件,他/她可以浏览/trash目录找回该文件。/trash目录仅仅保存被删除文件的最后副本。/trash目录与其他的目录没有什么区别,除了一点:在该目录上HDFS会应用一个特殊策略来自动删除文件。目前的默认策略是删除/trash中保留时间超过6小时的文件。将来,这个策略可以通过一个被良好定义的接口配置。9.2减少副本系数当一个文件的副本系数被减小后,Namenode会选择过剩的副本删除。下次心跳检测时会将该信息传递给Datanode。Datanode遂即移除相应的数据块,集群中的空闲空间加大。同样,在调用setReplication
API结束和集群中空闲空间增加间会有一定的延迟。MapReduce分布式并行计算编程模型模型概念MapReduce(映射-归约算法)模型是由Google公司的JeffreyDean和SanjayGhemawat提出的高阶并行函数的抽象模式,据报道每天在Google的集群上有上千个MapReducejob在执行【13】。MapReduce借用了函数式编程的思想【14】,通过把海量数据集的常见操作抽象为Map和Reduce两种集合操作,大大简化了程序员编写分布式并行计算程序的难度。使用MapReduce,即使是对那些分布式处理,或者是并行计算并不熟悉的程序员,也可以很方便的开发并行应用,并且可以减免很多的充分工作。它大大降低了开发并行应用的入门门槛,并且大大减轻了程序员在开发大规模数据应用时的编程负担【15】。MapReduce的名字源于这个模型中两项重要的核心操作:Map和Reduce,即映射和归约【13】。在整个运算过程中,MapReduce模型都是用(key,value)的键值对形式作为输出和输入的。Map把用户输入的(key,value)通过用户自定义的映射过程转变为一组中间键值对的集合。而Reduce过程则会对生成的临时中间键值对进行归约处理。这个归约的规则也是用户自定义的,通过制定的Reduce函数来实现,最后Reduce会输出最终结果【15】。例如,我们对一组输入(1,2),(2,4),(3,6),(4,8)进行Map操作,我们规定对value进行平方映射,那么输出的中间键值对则为:(1,4),(2,16),(3,36),(4,64),接着我们定义Reduce归约规则为计算所有value的值,并将key相加,那么最终我们会得到(10,120)。又例如单词计数的例子【16】。假设有3篇文章paper1:westudyalgorithmpaper2:weshareourthinkingpaper3:thisteamsharesthinkingofthealgorithm根据MapReduce的模型,将这3篇文章交给3个不同的处理器处理:map操作:(其中一个处理器的map操作情况)之后对中间结果进行分区处理,将相近的word映射到同一个临时文件中,最后进行汇总,即reduce的操作【16】。这样对3篇文章的词频统计就结束了。在MapReduce编程模式中,操作是没有副作用的。Map函数在生成新的中间键值的过程中,并不改变原来的数据,这和函数式编程是相同的。所有Map函数是高度并行的。而对于Reduce函数来说,虽然它没有Map函数并行性如此优秀,但是它的计算结果总是很简单的。所以大规模的计算也很适合并行。在使用MapReduce编程模式进行并行开发时,我们必须考虑的是怎样设计Map和Reduce的映射和归约规则,框架则会自动实现并行。这些并行能力和函数式编程有着密不可分的关系。函数式编程有着很多突出的优点,,比如自动内存管理,动态类型。如今,随着机器性能的提高,函数式编程已被广泛的应用。而对于程序员来说,MapReduce由于其卓越且简单的特点,是一种用于并行编程的很好的模型。在MapReduce计算模型中,有两个关键过程:映射过程Map和聚集过程Reduce【13】。因此需要用户提供两个关键函数,映射(Map)函数和聚集(Reduce)函数,这两个函数对一组输入的键值对(key/value)进行计算,得出另一组输出键值对【17】,即有:Map:(kl,v1)→list(k2,v2)Reduce:(k2,list(v2))→list(k3,v3)用户定义的映射函数Map接收一组输入键值对(k1,v1),经过处理产生一组中问的(k2,v2)键值对。MapReduce函数库聚合所有相同的中间键k2的相应值,产生关于k2键的值集合list(v2),并且发送给由用户提供的归并函数Reduce,Reduce再进一步处理、合并该中间键的值集合,最后形成一个相对较小的键值对集合list(k3,v3)。MapReduce模型的实现:MapReduce模型可以有很多种不同的实现方式。具体取决于具体的应用环境。下面是一种Google内部广泛使用的运算环境实现【16】:x86架构,linux操作系统,双处理器,2-4G内存的机器普通的网络硬件设备成千上百的机器(机器故障是常态)代价的IDE硬盘为存储介质。文件系统通过数据复制备份来实现和保证数据的可靠性和有效性MapReduce的执行概况:通过调用MapReduce的库函数将输入的数据自动的分割成M个数据片段的集合,map调用被分布到多台机器上执行,输入的数据片段能够在不同的机器上并行处理【16】。使用分区函数将map调用产生的中间key值分成R个不同的分区(分区函数默认为hash函数),reduce调用也被分配到多台机器上执行。分区数量和分区函数由用户指定。用户程序首先调用MapReduce库将输入的文件分成M个数据片,每个数据片段大小一般在16M到64M(这个大小可以通过参数指定)。然后用户程序在机器集群中创建大量的程序副本。这些程序副本中有一个特殊的程序master,其他的程序是worker程序,由master分配任务,master将一个map或者reduce的任务分配给一个空闲的worker被分配了map任务的worker程序读取相关的输入数据片段,从输入数据片段中解析出key/value,然后把key/value传递给用户自定义的map函数,由map输出中间的key/value并且缓存在内存中。缓存中的key/value通过分区函数分成R个区域,之后周期性的写入到本地磁盘上,缓存的key/value在本地的存储位置返回给master,master负责将这些存储的位置信息再次传送给Reduceworker当Reduceworker接收master传送过来的中间值key/value的存储位置时,将这些中间位置从磁盘中读取这些数据,通过按照key值进行排序,之后把相同的key值的value组合在一起。这个排序是必要的,如果中间数据太大无法进行内部排序,就调用外部排序算法。Reduceworker程序遍历排序后的中间数据,对于每个唯一的中间key,Reduceworker把这个key和相关的value值,传递给用户自定义的Reduce函数。最后输出当所有的map和Reduce任务都完成后,master唤醒用户程序。
MapReduce的执行流程MapReduce的大体流程是这样的【18】,如图所示:由图片可以看到Mapreduce执行下来主要包含这样几个步骤:首先对输入数据源进行切片master调度worker执行map任务。worker读取输入源片段。worker执行map任务,将任务输出保存在本地。master调度worker执行reduce任务,reduceworker读取map任务的输出文件。执行reduce任务,将任务输出保存到HDFS。MapReduce模型的容错机制5.1worker故障master会周期性的ping每个worker。在一个约定的时间范围内没有收到worker的返回信息,master标记这个worker已经失效。所以由这个worker执行的map任务被重新设定为空闲,之后这些任务会安排给其他的worker。同样worker失效时正在运行的map或者Reduce任务也被重新置为空闲状态,等待重新调用【16】。当worker故障时,由于已经完成的map任务的输出放置在该机器闪,位置变成不可访问,需要重新执行。当一个map任务首先被分配个给workA执行,之后workerA失效又被调度到workerB执行,会通知所有还没从workerA取数据的Reduce改从workerB取数据5.2master失效一个程序中只有一个master,master失效的话处理过程比较复杂,一个简单的解决方法是让master周期性的将上面描述的数据结构写入到磁盘。一旦这个master任务失效,可以从最后一个检测点开始启动另一个master进程。不过一般我们再程序运行过程中如果master失效,就停止该程序的运行,重新执行【16】。存储位置:在计算机运行环境中,网络带宽是一个相当匮乏的资源,我们通过尽量把输入数据存储在本地磁盘来节省网络带宽【16】。GFS把每个文件按照64MB一个block分割,每个block保存到多台计算机,就是在整个集成环境中存放多份拷贝(一般是3份)。MapReduce的master在调度map任务时候会考虑输入的文件位置信息,尽量把一个map任务调度到在包含相关输入数据拷贝的机器上执行。如果上述努力失败了,master将试着将map任务分配到存放待输入数据的机器的邻居机器上执行。分布式应用程序协调服务ZooKeeperZooKeeper分布式服务框架是ApacheHadoop的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等【17】。ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。在分布式应用中,由于工程师不能很好地使用锁机制,以及基于消息的协调机制不适合在某些应用中使用,因此需要有一种可靠的、可扩展的、分布式的、可配置的协调机制来统一系统的状态【18】。ZooKeeper的基本概念ZooKeeper中的角色主要有一下三类:系统模型如图所示:设计目的最终一致性:client不论连接到哪个Server,展示给它都是同一个视图,这是zookeeper最重要的性能。可靠性:具有简单、健壮、良好的性能,如果消息m被到一台服务器接受,那么它将被所有的服务器接受。实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。但由于网络延时等原因,Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。等待无关(wait-free):慢的或者失效的client不得干预快速的client的请求,使得每个client都能有效的等待。原子性:更新只能成功或者失败,没有中间状态。顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布;偏序是指如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面。选主流程当leader崩溃或者leader失去大多数的follower,这时候ZK进入恢复模式,恢复模式需要重新选举出一个新的leader,让所有的Server都恢复到一个正确的状态。ZK的选举算法有两种:一种是基于basicpaxos实现的,另外一种是基于fastpaxos算法实现的。系统默认的选举算法为fastpaxos。先介绍basicpaxos流程:选举线程由当前Server发起选举的线程担任,其主要功能是对投票结果进行统计,并选出推荐的Server;选举线程首先向所有Server发起一次询问(包括自己);选举线程收到回复后,验证是否是自己发起的询问(验证zxid是否一致),然后获取对方的id(myid),并存储到当前询问对象列表中,最后获取对方提议的leader相关信息(id,zxid),并将这些信息存储到当次选举的投票记录表中;收到所有Server回复以后,就计算出zxid最大的那个Server,并将这个Server相关信息设置成下一次要投票的Server;线程将当前zxid最大的Server设置为当前Server要推荐的Leader,如果此时获胜的Server获得n/2+1的Server票数,设置当前推荐的leader为获胜的Server,将根据获胜的Server相关信息设置自己的状态,否则,继续这个过程,直到leader被选举出来。通过流程分析我们可以得出:要使Leader获得多数Server的支持,则Server总数必须是奇数2n+1,且存活的Server的数目不得少于n+1.每个Server启动后都会重复以上流程。在恢复模式下,如果是刚从崩溃状态恢复的或者刚启动的server还会从磁盘快照中恢复数据和会话信息,ZK会记录事务日志并定期进行快照,方便在恢复时进行状态恢复。选主流程的具体流程图如下所示:fastpaxos流程是在选举过程中,某Server首先向所有Server提议自己要成为leader,当其它Server收到提议以后,解决epoch和zxid的冲突,并接受对方的提议,然后向对方发送接受提议完成的消息,重复这个流程,最后一定能选举出Leader。其流程图如下所示:大数据一体机一体机简介一体机是指通过标准化的架构集成了服务器、存储、网络、软件等配置,减化了数据中心基础设施部署和运维管理的复杂性的一体化设备。大数据一体机(BigDataAppliance)即通过一体机的产品形态,解决了大数据时代基础设施的持续扩展问题、数据处理的个性化和一体化需求问题、海量数据的存储成本问题。大数据一体机(BigDataAppliance)是一种专为大量数据的分析处理而设计的软、硬件结合的产品,由一组集成的服务器、存储设备、操作系统、数据库管理系统以及一些为数据查询、处理、分析用途而特别预先安装及优化的软件组成,为中等至大型的数据仓库市场(通常数据量在TB至PB级别)提供解决方案。技术特点从技术特点上看,大数据一体机的主要特征有以下2点:采用全分布式新型体系结构,突破大数据处理的扩展瓶颈并保障可用性。采用全分布式大数据处理架构,将硬件、软件整合在一个体系中,采用不同的数据处理的架构来提供对不同行业应用的支撑。通过全分布式大数据处理架构和软硬件优化,使得平台能够随着客户数据的增长和业务的扩张,可通过纵向扩展硬件得到提升,也可通过横向增加节点进行线性扩展,即使在达到4000个计算单元重载节点情况下,也还能够实现相接近线性的扩展性和低延迟、高吞吐量的性能,同时保证业务的连续性。覆盖软硬一体全环节,满足个性化定制需求。采用软硬件一体的创新数据处理平台,针对不同应用需求融合硬件到软件的一系列的手段实现数据采集、数据存储、数据处理、数据分析到数据呈现的全环节覆盖,为用户提供整体方案,用户可以根据各自应用特点选择不同系列的产品,实现按需定制、插电即用。除了以上两点之外,由于大数据产品的专业性和其不同于传统的解决方案,需要提供产品的厂商提供全方位的专业化的服务,帮助用户跨过应用门槛。针对用户在整个数据处理环节提供全方位的专业化的服务,帮助用户明确应用需求,选择适合的软硬件架构,提供开发方面的支持,并帮助客户把程序从原有的模式移植到大数据处理模式下,从调优直至上线应用提供整体一条龙的服务。大数据应用案例大数据应用的关键,也是其必要条件,就在于"IT"与"经营"的融合,当然,这里的经营的内涵可以非常广泛,小至一个零售门店的经营,大至一个城市的经营。以下是关于各行各业,不同的组织机构在大数据方面的应用的案例。医疗行业SetonHealthcare是采用IBM最新沃森技术医疗保健内容分析预测的首个客户。该技术允许企业找到大量病人相关的临床医疗信息,通过大数据处理,更好地分析病人的信息。在加拿大多伦多的一家医院,针对早产婴儿,每秒钟有超过3000次的数据读取。通过这些数据分析,医院能够提前知道哪些早产儿出现问题并且有针对性地采取措施,避免早产婴儿夭折。 它让更多的创业者更方便地开发产品,比如通过社交网络来收集数据的健康类App。也许未来数年后,它们搜集的数据能让医生给你的诊断变得更为精确,比方说不是通用的成人每日三次一次一片,而是检测到你的血液中药剂已经代谢完成会自动提醒你再次服药。能源行业智能电网现在欧洲已经做到了终端,也就是所谓的智能电表。在德国,为了鼓励利用太阳能,会在家庭安装太阳能,除了卖电给你,当你的太阳能有多余电的时候还可以买回来。通过电网收集每隔五分钟或十分钟收集一次数据,收集来的这些数据可以用来预测客户的用电习惯等,从而推断出在未来2~3个月时间里,整个电网大概需要多少电。有了这个预测后,就可以向发电或者供电企业购买一定数量的电。因为电有点像期货一样,如果提前买就会比较便宜,买现货就比较贵。通过这个预测后
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论