Hadoop

编程技术  /  houtizong 发布于 3年前   50
    古代,人们用牛来拉重物。当一头牛拉不动一根圆木时,他们不曾想过培育更大更壮的牛。同样,我们也不需要尝试开发超级计算机,而应试着结合使用更多计算机系统。(蕾斯.霍珀)

1. 数据
    目前的趋势是保存每个人成长过程中产生的所有数据,但更重要的是,计算机产生的数据可能比个人产生的更多。机器日志、RFID检测器、传感器网络、车载GPS和零售交易数据等——所有这些都将使数据量显著增加。公开发布的数据量也在逐步增加。组织或企业,不仅需要管理好自己的数据,更需要从其他组织或企业的数据中获取有价值的信息,以便在未来获得更大的成功。
    曾有这么一句话:“大量的数据胜于好算法”。意思是说对于某些应该(避如基于先前偏好进行电影和音乐推荐),不论你的算法有多好,大量可用的数据总能带来更好的推荐的效果。

2. 数据存储和分析
    我们遇到的问题很简单:多年来磁盘存储容量快速增加的同时,其访问速度、磁盘数据读取速度却未能与时俱进。  
    读取一个磁盘中所有的数据需要很长的时间,写甚至更慢。一个很简单的减少读取时间的办法是同时从多个磁盘上读取数据。读取一个1TB磁盘传输速度为100MB/s时需要两个半小时,试想,如果我们拥有100个1TB磁盘,每个磁盘存储1%的数据,并行读取,那么不到两分种就可以读取所有数据。仅使用磁盘容量的1%的似乎很浪费,但是我们可以存储100个数据集,每个数据集1TB,并实现共享磁盘的访问。可以想象,该类系统的用户会很乐意使用磁盘共享访问以便缩短数据分析时间。并且可以让分析工作在不同的时间点进行。
    尽管如此,要实现多个磁盘数据的并行读写,还有更多的问题要解决:
(1)硬件故障,一旦使用多个硬件,其中任一硬件发生故障的概率将非常高。避免数据丢失的常见做法是使用备份:系统保存数据的冗余复本,在发生故障后,可以使用数据的另一可用复本。如冗余磁盘阵列(RAID)、Hadoop文件系统(HDFS)。
(2)分析任务需要结合大部分数据共同完成分析任务,即从一个磁盘读取的数据可能需要和从另外99个磁盘中读取的数据结合使用。MapReduce提出了一个编程模型,该模型将上述磁盘读写的问题进行抽象,并转换为对一个数据集(由键值对组成)的计算。
    简而言之,Hadoop提供了一个可靠的共享存储和分析系统。HDFS实现存储,而MapReduce实现分析处理。纵然Hadoop还有其他功能,但这两部分是它的核心。

    我们为什么不能使用数据库来对大量磁盘上的大规模数据进行批量分析呢?我们为什么需要MapReduce?
    这些问题的答案来自磁盘的另一个发展趋势:寻址时间的提高远远慢于传输速率的提高。寻址是将磁头移动到特定磁盘位置进行读写操作的过程,它是导致磁盘操作延迟的主要原因,而传输速率取决于磁盘的带宽。如果数据的访问模式中包含大量的磁盘寻址,那么读取大量数据集所花的时间势必会更长,流式读取主要取决于传输速率。另一方面如果数据库系统只更新一小部分记录,那么传统的B树更有优势(关系数据库中使用的一种数据结构,受限于寻址的比例)。但数据库系统更新大部分数据时,B树的效率比MapReduce低得多,因为需要使用“排序/合并”来重建数据库。
    MapReduce比较适合以批处理的方式处理需要分析整个数据集的问题,尤其是即席分析。RDBMS适用于“点查询”和更新,数据集被索引后,数据库系统能够提供低延迟的数据检索和快速的少量数据更新。MapReduce适合一次写入、多次读取数据的应用,而关系型数据库更适合持续更新的的数据集。
    MapReduce和关系型数据库之间的另一个区别在于它们所操作的数据集的结构化程序。结构化数据是具有既定格式的实体化数据,诸如XML文档、数据库表,这是RDBMS包括的内容。另一方面,半结构化数据比较松散,虽然可能有格式,但经常被忽略,所以它只能用作对数据结构的一般指导,例如一张电子表格,每个单元格自身可保存任何形式的数据。非结构化数据没有什么特别的内部结构,例如纯文本或图像数据。MapReduce对于非结构化或半结构化数据非常有效,因为在处理数据时才对数据进行解释。换句话说:MapReduce输入的键和值并不是数据固有的属性,而是由分析数据的人员来选择的。关系型数据往往是规范的,以保持其数据的完整性且不含冗余。规范化给MapReduce带来了问题,因为它使记录读取成为异地操作,然而MapReduce的核心假设之一就是,它可以进行(高速的)流式读写操作。这也是MapReduce非常适合用于分析各种日志文件的原因之一。
    MapReduce是一种线性可伸缩的编程模型。程序员编写两个函数,分别是map函数和reduce函数——每个函数定义一个键/值对集合到另一个键/值对集合的映射。

