Hadoop是一个数据处理框架。在当前,数据存储与处理的主要工具是标准的关系数据库。Hadoop的优势是:SQL(结构化查询语言)是针对结构化数据而设计,而Hadoop最初的许多应用是针对非结构化数据,显然,Hadoop比SQL的应用更为广泛。
如果只对结构化数据处理,则Hadoop和SQL需要做更深入的比较。原则上,SQL和Hadoop可以互补,因为SQL是一种查询语言,可将Hadoop作为其执行引擎。但实际上,SQL数据库往往指一整套传统技术,许多这类关系数据库无法满足Hadoop设计所面向的需求。
考虑到这一点,Hadoop与SQL数据库的比较如下。
(一)横向扩展代替纵向扩展
关系型数据库更容易纵向扩展。要运行一个更大的数据库,就需要买一个更大的机器。事实上,往往会看到服务器厂商在市场上将其昂贵的高端机标称为数据库级的服务器。不过有时可能需要处理更大的数据集,却找不到一个足够大的机器。更重要的是,高端的机器对于许多应用并不经济。例如,性能4倍于标准PC的机器,其成本将大大超过放在一个集群中的标准4台PC。Hadoop的设计就是为了能够在PC集群上实现横向扩展的架构。添加更多的资源,对于Hadoop集群就是增加更多的机器。一个Hadoop集群的标配是十至数百台计算机。事实上,如果不是为了产品开发,没有理由在单个服务器上运行Hadoop。
(二)键值对代替关系表
关系数据库的一个基本原则是让数据按某种模式存放在具有关系型数据结构的表中。虽然关系模型具有大量形式化的属性,但是许多当前的应用所处理的数据类型并不能很好地适应这个模型。文本、图片和XML文件就是最典型的例子。此外,大型数据集往往是非结构化或半结构化的。Hadoop使用键值对作为基本数据单元,可足够灵活地处理较少结构化的数据类型。在Hadoop中,数据的来源可以有任何形式,但最终会转化为键值对处理。(www.daowen.com)
(三)函数式编程代替声明式查询
SQL是一种高级声明式语言,查询数据的手段是声明需要的查询结果并使数据库引擎判定如何获取数据。在MapReduce编程模型中,数据处理步骤由用户指定,类似于SQL引擎的一个执行计划。SQL使用查询语句,而MapReduce则使用脚本和代码。MapReduce可以用比SQL查询更为一般化的数据处理方式。例如,可以建立复杂的数据统计模型或改变图像数据的格式,而SQL就不能很好地适应这些任务。
另外,当数据处理非常适合于关系型数据结构时,可以发现使用MapReduce并不自然。习惯于SQL范式的人使用MapReduce是一个新的挑战。更轻松地掌握MapReduce编程并非易事,这里还有很多扩展可用,便于人们采用更熟悉的范式来编程,同时拥有Hadoop的可扩展性优势。事实上,使用某些扩展可采用一种类似SQL的查询语言,并在MapReduce上运行。
(四)离线批量处理代替在线处理
Hadoop是专为离线处理大规模数据分析而设计,它并不适合对几个记录随机读写的在线事务处理模式。事实上,Hadoop最适合一次写入、多次读取的数据存储需求。在这方面它与数据仓库相同。
Hadoop是一个通用的工具,它使新用户可以享受到分布式计算的好处。通过采用分布式存储、迁移代码而非迁移数据,Hadoop在处理大数据集时避免了耗时的数据传输问题。此外,数据冗余机制允许Hadoop从单点失效中恢复。在Map Reduce框架中编写程序非常方便,由Hadoop分配任务到执行节点、管理节点间的通信,用户不必操心如何分割数据等。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。