Hadoop和云似乎是最佳合作伙伴。它们都包括灵活的分布式处理和存储,并且都带有灵活的实例系统。它们还使您能够根据数据和处理需求扩大和缩小Hadoop集群。但这会引发各种管理和调度问题。本文研究了所有这些问题并描述了基于云的Hadoop部署的挑战和优势。了解云部署的范围Hadoop系统是一个具有挑战性的工作环境,但由于云环境提供的约束(和自由),云部署引入了额外的复杂性。例如,在云中使用Hadoop,如何处理可变的集群大小和高效的信息分发?您如何有效地扩大和缩小您的云环境以处理您期望处理的Hadoop负载?您如何计划和控制任务和处理,以在云实例可用时最大限度地利用它们?根据具体的云服务,云部署的优缺点将对Hadoop在这些环境中的使用产生相应的影响。请记住,与公共云相比,私有云服务的约束和限制有很大不同。使用您自己的VM环境或OpenStack等解决方案时,您可以非常灵活地自定义服务和功能。要在云中充分利用Hadoop,您首先需要了解现有的云部署解决方案以及它们如何影响您的Hadoop环境。基于服务的云部署一些云解决方案完全基于加载和处理数据的特定服务。例如,借助IBMBluemix?,您可以配置基于IBMInfoSphere?BigInsights?的MapReduce服务,该服务最多可处理20GB的信息。但是Hadoop服务的大小、配置和复杂性是不可配置的。其他基于服务的解决方案也具有同样的复杂性。您必须根据需要选择或调整服务解决方案的大小,因为您可能无法控制磁盘、I/O、CPU或RAM可用性。确定需求的唯一方法是通过测试。在计算结果中再增加25%或更多,以允许最高使用率和最复杂的情??况。(虚拟)基于机器的云部署尽管云环境完全是基于机器或虚拟机式的部署,但Hadoop安装在虚拟环境中就像安装在物理机器上一样。您可以配置一系列可配置参数来更改您的集群部署选项。特别是每个节点的配置都需要仔细考虑,包括CPU、RAM、磁盘容量和磁盘I/O速度。虽然良好的Hadoop集群部署可以隐藏节点之间的镜像差异,但了解配置可以帮助您在需要标准支持以及更高的速度和计算能力时调整部署规模。对于所有基于云的系统或安装,配置取决于以下因素:CPU精确的CPU计算或任意单位。除非您正在部署基于YARN的解决方案,否则请考虑为集群中的所有数据和处理节点部署完全相同的配置。这种方法可以更轻松地计算所需的集群大小和容量。对于基于YARN的部署,集群中的不同节点可以配置为支持和处理不同级别的CPU容量。例如,此方法可以为给定项目扩展具有一组特定高性能CPU节点的现有集群。所有节点都应该至少有4GB的RAM,但这个空间的大小可能会受到实际可用空间的限制。还要记住确保为文件缓存留出一些空间,这可以提高性能。某些解决方案(例如HBase)可以使用额外的内存。存储容量确保单独的卷用于操作系统和Hadoop存储,这种做法可以提高性能并使扩展HDFS存储更容易。在扩展集群大小之前,您应该估计要使用的存储容量,并将指定的大小归一化。这种方法可确保在集群中实现最大程度的均匀分布。磁盘I/OHHDFS环境应该限制对磁盘I/O的暴露,因为所有工作都分布在集群中。但是,不要将磁盘I/O限制到节点无法有效访问和处理不必要的数据的程度。在许多云环境中,基准或最佳磁盘I/O配置可能太低,甚至会降低整体性能。更糟糕的是,如果您无法确保磁盘I/O速率处于某个水平,您可能会在处理任务时遇到性能下降的情况。NetworkI/OHadoop需要大量的网络I/O才能完成操作;每个文件至少被复制两次,原始写入除外,并且在MapReduce操作期间使用的数据必须类似地通过网络传输。在许多云环境中,网络性能有限,这可能成为部署的限制因素。混合云部署在一些混合云部署中,一些元素是固定的,而另一些是可变的。在这种情况下,您可以在一定范围内定义特定的机器容量,同时控制节点的总数。在这些Hadoop云部署中,选择正确的RAM和CPU组合,然后调整集群以满足该配置。#p#扩展和收缩Hadoop集群云环境最吸引人的方面之一是能够扩展和收缩Hadoop集群的大小以满足要提交的任务的负载和存储要求。在基于服务架构的云环境中,扩缩容通常通过云服务的控制部分进行管理。扩展集群通常很容易,因为通过向现有配置添加更多节点可以更轻松地使用额外资源。缩小集群更加困难,可能会导致性能下降和任务中断。根据您选择的云环境,增加或减少Hadoop集群大小的确切方法会有所不同。基于服务的云环境具有一些内置的扩展能力。基于虚拟机的单元需要在集群内进行部署、软件安装和许可。使用有弹性的Hadoop集群一个真正有弹性的Hadoop集群需要大量的工作和管理。即使启动了云服务,大量添加节点,后期删除,实际的数据添加和管理工作也会很复杂。最大的问题是,要让集群最有效地处理问题,它真正需要做的就是在集群中分配数据和工作负载。此外,请考虑这些过程所花费的时间。即使在最好的情况下,启动每个节点并让它们开始处理工作的过程也需要5到10分钟。缩小规模一直是一个更复杂的问题,因为必须避免可能持有同一数据块的所有副本的节点出现故障。为了减小集群的大小,您必须首先执行重新平衡以确保数据正确存储并且数据副本分布在其余节点上。如果需要再次缩小尺寸,只需重复上述过程即可。扩展Hadoop集群用新节点扩展集群是一种常见的需求,而且过程很简单。通常,在云环境中添加节点时,新节点的大小和容量与现有节点相同。这种方法有助于未来的容量规划。当您计划升级具有更多空间、CPU或RAM容量的节点时,此一般规则不适用。在集群达到80%容量之前扩展集群时。仅当当前容量达到80%时才增加节点数。被动等待扩容集群可能导致容量不足。一旦您决定添加更多节点,实际过程就很简单:向云环境添加新节点。在每个新节点上安装Hadoop。(从镜像中获取预装节点是最简单的方法。)将新节点信息添加到主节点上的conf/slaves文件中。启动清单1中所示的Hadoop进程。清单1.启动Hadoop进程$hadoop-daemon.shstartdatanode$hadoop-daemon.shstarttasktracker不同的Hadoop变体可能有不同的步骤,但这些是基本步骤。您可能还想通过检查dfs.hosts配置来确保主节点正确识别它们。要检查它们是否被正确识别,您可以运行清单2中的代码。清单2.确保正确识别Hadoop变体$hadoopmradmin-refreshNodes$hadooppdfsadmin-refreshNodes此代码设置MapReduce作业处理的节点,但不移动任何现有数据。下一步是确保移动文件块。重新分配存储的数据块存储的数据块可以在集群内移动,以更好地使用增加的节点。有几种移动方式:将文件复制到不同的目录。当文件有效地重写到HDFS中时,此操作将自动重新分配数据块。此步骤需要额外的工作,但可以与工作流同时执行。临时增加复制容量。默认值为3。将此值提高到4将向集群添加新的块副本。将此值减小到3将从某些机器中删除数据块。显式启动平衡操作:$start-balancer.sh请记住,启动任何类型的平衡操作都需要大量I/O和网络流量,直到平衡完成。缩减Hadoop集群缩减Hadoop集群时请考虑以下因素:我能否安全地缩减集群的大小?如果有任务正在运行,请在每个节点上运行停用过程。此过程将删除节点并以可重新启动的方式停止所有正在运行的任务(状态为KILLED_UNCLEAN),以便在下次检查队列并且JobTracker重新分配任务时,可以在可用节点上重新安排任务执行。是否可以释放其他节点上的空间?请记住,减小集群的大小意味着减少用于复制数据的机器数量并增加其余节点上的磁盘使用率。注意:一次关闭的节点不会超过一个。云环境的美妙之处在于,您可以在一个100节点的集群中启动20个新节点来处理峰值,然后再将它们移除。这种方法使集群面临的风险较小,并且可能会完全删除存储的数据。关闭过程会自动在其余节点之间重新分配数据副本。尽管可以减少大数据块,但这样做会给系统带来很大的负载。但是会减少多个数据块中的节点。最安全的退役方式是分阶段完成退役过程。例如,如果要移除20个节点,则停止一次运行3到5个节点:将要从集群中移除的节点添加到dfs.hosts.exclude设置中。运行dfsrefresh更新节点列表:$hadooppdfsadmin-refreshNodes刷新MapReduce配置:$hadoopmradmin-refreshNodes节点现在标记为关闭。在最终关闭节点并安全移除机器之前,将数据副本复制到其他集群中的其他主机。现在,对每个额外的数据块重复这些步骤。通常,此过程比扩展过程需要更长的时间,但它消除了数据丢失的风险。升级节点配置云环境的主要优势之一是可以灵活地修改单个节点配置,甚至可以根据需要完全更新和替换节点。您可以分阶段进行这些修改,结合前面描述的扩展和收缩过程。您甚至可以将此流程用作特定任务的计划扩展和缩减流程的一部分。例如,要将20个数据节点从4CPU系统更改为8CPU系统,请执行以下步骤:添加4个具有新配置的新节点。将它们添加到配置中。启动服务。进行调整。停止旧配置中的4个数据节点重复这些步骤。结果是集群首先通过添加新配置节点进行扩展,然后通过删除旧配置节点进行收缩。#p#任务调度与分配根据任务调度需要,以及处理进程所需的容量,确定扩缩集群的时间。使用云模型,您有时可以通过使用单独的集群而不是一个大型集群来获得一些优势。您可以根据数据复杂性和集群大小安排工作。例如,较大的处理任务可能需要更多节点但较少存储,而其他任务可能需要更多存储但处理节点较少。在云中处理时,尽量在不扩展或增加集群大小的情况下最大化集群配置。许多工具都可以做到这一点,包括基本的任务调度和使用复杂的工作流,例如IBMInfoSphereBigInsights中的ApplicationManager和Oozie。我们的目标是在不增加成本的情况下从集群中获得尽可能好的性能,并确保集群不会过载到无法轻松扩展或恢复的程度。处理存储和负载峰值的最复杂过程可能是知道如何处理突然的存储和负载峰值。根据部署环境的不同,可用的选择可能会有很大差异。在您可以更改的因素中,当您意识到您的集群已超出容量时您会怎么做?重点是首先要尝试避免这个特定问题。您可能希望始终关注容量并确保为工作预留20%到30%的容量。运行超过80%的容量会导致一些麻烦。确定您的需求首先要确定您是否需要额外的磁盘或MapReduce容量。这两个具有不同的属性。两者都是为了增加更多的节点,通常可以解决问题,但成本可能是不必要的。如果问题出在存储上,请考虑向现有节点添加更多存储。某些云环境提供此选项而无需重新启动或修改系统。在这种情况下,可以更新dfs.datanode.data.dir配置以包含新安装的目录。这个选项总是比使用新节点扩展集群更快更容易。如果这是一个长期问题,您应该考虑添加节点并用更高容量的节点替换一些现有节点。从长远来看,这是一项值得的投资,因为这样做可以防止在未来的高峰期出现更多问题。如果您需要CPU能力,但愿意等待存储需求而不是进行调整,则可以添加新节点、安装Hadoop并启动??数据节点和任务跟踪器进程,而无需执行任何调整。确定您是否可以足够快地扩大(和缩小)以达到效果如果高峰期与任务的预定长度相比很短,则可能不值得添加节点,因为创建新主机将花费比处理任务更长的时间。虽然没有通用规则,但请记住,云部署可能会增加10%甚至100%的节点容量,但它可能不会以完全线性的方式提高性能,尤其是在云环境中。如果任务的估计运行时间为6小时,并且您可以在不到一个小时的时间内有效地将集群的大小增加50%,那么扩展集群是值得的。是不是也能在高峰过后及时收缩?考虑在峰值结束时缩减所需的时间长度。缩放需要额外的时间来完成关闭过程并在集群的其余节点之间重新分配数据块。图1显示了同一任务在10个节点上运行然后在更多节点上运行的大致时间,包括将节点添加到集群和关闭节点的时间,所有时间均以小时为单位。从该图中可以看出,添加5个节点很快,将集群规模扩大三倍也很简单,但当节点出现故障时,需要额外花费2.5小时。该过程最终只节省了一个小时,但成本却是原来的三倍。结论在云中部署Hadoop需要了解云环境的局限性以及能够根据需要动态扩展和收缩集群大小的好处。但灵活并不意味着它完美无缺。因此,有效的Hadoop部署需要您了解运行任务需要多长时间,并向上和向下扩展以最大限度地减少在云中执行任务的时间。原文链接:http://www.ibm.com/developerworks/cn/data/library/ba/ba-hadoop-in-cloud/index.html