3. 网格计算
    高性能计算的方法是将作业分散到集群的各台机器上,这些机器访问由存储区域网络(SAN)组织的共享文件系统这比较适用于计算密集型的作业,但如果节点需要访问更大量的数据(几百个GB的数据,这时MapReduce开始发挥其优势),那么很多计算节点会由网络带宽的瓶颈问题而空闲下来等待数据。
    MapReduce会尽量在计算节点上存储数据,以实现数据的本地快速访问。数据本地化特性是MapReduce的核心特征,并因此而获得良好的性能。意识到网络带宽是数据中心环境最珍贵的资源(到处复制数据很容易耗尽网络带宽)之后,MapReduce通过网络拓扑结构尽力保留网络带宽。注意,这种排列方式并未降低MapReduce的计算密集型的数据分析能力。
    在大规模分布式计算环境下,协调各进程间的执行是一个很大的挑战。最困难的是合理地处理系统部分失效的问题。
    MapReduce是由谷歌的工程师开发的,用于构建搜索引擎的索引。同时还有许多其他算法可以用MapReduce来表达,从图像图形分析到各类基于图像分析的问题,再到机器学习算法。当然,它不能解决所有问题,但它确实是一个比较通用的数据处理工具。

4. Hadoop发展简史
    Hadoop是Apache Lucene创始人Doug Cutting创建的,Lucene是一个广泛使用的文本搜索系统库。
    2006年2月开发人员将NDFS和MapReduce移出Nutch形成Lucene的一个子项目,称为Hadoop。
    2008年4月Hadoop打破世界纪录,成为最快的TB级数据排序系统。通过一个910节点的群集,Hadoop在209秒内完成了对1TB数据的排序。同处11月,谷歌在报告中声称,它的MapReduce对1TB数据排序只用了68秒。在2009年5月的时候只花了62秒。

部分Hadoop项目简述:
Common——一组分成式文件系统和通用I/O的组件与接口(序列化、Java RPC和持久化数据结构)。
Avro——一种支持高效、跨语言的RPC以及永久存储数据的序列化系统。
MapReduce——分布式数据处理模型和执行环境,运行于大型商用机集群。
HDFS——分布式文件系统,运行于大型商用机集群。
Pig——一种数据流语言和运行环境,用以检索非常大的数据集。Pig运行在MapReduce和HDFS的集群上。
Hive——一个分布式、按列存储的数据仓库。Hive管理HDFS中存储的数据,并提供基于SQL的查询语言用以查询数据。
HBase——一个分布式、按列存储数据库。HBase使用HDFS作为底层存储,同时支持MapReduce的批量计算和点查询
ZooKeeper——一个分布式、可用性高的协调服务。Zookeeper提供分布式锁之类的基本服务胜于构建分布式应用。
Sqoop——在数据库和HSFS之间高效传输数据的工具。

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客