大数据认知(一)之为什么使用Hadoop生态系统处理大数据而不是高性能关系型数据库

来源:互联网 发布:手机玩电音的软件 编辑:程序博客网 时间:2024/05/14 06:23

为什么使用Hadoop生态系统处理大数据而不是高性能关系型数据库

    面对这样的问题,不知道大家会什么样的思考,建议大家先思考一下然后带着自己的答案,在来看看我的看法。当然,这只是我个人的见解并非绝对的标准,其实这也没有一个固定的答案。

     在设计使用分布式Hadoop生态系统,如使用HDFS进行冗余、高容错地存储大数据、使用MapReduce分布式并行离线处理大数据等。而没有使用高效性能的关系型数据库,尽管关系型数据库可以快速处理用户事务数据,可以实现较为复杂的表间关联操作等。首先,是因为考虑磁盘瓶颈的原因,磁盘读写最大的瓶颈就是处理速度,如今的磁盘一般可能在100MB/S或者可能再好一些,但是就是这样的读取速度,如果要读取1TB的数据大约要2.5小时。那么面对如今动辄几百TB,有时甚至是更加庞大的PB级数据(随着数据量增大,更加大级也必然到来)。因为磁盘是寻址读取方式,而且通常是要读取所有的数据才能进行操作,可想如果是几百TB的数据,那么可能就读取就需要几百上千个小时。那么如果能把数据分散在多台机器上并行读取那么理论上其速度必然是大幅度提升,如1TB存放在100个磁盘上,那么每个存放10GB的数据,读取完1TB数据大约需要100S。而且HDFS提供的是流式数据处理,也就是数据读取部分即可处理而并非读取所有数据。可能会问这样怎么对数据做整体操作,这个问题被考虑在MapReduce框架中,因为MapReduce计算框架天生就是key-value形式,然后对数据块不到merge的过程。所以最终经过MapReduce的数据会完成整体性的。所以在当前大数据如此盛行、需求量如此大的情况下,考虑磁盘因素应该是使用Hadoop等生态系统的首要因素。

       再有大家应该了解,一般提升性能的方式可能有两种,一种是垂直提升也就是通过不断地加大内存、cpu、硬盘等方式来提高单独服务器的性能,还有一种是水平提升也就是通过利用分布式不断添加机器到集群的方式。通过使用垂直提升方式,必然会达到一定的极限,就抛开这个硬件的极限认为它可以根据需要不断地提升,那么这样提升的费用也是昂贵的。而且对于存储数据仓库信息,这里还存在着单点故障的问题。而如果使用分布式形式,那么扩展通常就是简单的添加机器附上平台软件即可,操作十分简便。而且设计也可以利用其一些相对报废的机器组成集群,而且这样的分布式系统一般都会存储多份数据形成高容错。

        再者,是关系型数据库在针对处理数据表直接复杂的关联操作等便利,而Hadoop生态系统中的HBase数据库则不可以做这样的复杂关联操作。如果说Hive可以实现,那么Hive的一般延迟是不符合数据库要求的,它是数据仓库。但是一般对大数据处理通常是不需要进行复杂的关联操作,基本上都是行列的分析与处理。所以Hadoop平台就是考虑了大数据的特性而诞生的产品。当然,不能说Hadoop就比关系型数据库强了,应该说是具体问题具体对待、各有千秋,在处理事务和用户交互等数据方面,关系型数据库占据了不可动摇的地位。而且关系型数据库产品多样,技术也相对十分成熟。还有一点在使用关系型数据库时,一般分为两层sql level 和 读取数据,而其中sql层就是实现把查询语句分解、优化、形成搜索树等,这一套逻辑十分耗时。而NoSQL就是弱化了sql 层,只留下了提取数据层,所以相对的在处理大数据上HBase会更加快速。

         随着Hadoop的不断发展,其家族产品也陆续登场,如Hive、HBase、Spark、Storm、Mahout等等,这些都是为了满足特定的大数据场景需求而产生的。所以相对于使用场景已基本固化的关系型数据库,Hadoop就显得更加合理、适用。而且Hadoop等都是开源项目,有开源社区和大多技术者的支持,所以其发展和维护等也在向着越来越好的方向发展。而且在做数据仓库等时,关系型数据主要基于SQL语言,而Hadoop有SQL型、Java、Python等,融入的技术人才多样性,也必然会推导项目业务的多样化健康化发展。


以上即为为个人看法,如果认为有误的或者有遗漏的,欢迎大家留言补充。

        








1 0
原创粉丝点击