注:写这篇文章的初衷是因为Hadoop炒得有点太热,很多用户现有数据规模并不适用于Hadoop,但迫于扩容压力和去IOE(Hadoop的廉价扩展的确非常有吸引力)而尝试。尝试永远是件正确的事儿,但有时候不用太突进,可以调优或调需求,发挥现有系统的最大效用为上策。
--------------------------------------------------------------------------------------
Hadoop在实际使用中,很多用户会发现Hadoop性能较差、结构复杂、开发困难,并不如想像中的那么好。这是因为Hadoop的并行计算框架是重量级的MapReduce,其设计目标是支持几百或上千台的大集群,为了有效地利用大集群的资源和保证容错性,MapReduce的体系结构设计得很复杂,而大多数用户的数据规模是十几台、几十台的中小集群,在这种环境中应用Hadoop会带来很多不便,无法体会Hadoop的优势也就可以理解。
任务拆分过碎,调度成本过高。集群计算会有一定的故障率,比如网络故障或节点机的故障,出了故障就需要重新计算,就会重新消耗资源。因此每台节点机上的任务越小,重复计算所消耗的资源就会越小。但将大任务拆分为小任务本身也需要消耗资源,拆分得越多越小,调度的成本也就越高,实时性也就越差。这是天平的两头,不可兼顾。
MapReduce是为大集群所设计的,大集群的故障率会非常高,而调度成本就显得不那么重要了。因此MapReduce被设计为一次处理尽量少的数据,默认是一条。假如有几十亿条数据,那这些数据就会被拆分成几十亿条,每个节点机分配一条。但是中小集群用户的节点少,发生故障的概率很低,往往能正常运行很久,他们更希望可以自由定制任务的拆分规模,比如把一亿条数据分成一百份,每个节点处理一百万条,从而降低调度成本。
MapReduce难以提供这种灵活自由的任务拆分手段,因此中小集群用户会感觉Hadoop的实时性较差。
用文件交换数据,性能低。计算中的节点故障可以用细分任务的办法解决,但如果节点计算后、在向汇总机提交结果前发生故障怎么办?MapReduce的办法很简单:写入HDFS,用文件来交换数据,这种做法明,显不如将内存中的数据直接发回节点机快,但在高故障率的大集群环境下,这种做法就相当有效了。
中小集群用户的故障率很低,他们更希望灵活的数据交换方式:大部分情况下直接交换,确有必要的时候再用文件交换,这样可以大大减少数据交换的时间。
MapReduce无法提供这种灵活的数据交换方式,因此中小集群用户会感觉Hadoop的性能较差。
架构复杂,管理成本高。为了使大集群高效地利用资源、应对不可靠的计算环境、稳定有效地执行计算任务,MapReduce的架构被设计的非常复杂。这种复杂在几百,几千台的集群环境中是非常有必要的。但这也带来了部署的复杂性,不仅维护和管理的工作量大,学习难度和开发难度也大大提高,而且复杂的结构会导致整体的性能下降,各种组件出现错误的概率增多,错误排查困难,也束缚了用户的自由度,使开发成本变大。例如,MapRreduce默认是一次处理一条数据,但经过改写后也可以一次处理多条数据,只是这种改写比较困难,需要较高的技术能力和较多的开发时间。
中小集群用户的节点机少,机器类型没有那么多样,计算环境也比较可靠,因此不需要如此复杂的架构就能保证计算任务稳定有效的执行。他们更希望MapRreduce的架构简单些,这样才能降低管理成本低,提高运算效率高。
中小集群用户无法改变MapReduce的底层架构设计,因此常会感觉Hadoop的管理成本太高。
分享到:
相关推荐
总结起来,"腾讯大规模Hadoop集群实践"涵盖了Hadoop的分布式存储、并行计算、资源调度、监控管理、安全控制以及与其他技术的融合等多个层面。这些实践经验和策略对于任何寻求构建和优化Hadoop集群的企业都具有重要的...
本篇文章将深入探讨腾讯如何构建和管理大规模的Hadoop集群,并分享相关的项目实践经验。 首先,Hadoop的核心组件包括HDFS(Hadoop分布式文件系统)和MapReduce,它们共同构成了处理海量数据的基础。HDFS为大数据...
然而,在Hadoop集群中,如何快速、有效地定位超大文件中的数据块,以便进行并行处理,是亟待解决的技术挑战。 【发明内容】 本发明提供了一种基于Hadoop集群的超大文件并行数据块定位方法,利用Map/Reduce编程模型...
在小规模集群中,NameNode和JobTracker可以运行在同一节点上,以节省资源。 Hadoop的版本发展历程中,各个版本添加了不同的特性,比如对HDFS文件系统的“附加”操作、Kerberos认证、安全性和稳定性等。Hadoop的版本...
它利用MapReduce编程模型将复杂的计算任务分解成可并行执行的小任务,然后在多台服务器(节点)上进行分布式处理。然而,Apriori算法的并行化并不容易,因为它涉及到大量的候选集生成和频繁项集的检查,这些步骤在...
- MapReduce:是Hadoop的主要计算模型,它将大型任务分解为小任务(Map阶段),在集群中的各个节点并行处理,然后将结果合并(Reduce阶段)。 2. Hadoop工作原理: - 数据分片:HDFS将大文件切分为多个数据块,并...
由于Hadoop主要用于处理大规模数据集,其硬件需求与传统应用有所不同,因此需要根据应用场景的不同来选择合适的硬件配置。 #### 二、Hadoop应用分类与硬件要求 Hadoop的应用场景可以大致分为两类:批处理系统和低...
综上所述,本文介绍了一种基于Hadoop平台的网络流量分流并行处理系统,该系统充分利用了Hadoop的强大计算能力和分布式存储特性,能够高效地处理大规模网络流量。未来的研究方向可以进一步探索如何优化MapReduce作业...
本研究主要关注的是在Hadoop平台上,如何利用MapReduce并行编程模型来优化特征匹配算法,特别是在处理大量小文件时的效率问题。 首先,我们需要理解Hadoop的核心——分布式文件系统(HDFS)和MapReduce计算模型。...
在单机环境下,C4.5在小规模数据上表现良好,但面对大数据时,其性能受限于内存和计算能力。这就是为什么将其与Hadoop MapReduce结合,以实现并行化的关键所在。 在MapReduce中,C4.5算法的并行化主要体现在两个...
本文针对小波分析在时频域的局部化特性以及小波聚类算法在数据处理中的优秀表现,深入研究了在多机器并行环境下的小波聚类算法设计,旨在实现能够对大规模数据进行并行处理的小波聚类算法。 首先,文章介绍了用于大...
Map-Reduce是一种编程模型,用于处理大规模数据集(通常是TB级或更大),该模型可以在大量计算机(称为集群)上进行并行处理。Map-Reduce的设计初衷是为了简化大数据处理任务,通过将这些任务分解成两个阶段——Map...
Hadoop采用MapReduce编程模型来实现分布式计算,MapReduce是Hadoop的核心组件,它将复杂的、运行在大规模集群上的并行计算问题简化为两个关键操作:Map(映射)和Reduce(归约)。 MapReduce理论简介中,1.1.1...
它将大型任务拆分为多个小的 Map 任务和 Reduce 任务,这些任务在集群中的不同节点上并行执行,极大地提高了处理效率。JobTracker 和 TaskTracker 分别负责作业调度和任务执行,确保整个计算过程的高效协调。 在...
### Hadoop集群安装与配置详解 #### 一、引言 随着互联网技术的快速发展和企业数据量的激增,高效处理大规模数据的需求日益迫切。Hadoop作为一种开源的大数据处理框架,因其优秀的分布式处理能力和可扩展性,成为...
本文研究了基于Hadoop的人脸识别并行化方法,以解决传统人脸识别技术中的小数据量、单机处理环境、实时性低等问题。文章首先介绍了人脸识别技术的发展和Hadoop的大数据处理框架,然后提出了一种将人脸数据库存放在...
MapReduce是Hadoop用于大规模数据处理的编程模型,它将大型任务分解为小部分,然后在集群中的各个节点上并行处理。 搭建Hadoop集群的第一步是安装Java环境,因为Hadoop是用Java编写的,所以需要JDK。确保所有服务器...