本文共 3518 字,大约阅读时间需要 11 分钟。
阿里云E-MapReduce公测以来,陆陆续续有一批用户开始在E-MapReduce上创建和使用集群。在和客户的交流和沟通过程中,我们发现这样一个现象:大部分用户更倾向于将数据存储在自建的集群HDFS中。这里面有几种考虑:
对于数据应该存储在HDFS还是OSS的问题,我们说其实都是可以的。不管HDFS还是OSS,都是稳定可靠的数据存储系统。但是我们推荐用户将数据或者部分冷数据存储在OSS中,这是基于以下考虑:
部署一个集群大体上可以分为两类:混合部署和分离部署。混合部署指的是计算和数据存储部署在一个集群中;分离部署指的是计算和数据存储分别部署在不同的集群中。下面两张图可以直观看出来:
早期将HDFS和Hadoop部署在一起时,可以利用数据本地化特性来提升作业性能。但目前看来,“数据本地化(data locality)”的概念已过时。在许多Hadoop场景中,即使计算和数据存储部署在一个集群,Hadoop作业也无法受益于数据本地化。然而将计算和存储分开可以简化操作,用户可以分别扩展和管理计算和存储系统。
浪费
;同理,只为了提升计算能力,也会带来一段时期的存储浪费。这里只是简单说一下E-MapReduce上计算和存储分离带来的好处,关于存储计算分离部署的讨论还有很多,这里就不再赘述。
上一节说到了计算存储分离的优势,如果你认可这一点,那么看完这一节你还会有更多收获。现在我们部署集群时,就有Hadoop和HDFS两个集群。使用开源软件时,我们一方面享受到技术贡献的便利,同时也不得不面对服务稳定性难以保证的问题。对于数据来说,服务的稳定性和安全性是高于一切的。所以,服务稳定性,数据安全性等等问题成为我们日常维护集群所不得不面对的问题。今天,在阿里云上,已经提供类似的产品来将你从这一切繁琐的问题中解脱出来,这就是OSS。OSS是阿里云提供的海量、安全和高可靠的云存储服务。存储容量和处理能力的弹性扩展使你专注于核心业务。有了OSS,我们可以这么玩集群部署:
有了OSS存储数据,我们接下来要面对的问题是如何在MR,Hive,Pig以及Spark作业中支持OSS数据源。虽然作业种类很多,但追根溯源,我们发现只要在Hadoop上实现对OSS的支持即可。Hive和Pig实际上就是分解成很多个MR作业来处理的,而Spark也是通过Hadoop接口来实现对HDFS类文件系统的支持。有了这个思路,我们就可以很方便地实现Hadoop上对OSS的支持了。
我们已经将这一部分代码开源,有兴趣的可以看,也欢迎大家贡献代码(Bug fix或者New feature)。本节,我们不会去谈Hadoop中如何支持OSS数据源的实现细节,而是去谈谈实际线上用户使用Hadoop+OSS时碰到的性能问题:
数据读:一份相同大小的数据从OSS读过来的时间比直接从HDFS读的时间长。核心问题是网络带宽,包括集群机器的网络带宽以及OSS出数据的通道带宽。这个问题超出了E-MapReduce产品本身的范畴,需要协同OSS以及ECS来共同解决。但从实际效果看,这个读数据时间开销的差距是在可接受的范围之内,相对于作业的整体处理时间,这个读数据时间差别占了很小的部分,不会成为block作业生产的原因。当然如果OSS数据源性能真的成为瓶颈,那就得具体问题具体分析,不属于本篇文章范畴了。
数据写:一份相同大小的数据写OSS比写HDFS的时间长,当写大数据量时尤为明显,甚至达到几倍的时间。这个问题比较特殊,通过分析我们发现,整个写数据的过程可以细化为下面两个阶段:
上面我们分析了将OSS作为数据源时存在的两类问题。其中一类问题集中在OSS端与E-MapReduce端的网络带宽问题,这个问题的影响实际上是有限的,也可以在今后不断提升基础设施来解决。另一类突出问题是Hadoop的执行机制和OSS的保护机制共同导致的,产生的影响也严重。第二个问题不解决,那么Hadoop+OSS只能是一个玩具,无法提供生产级别的作用。不过凡事也有特例,第二个问题对MR,Hive和Pig类型作业影响巨大,但对Spark作业的影响又小了很多。因为Spark执行过程中,数据都只会在E-MapReduce集群中转来转去,直到最终结果写OSS。而MR,Hive和Pig的执行过程中,中间结果会多次落回到OSS上,类比于HDFS,这样的影响就会多次放大! 今天,我们很高兴地告诉大家,通过对Hadoop底层代码的优化,我们已经较好地解决了因为数据拷贝问题导致的性能问题,最新的EMR_1.1.0
镜像将使用优化后的Hadoop版本。下面我们来简单跑几个作业来看看效果把。
机型:4核,8GB内存, 200GB高效云盘
规模:11台,1台Master节点,10台Slave节点作业:TextGenerator,随机生产一定量的文本数据。
类型:Spark配置:--driver-memory 1G --executor-memory 4G --executor-cores 4 --num-executors 10 并发:1024个partition我们可以看出,在EMR1.1.0版本集群中,Hadoop写OSS的性能得到了显著的提升。这个优化可以极大地提升在E-MapReduce上使用MR,Hive和Pig分析OSS数据的使用感受。当然,在Hadoop上支持OSS数据源的实现方式还有很多有待提升的地方,欢迎大家参与到中。
转载地址:http://ljntx.baihongyu.com/