前言
大数据时代已经来临,互联网行业作为大数据时代的领导者,很早就认识到数据的价值,大数据的地位也被放置的越来越重要。
Google、Yahoo!、Facebook、腾讯、阿里巴巴、百度等互联网巨头持续投入大数据技术,新兴的创业公司也不甘落后,把大数据技术作为创业的根本。大数据技术被认为将会是公司乃至整个行业的核心竞争力。随着大数据技术的发展,快速迭代、开源、节约成本等趋势在其中得到充分展现。
在腾讯,为了节约成本、提供更好的服务,很早就开始了去IOE的运动,早在2009年,我们就成立了TDW(腾讯分布式数据仓库)来替代商业数据仓库,为腾讯提供海量、高效、稳定、易用、低成本的数据仓库服务。
TDW提供易用的SQL服务,并不断进行优化,最大地降低使用门槛。除此之外,TDW还提供直接的MapReduce应用服务,满足更高级、更灵活、更定制化的计算需求。TDW还会不断提供不同类型的服务,最大化满足用户的需求。
MapReduce是什么
MapReduce是Google提出的一种编程模型,用于大规模数据集(大于1TB)的并行计算。概念”Map(映射)”和”Reduce(规约)”,和他们的主要思想都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。
MapReduce不是数据仓库,是分布式数据仓库的底层支撑模块,专门负责海量计算。TDW支持多种语言的MapReduce应用程序:Java、C++、Ruby、Python、Shell等。MapReduce天生地具有并行性,门槛较低,极大地方便编程人员在不会分布式编程的情况下,将自己的程序运行在分布式系统上。
Hive、tPig等sql最终也是转换成MapReduce作业进行计算,除此之外MapReduce还支持很多其他应用,不管是数据挖掘的科学家还是决策产品未来的经理们,如果有需要,都可以使用MapReduce对数据进行处理。
MapReduce在TDW中的位置
MapReduce在整个TDW平台中承担所有的离线数据计算,是TDW的底层支撑平台之一。下图展示了整个TDW数据处理平台及MapReduce的角色。
MapReduce支撑着:Hive、tPig等sql计算,Lhotse调度的MapReduce应用程序,还有用户直接提交的应用程序等,不仅是TDW重要的核心模块之一,也是TDW提供给用户的重要服务之一。
TDW使用MapReduce的特性
有海量的数据,MapReduce应用程序可以直接共享这些数据而不需要进行繁琐的数据迁移。
有海量的计算资源,MapReduce应用程序不用担心资源紧张的情况。
有一站式的Lhotse任务管理系统,方便管理一系列的MapReduce作业。
计算引擎资源调度高效,可以在毫秒级完成一次资源调度。
编程门槛低,支持多种语言:Java、C++、Ruby、Python、Shell等,方便编程人员开发应用程序。
支持多种特性:Combiner、Partitioner、自定义输入输出格式、多路输出、自定义Counters、分布式缓存、数据压缩(中间结果压缩、作业输出压缩)、自定义调试等等。
专业的技术支持,TDW团队在MapReduce方面有丰富的经验,用户可以得到TDW团队专业人员的支持。
MapReduce原理介绍
MapReduce对数据进行处理,是以<key, value>对的形式读取输入数据,又以<key, value>对的形式写入输出数据。Map和Reduce顾名思义分别负责映射和规约,map将输入键值对映射到一组中间格式的键值对集合,reduce将与一个key关联的一组中间数值集规约为一个更小的数值集,如下图所示:
MapReduce的过程大致可以分为如下几个阶段:
每个map处理对应的一片数据,这些一片一片数据称为split,split是由输入格式划分得到的,这个过程称为split过程。
每个split由一个map进行处理。Map处理完对应的split数据之后,将中间结果数据写到本地文件系统,这个过程称为spill。
每个reduce处理对应的数据,这些数据来自每个map输出的中间结果数据中的对应部分。Reduce开始之前把对应的数据从每个map输出的中间结果中拷贝过来,这个过程称为copy。
拷贝中间结果过来之后,会经过合并、排序等操作最终会产生一个排序的输入文件,这个过程称为sort。
Copy和sort两个过程合起来一般也称为shuffle过程。
Reduce接下来才进入真正的reduce阶段。所以reduce一般分为上面的copy、sort、reduce三个阶段。
Reduce的输出也就是整个作业的输出,直接写到HDFS上。
这些过程如下图所示:
MapReduce应用程序是怎样提交到计算集群上执行的呢?Job在计算集群上的执行流程如下图所示:
MapReduce计算平台大集群建设
随着业务的快速增长,TDW的计算节点数也在增加,单个大规模Hadoop集群的需求也越来越强烈。TDW需要做单个大规模集群,主要是从计算资源共享、减轻运营负担和成本等方面考虑。
TDW之前单集群规模基本上是400台,从单集群400台规模建设成单集群4000台规模,TDW面临最大的挑战是Hadoop架构的单点问题:计算引擎单点JobTracker负载重,使得调度效率低、集群扩展性不好。为了解决计算单点瓶颈,TDW主要进行了JobTracker分散化方面的实施。
TDW以前的计算引擎是传统的两层架构,单点JobTracker负责整个集群的资源管理、任务调度和任务管理,TaskTracker负责任务执行,如图2所示。JobTracker的三个功能模块耦合在一起,而且全部由一个Master节点负责执行,当集群并发任务数较少时,这种架构的计算效率没有出现瓶颈,但是当集群并发任务数达到2000、节点数达到4000时,任务调度就会出现瓶颈,节点心跳处理迟缓。
TDW借鉴开源的社区版YARN和Facebook版corona设计方案,进行了计算引擎的三层架构优化,如图所示:
(1) 将资源管理、任务调度和任务管理三个功能模块解耦;
(2) JobTracker只负责任务管理功能,而且一个JobTracker只管理一个Job;
(3) 将比较轻量的资源管理功能模块剥离出来交给新的称为ClusterManager的Master负责执行;任务调度也剥离出来,交给具有资源信息的ClusterManager负责执行;
(4) 对性能要求较高的任务调度模块采用更加精细的调度方式。
新架构下三个角色分别是:ClusterManager负责整个集群的资源管理和任务调度,JobTracker负责单个Job的管理,TaskTracker仍然负责任务的执行。
总结
TDW从实际情况出发,采取了一系列的优化措施,成功实施了单个大规模集群的建设,集群规模达到4400台,每日作业数100多万,集群利用率85%多,已经成为公司最大的离线数据处理平台。为了满足用户日益增长的计算需求,TDW正在进行更大规模集群的建设,并向实时化、集约化方向发展,为用户提供更加丰富的服务。
转自:http://data.qq.com/article?id=1231
---------------------------------------------------------------相关链接---------------------------------------------------------------------