首页 存档 技术 查看内容

Hadoop年度回顾与2016发展趋势

2018-3-30 13:00 |来自: 互联网 316 0

摘要: 编者按:高可用架构推出 2015 年度案例系列文章,分享在架构领域具有典型意义的年度案例,本文由董西成分享。转载请注明来自高可用架构公众号「ArchNotes」。 董西成,Hulu 网,专注于分布式计算和资源管理系统等相 ...

编者按:高可用架构推出 2015 年度案例系列文章,分享在架构领域具有典型意义的年度案例,本文由董西成分享。转载请注明来自高可用架构公众号「ArchNotes」。


董西成,Hulu 网,专注于分布式计算和资源管理系统等相关技术。《Hadoop 技术内幕:深入解析 MapReduce 架构设计与实现原理》和《Hadoop 技术内幕:深入解 析 YARN 架构设计与实现原理》作者,dongxicheng.org 博主。

Hadoop 2015 技术发展与 2016 发展趋势

Hadoop 部分分为 HDFS 和 YARN 两部分,首先介绍 HDFS 在 2015 年的进展。


HDFS

HDFS 在 2015 年有几个重大特性发布,我列出三个最为突出的:


  1. 异构存储介质

  2. Truncate 操作的支持,也就是 append 逆操作(HDFS-3107)

  3. 异构数据块的支持,即同一文件数据块大小可以不一样,用户可在 append API 中设置 CreateFlag.APPEND 或 CreateFlag.NEW_BLOCK,以决定是继续往最后一个 block 中写数据,还是写到一个新的 block 中。


异构存储介质的支持,使得 HDFS 朝着异构混合存储方向发展。


我们都知道,HDFS 之前是一个以磁盘单存储介质为主的分布式文件系统。但随着近几年新存储介质的兴起,支持多存储介质早就提上了日程。目前,HDFS 已经对多存储介质有了良好的支持,包括 Disk、Memory 和 SSD 等。


HDFS 具体支持的介质如下:

  • ARCHIVE:高存储密度但耗电较少的存储介质,通常用来存储冷数据。

  • DISK:磁盘介质,这是HDFS最早支持的存储介质。

  • SSD:固态硬盘,是一种新型存储介质,目前被不少互联网公司使用。

  • RAM_DISK :数据被写入内存中,同时会往该存储介质中再(异步)写一份。




这是 HDFS 异构存储介质示意图,我们可以通过参数 dfs.datanode.data.dir 指定每块盘的类型,这样,当写文件时,可以指定文件存储到某种存储介质上。




这张表给出了 HDFS 支持的存储策略,不同的策略,存储方式是不同的。用户可以针对不同类型的文件,定制相应的存储策略。

说到异构存储,很多人可能会想到 Spark 社区提出的 Tachyon,它是 Distributed cache system on HDFS,最初是为了解决不同应用程序间共享 RDD 而产生的,现已发展成通用系统。

但很不幸,HDFS 社区的也正在做类似的事情,有两个重大 feature,大家可以关注下:

  • Centralized CacheManagement (HDFS-4949),允许用户指定将某些文件或目录缓存到内存中。

  • DDM:Discardable Distributed Memory(HDFS-5851),使用 YARN 作为资源管理系统,管理内存资源。


在 HDFS 之上单独搞多存储介质支持是不太友好的,最好跟 Hadoop 中资源管理系统 YARN 做一个结合,所以,有人预测,HDFS 和 YARN 的关系会逐步朝下图展示的方式发展:




也就是说,YARN 统一管理异构存储介质和资源,包括磁盘,SSD,网络,CPU 和 memory,并将这些资源分配给 MapReduce,HBase,甚至 HDFS。


YARN

在2015年,YARN 取得了重大进展,本来准备了 5 个特性,由于时间关系,今天主要介绍三个:


  1. 基于标签的调度

  2. 对长服务的支持

  3. 对 Docker 的支持


这个特性使得 YARN 能够更好地支持异构集群调度。它的基本思想是,管理员可为每个 NodeManager 赋予一个或多个标签(就是一字符串),之后在调度器中配置资源队列与 label 的对应关系(目前仅支持 Capacity Scheduler),这样,管理员就实现了:按照节点类型将 YARN 分成若干个逻辑上相互独立(可能交叉)的集群。这种集群跟物理上独立的集群很不一样,用户可以很容易地通过动态调整 label,实现不同类型节点数目的增减,这具有很好的灵活性。


给大家举两个例子,这都是在 Hulu 内部的实际应用:


  1. 一个 Hadoop 集群,20 台服务器,一半高配置,一半低配置,如何将 Spark 作业仅运行在高配置的 NodeManager 上。

  2. 一个 Hadoop 集群,1,000 台机器,只想让 Docker 运行在某 10 个 NodeManager 上(安装和维护 Docker engine 麻烦)。


这两种应用场景,都可以很好地使用标签调度解决




这是一个可能的部署图。YARN 在 2015 年新增的另外一个重大特性是:支持长服务。


YARN 的最终定位是通用资源管理和调度系统,包括支持像类似 MapReduce,Spark 的短作业和类似 Web Service,MySQL 的长服务。 支持长服务是非常难的一件事情,YARN 需要解决以下问题:服务注册、日志滚动、ResourceManager HA、NodeManager HA(NM 重启过程中,不影响 Container)和 ApplicationMaster 永不停止,重启后接管之前的 Container。


目前 Apache 有个二级项目叫 Apache Slider,可以帮助用户把已有应用或服务运行在 YARN 上,比如 HBase,Presto 等都已经通过 Slider 部署到 YARN 上。


YARN 第三个重大特性是实现了一个简易版 Docker On YARN


实现思路是:YARN 的 ContainerExecutor 是可插拔的,目前提供了两种实现:DefaultContainerExecutor 和 LinuxContainerExecutor,而 Docker On YARN 正是通过引入第三种 ContainerExecutor 实现的,叫 DockerContainerExecutor


YARN 上运行一个 Docker Container 的方式如下,大家感受下:




当然,目前 YARN 自带的 Docker On YARN 是有很多局限性的,包括:


  • ContainerExecutor 是系统级别配置,只能配置一个,这意味着用户如果在 YARN 中运行 Docker Container,就不能再运行 MapReduce,Spark 等其他类型的应用程序。

  • 难以同时运行多个 Docker Container 。

  • 需自己编写 Application On YARN 解决容错等问题。


为此,Hulu 内部自己开发了 Voidbox,一个较好的 Docker On YARN 方案。Hulu 的 Docker On YARN 方案叫 Voidbox,它提供了丰富的编程 API,支持 DAG Batch job 和 Long running Service 两种应用,具备良好的容错性。


由于篇幅关系,感兴趣的同学可参考我的技术博客:http://dongxicheng.org/mapreduce-nextgen/voidbox-docker-on-hadoop-hulu/


2016 年发展趋势

对于 HDFS,会朝着异构存储介质方向发展,尤其是对新兴存储介质的支持。对于 YARN,会朝着通用资源管理和调度方向发展,而不仅仅限于大数据处理领域,包括对 MapReduce、Spark 短作业的支持,以及对 Web Service 等长服务的支持。


Q

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部