Hadoop随笔(一)
1 大数据概述
由于数据处理增长的速度已经快于计算资源处理能力的提升速度,为了解决这种矛盾,数据的并行处理
出现了。Hadoop就是利用互联网的多台计算机使用MapReduce(采用SIMD)来并行地处理大量数据。
1.1 什么是大数据
现代社会是一个高速发展的社会,而大数据就是这个高科技社会的产物。对于大数据来说,麦肯锡全球研究所给出的定义是,一种规模大道在获取、管理、分析方面大大超出传统数据库软件工具能力范围的数据集合,具有海量的数据规模、快速的数据流转、多样的数据类型和价值密度低四大特征
。
正如前面所说,大数据迫切地需要一些特殊的技术来有效地应对数据的增长,而大规模并行处理数据库、数据挖掘、分布式文件系统、分布式数据库、云计算平台、互联网和可扩展的存储系统等就是我们手中处理这群数据的工具。
整体来看,目前国内大数据应用尚处于从热点行业领域向传统领域渗透的阶段。也就是说,小公司产生的数据不高,而且对于原始数据的处理能力不强,而需要大数据技术的往往都是一些比较大的公司。目前大数据的典型应用由以下几个方面:
运营商业务
运营商掌握体量巨大的数据资源,可以提升洞察力,借助大数据分析运营的内在问题,改善服务水平,为客户提供更好地体验,获得更多的客户以及更高的业务增长。
金融业务
金融行业是信息产业之外大数据的又一重要应用领域,大数据在金融的银行、保险和证券三大业务中都有着广泛的应用前景。
政府业务
大数据政府应用不仅在世界各国政府日益重视,我国政府也非常重视大数据的应用。
还有其他繁多的领域,这里就不做过多介绍了。如有兴趣,可以参考教材大数据Hadoop 3.X分布式处理实战
。
1.2 大数据技术背后的核心思想
我们的核心问题是:虽然通过并行可以很快地处理数据;但是从持久性的存储设备中读取的速度受到限制。这也说明了我们如果要对大数据进行处理,那么是I/O并行化是必不可少的。
1.2.1 把数据分发到多个节点
我们首先要做的是,把一个大数据分布到多个计算节点,这些计算节点可以是电脑可以是服务器,这么做是有以下好处的:
- 每个数据块会在多个节点上有多份拷贝(Hadoop默认是一个数据块有3份拷贝),这使得系统具备容错性,每一个节点发生故障,其他节点还备份有故障节点上的数据。
- 多个节点可以同时参与数据处理过程。这样的话能够使处理效率翻倍。
1.2.2 把计算逻辑移到数据附近
对于熟悉JavaEE的人来说,MVC架构是最常见的一种。从大数据的概念来看,应该要把数据分布在各个计算节点后,对应的程序也应该分布在各个节点,可是这样做不易维护;对此,我们应该要有一个系统,其能够让我们集中式地部署程序代码,部署后启动计算任务,最后程序才会移动到各个数据处理节点。
1.2.3 计算节点进行本地数据处理
所有的大数据编程模型都是基于分布式
和并行处理
的。但是由于网络I/O比本地磁盘I/O慢了好几个数量级,我们要做的最好是每个节点处理本地数据即可。在每个节点中,数据有了,程序有了,计算的条件也就完备了。
尽管想的很美,但这并不是每次都能刚好遇上这么巧的任务,恰好能够让本地的数据刚好能够完成。所以对于大数据系统来说,其都会把计算任务尽量
调度到离数据最近的节点。每个节点计算结果出来后,就会把所有的计算结构汇聚到一个计算节点。
1.2.4 优选顺序读,次之随机读
数据在磁盘的读取过程是:磁盘头首先要移到数据所在的磁盘位置(寻道),移到后将数据读取出来,这个过程叫做数据的传输
操作。对于熟悉计算机组成原理的同学来说,都知道读写磁盘最重要的就是减少磁头臂的移动,尽量使数据的存放在同一个磁盘片上。
既然数据是散乱的,就意味着不能在磁盘中过滤数据,因为在磁盘上过滤就等于是磁盘头一个一个数据确认是不是自己要的,然后不是自己要的就算过滤,这样的话会花很多时间。
大多数的数据读取密集型的大数据编程模型都利用了这个特征。数据被顺序地从磁盘上读出,然后在内存
中过滤数据。而对于关系型数据库管理系统模型来说,其往往是随机读写数据为主。
1.2.5 例子
假设我们要计算2000年美国各州的总销售量,并按州排序。销售数据已经随机分发到各个计算节点。按照大数据计算技术的计算步骤:
- 每个计算节点应该读取分发给自己的全部数据,然后过滤掉不是2000年的销售数据。
- 各个计算节点在处理数据的时候,每发现一个州,就要建立一个新分组,用于存放该州所有销售数据。在处理的过程中,程序是位于各个计算节点的,对本地的数据做处理。
- 当所有的节点都完成了本地所有数据的磁盘读取工作,按照州编号分别计算其销售总额,它们都会把所有的结果汇聚到
汇聚节点
上。 - 这个指定的汇聚节点会把所有计算节点按照州的编号汇聚全部结果,把各个州的来自不同计算节点的数据分别相加。
- 汇聚节点按照州的最终结果排序,并输出排序结果。
1.3 大数据的编程模型
大数据编程模型主要有以下几种类型:
- 大规模并行处理数据库系统
- 内存数据库系统
- MapReduce系统
- 整体同步并行系统
1.3.1 大规模并行处理数据库系统
大规模并行处理(MMP)数据库系统的核心思想是把数据按照某一列或者某一组列的值,按照某种形式进行划分,以分别处理。但是这样做的缺陷是,要用算法去划分数据,还要划分的合理,如果划分不合理查询不方便,为了得到计算结果需要通过网络
来实现数据交换。
为了解决这个缺陷,大规模并行处理数据库系统经常采用把数据存储多份,并且按照不同准则来划分。比如你现在要查询这个结果,结果这个结点数据划分不合理,那我就换另外一个划分准则划分出来的数据。根据不同的查询请求,选择不同的数据集。
1.3.2 内存数据库系统
从系统运行的角度来看,内存数据库系统类似于MMP数据库系统。根据1.2.5的例子,可以说出主要几个要点特征:
数据按州划分,每个节点把数据加载到内存中。
每个计算节点读取本地数据。
由于数据是被缓存到内存的,所以除了最初的数据加载入内存的过程外,这里不适用顺序读取数据的特性。
1.3.3 MapReduce系统
MapReduce是我们要讲的重点。其有如下的特征:
- 使用商用级别的硬件。
- 无需事先定义数据划分准则来吧数据分配到各个计算节点,用户仅需要定义两个独立的处理过程:Map和Reduce。
当Hadoop系统实现MapReduce时,数据常常按照64~128MB的数据块大小进行分发,每个数据块会被复制两次,然后加载到Hadoop分布式文件系统。MapReduce程序启动的时候,Hadoop系统会把程序运行依赖库拷贝到各个计算节点。
各个计算节点按照调度执行Map任务,每个节点上的Mapper
会根据输入的记录,输出一条条包含键值对的数据记录。然后Reducer会从每个Mapper的输出中获取键/值对,各个键会被发送到特定的Reducer进行处理,确保相同的键被相同的Reducer处理。每个Reducer把接收的键值对中的数值相加。输出结果写回HDFS中。客户端再从HDFS读取结果数据,对结果数据做最后处理。
经过上面的叙述,我们可以分析出MapReduce有以下的特征:
- 数据以较大的数据块的形式存放在HDFS上。HDFS是一个分布式文件系统,数据块分散存储到各个结点,数据库是有冗余的。
- 程序运行依赖库,包括Map和Reduce代码被复制发送到所有的任务节点。
- 每个计算节点仅读取节点本地数据,集群中所有节点运行Mapper,从节点本地读取数据到Mapper中。
- 数据被每个节点的任务以数据块的方式一次性顺序读取。
1.3.4 整体同步并行系统
整体同步并行(BSP)系统的运行过程和MapReduce过程非常相似。我们在后面会细讲,这里不过多讲述。
1.4 大数据和事务性系统
在Hadoop中,通常使用HBase来作为自己的NoSQL数据存储。
对于普通的RDBMS来说,遵守ACID准则是非常重要的,但是有时候也必须做出妥协,其理论依据就是CAP理论,即:
- Consistency(一致性):在分布式系统中的所有数据备份,在同一时刻有同样的值。
- Availability(可用性):在合理且明确的时间内,保证每个请求都能获得成功或者失败的结果的响应。
- Partition tolerance(分区容忍性):在集群中一部分节点故障后,集群整体仍然可以使用。
需要注意的是,分布式系统只能满足上述三中其二。
对于一致性和可用性:遵守ACID准则的
单机RDBMS
是兼顾一致性和可用性的系统例子,但是其不满足分区容忍性。对于一致性和分区容忍性:一个
RDBMS集群
就是这样的系统。分布式事务保证了所有用户在同一时刻获取到相同的数据,也可以保证某个节点宕机了还能使用其他节点。但是其是不满足可用性
的,因为在两阶段提交事务期间,系统是不可用的,这是为了保证系统的一致性。也就是说,一致性限制了可用性。对于可用性和分区容忍性:本类别的系统常常被归属于
最终一致性
系统。为了系统可用性和分区容忍性牺牲了一致性。
对于分布式系统,对于上述三种选二如何折中是非常关键的。MapReduce只是Hadoop生态下的一个组件,其常常和其他的组件一起搭配使用。
1.5 我们能处理多大的数据
对于前面我们忽略了CPU的处理而讨论了IO设备的问题,但是随着现代科技计算量的提高,各种情况皆需考虑其中。如果是计算密集型的数据,我们可以采用增加节点数量来提高处理器性能。
我们还忽略了网络I/O开销,对于各个节点计算后传入汇聚节点,其在网络上传输的数据通信开销也是非常大的。
文章来源: blog.csdn.net,作者:ArimaMisaki,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/chengyuhaomei520/article/details/122770173
- 点赞
- 收藏
- 关注作者
评论(0)