hadoop--初识hadoop

      今天,像互联网应用,科学数据处理,商业智能数据分析等具有海量数据分析的应用变得越来越普遍时,掌握Google文件系统或者MapReduce编程模型这样的技术已经成为一种趋势。在这样的前景下,实现MapReduce编程模型的Hadoop开源系统自然而然成为大家一种合理的选择了。

      MapReduce之所以受到大家的欢迎是因为技术上有三点又是:

1)采用无共享大规模集群系统。

      集群系统是指一种由很多计算机组成的并行或者分布式系统,可以作为单独的或者单一的计算机资源来使用。具有较高的性价比和可伸缩性。这使得MapReduce成为大规模海量数据平台的首选创造了条件。

2)MapReduce模型简单、易于理解、易于使用。

      大量数据处理问题,包括机器学习和数据挖掘算法都可以使用MapReduce实现。

3)虽然基本的MapReduce模型只提供了一个过程性的编程接口,但是通过合适的查询优化和索引技术,我们依然可以提供相当好的数据处理能力。

 

随着Hadoop日益被学术界和工业界认可,诞生了很多子项目(Pig,Zookeper,Hive(扮演着数据仓库))。

 

1.数据的存储和分析

      读取一个磁盘中所有的数据需要很长的时间,写甚至更慢。试想着如果我们拥有100个磁盘,每个磁盘存储1%的数据,并行读取(相当于利用了100个通道的带宽),那么不到两分钟可以读取所有的数据。

      但是要实现多个磁盘的并行读写,还有更多的问题要解决。

      第一个就是硬件问题。一旦使用多个硬件,那么任一硬件发生故障的概率将会非常高。解决的办法一般是采用备份。冗余磁盘阵列(RAID)采用的便是这种技术,Hadoop的文件系统HDFS也是这种技术。

      第二个就是大多数分析人物需要以某种方式结合大部分数据来完成。也就是说从一个磁盘得到的数据可能和从另外99个磁盘中读取的数据混合使用。现在多种分布式系统允许结合多个来源地数据并实现分析。但是实现正确性却很难做到。MapReduce提出了一种编程模型,该模型将上述磁盘读写的问题进行抽象,并转化成一个数据集(由key/value组成)。

      简而言之。Hadoop提供了一个可靠地共享存储和分析系统。HDFS实现了存储,MapReduce实现了分析处理。纵然Hadoop还有其他功能,但是这两部分是它的核心。

2.关系型数据库管理系统

      我们为什么不能使用数据库来对大量磁盘上的大规模数据进行批量分析呢?为什么使用MapReduce?

      这个问题其实来源于磁盘的一方面另一个发展趋势:寻址时间的提高远远慢于传输速度的提高。MapReduce采用流式数据读取模式,允许你将任务分配给一系列具有容错能力的计算上并行运行,而不是像数据库那样挨个寻找数据,这样我们就减少了寻址时间。另一方面,如果只更新一小部分数据,那么数据库有优势,但是一旦更新很大的数据,那么数据库(基于B/B+树)就需要使用(排序/合并)来重建数据库,这样就大大降低了数据库的查询效率。 

      注:数据库一般采用B+树,但是搜索引擎一般采用Hash。

      这是由两个的不同点决定的,B+树非常适合于动态插入和删除更新,而搜索引擎对于查询速度的要求很高,Hash是查询速度最快的索引数据结构。由于要储存索引,所以我们相当于牺牲了空间换取了时间。

      但是在不久的将来,关系型数据库系统和MapReduce的界限将会越来越模糊,关系型数据库会吸收MapReduce的一些思路,同时MapReduce的高级查询语言(Pig,Hive)会更加接近于传统的数据库编程方式。

 

3.网格计算

高性能计算和网格计算的方法是将作业分散到集群的各台机器上,这些机器访问由区域网络组织的共享文件系统。MapReduce会尽量在计算节点上存储数据,已实现本地快速访问。数据本地化特性是MapReduce的核心特性。但是到处复制数据会占用网络带宽,而网络带宽是数据中心环境最珍贵的资源,因此MapReduce通过显式网格拓扑结构尽量保存带宽,但是这并未降低MapReduce的计算密集型的数据分析能力。

 

4.志愿带宽

      我们知道有一个和Hadoop和MapReduce相同的项目:SETI,全称是:Search for Extra-terrestrial Intelligence(搜寻外星智能),志愿者将自己cpu的空闲时间贡献出来分析无线天文望远镜的数据,借此寻找外星智慧生命信号。

      项目组会将试图解决的问题分为很多块,每一块称为一个工作单元。将他们发到世界各地的电脑,将其进行计算。每一块都会发给三台电脑。至少两台相同的才会接受。

      虽然两者都是将问题分为独立的块,然后进行计算,但是依旧有很多显著地差异。MapReduce一般是计算小的问题,一般几分钟或者几个小时就会完成,SETI计算比较大的问题,一般一块要一天多。因此MapReduce主要利用的是网络带宽,也就是说传输速度很重要。然后SETI的传输时间相对于其庞大的计算时间来说可以忽略,也就是说SETI利用的是志愿者贡献的CPU周期,而非网络带宽。

 

 Hadoop生态系统介绍:

  • HBase
  1. Nosql数据库,Key-Value存储
  2. 最大化利用内存
  • HDFS
  1. Hadoop distribute file system 分布式文件系统
  2. 最大化利用磁盘
  • MapReduce
  1. 编写模型,主要用来做数据分析
  2. 最大化利用CPU
Google              Hadoop 
mapreduce          mapreduce
GFS                   HDFS
BigTable              Hbase
和Google多么的像

你可能感兴趣的:(Hadoop)