编者按:Hadoop 于 2006 年 1 月 28 日诞生,至今已有 10 年,它改变了企业对数据的存储、处理和分析的过程,加速了大数据的发展,形成了自己的极其火爆的技术生态圈,并受到非常广泛的应用。在 2016 年 Hadoop 十岁生日之际,InfoQ 策划了一个 Hadoop 热点系列文章,为大家梳理 Hadoop 这十年的变化,技术圈的生态状况,回顾以前,激励当下。本文是 InfoQ 处于一线开发的社区编辑对卢亿雷老师进行的采访,对大家关心的问题进行了专业的解答。
InfoQ:Hadoop 会考虑内存或磁盘动态管理技术吗?
卢亿雷:随着实时计算的发展,Hadoop 会考虑内存管理技术的。动态管理的目的一个是资源自动发现, 一个是系统的效率. 从资源自动发现来看, 比如新的 Hadoop 版本已经支持根据机器内存大小的不同, 自动计算可以使用的内存量 ; 从系统效率角度来讲, 比如新的 Hadoop 已经支持对内存 /ssd/ 硬盘的分级存储管理, 可以更高效地使用存储.
InfoQ:基于 Hadoop 实现的设计本身,它能做到的最好性能是什么?以及哪些瓶颈是设计本身造成的,不可改变的?
卢亿雷:基于 Hadoop 架构设计本身,它能做到最好的性能是大批量数据离线统计,对于多次迭代计算等是它现在设计本身的瓶颈。但是随着 YARN 的发展, Hadoop 的计算层变得越来越像一个纯粹的计算资源管理系统, Spark/Storm/Flink 等多种计算模型都可以在 YARN 上来执行, 极大丰富了 Hadoop 支持的计算, 可以说, Hadoop 已经变得更像一个大数据的框架, 相信它的性能也会越来越好.
InfoQ:Hadoop 能否在底层就实现基于广义 shema 的存储结构,而不是现在的 block,这样会不会性能更好?
卢亿雷:Hadoop 原来设计主要是基于文本存储,后续也进行了改进,可以设计特定的 Schema 存储结构来提高性能,如 Hive 中使用的 RCFile,就是按需取字段,这样大大减少磁盘和网络 IO,可以提高性能。另一方面, Hadoop 底层存储是高度抽象的, 具体的存储结构甚至可以由用户来自定义, 比如现在就有用 AWS 做底层存储的模块, 还有用阿里云做底层存储的模块, 用户可以根据自己的需求来优化相应的存储结构.
InfoQ:Hadoop 越来越跟随着 Spark 的方向在开发,那是不是 Spark 新功能的出现会比较大的影响到 Hadoop 的发展?
卢亿雷:之前谈到, Hadoop 的 YARN 已经可以支持多种计算模型, Spark 就可以在 YARN 上来执行. 从这个层面来讲, Spark 新功能的出现, 会让 Hadoop 使用者更多地受益, YARN 的优化也会更好地支持 Spark 的新功能。另一方面, 在大数据量的存储方面, Hadoop 的 HDFS 基本上就是大数据事实上的存储标准, Spark 的大数据输入 / 输出也是基于 HDFS 的。
InfoQ:Hadoop 代码越来越大,学起来成本更大,怎样才能更优雅的掌握?
卢亿雷:广义的 Hadoop 指 Hadoop 家族, 包括 HDFS/MapReduce/YARN/HBase/Zookeeper 等等组件, 狭义的 Hadoop 单单指 HDFS/MapReduce/YARN, 建议先从这些组件学起.
首先需要学习和理解分布式存储和分布式计算的原理,可以参考 Google 的相关论文, 然后自己手动搭建一个 Hadoop 平台,测试各种组件,学习写 MapReduce 程序,之后可以学习使用 HBase 的搭建和基本使用. 对这些都有一个基本概念之后, 可以先编程使用这些组件, 看可以解决自己的什么实际问题. 最后, 学习最好的资源就是 Hadoop 的社区和源码, 是大数据学习的不二选择. 如果有条件的话, 在一个大数据公司工作, 实际使用它们, 会学习更快的。
InfoQ:Hadoop 解决异构存储介质上的功能现在有生产环境可以用吗?或者对应性能测试怎么样?
卢亿雷:Hadoop 解决异构存储介质上的功能主要支持普通硬盘、SSD、内存这三个存储介质,且在 Hadoop2.6 以后重点实现了,管理员可以在一个限定的 Datanode 跨磁盘存储层,以及应用程序可利用的 API 将数据存储到这些不同的存储层。这意味着管理员可以优化他们的应用程序通过使用 Hadoop 运行:在 SSD 存储层以提高读 / 写延迟;内存存储层进行快速读 / 写;普通硬盘可以进行归档存储层,以提高存储效率。所以可以在生产环境上使用的,前提是需要有同学对这块了解才可以。具体的测试性能需要看对应的应用场景,如果搭配的好,性能提升是比较显现,但是也需要注意的是如果内部数据交换比较多或者带宽有限制,从而导致文件 IO 不是瓶颈,带宽才是瓶颈,则性能基本不会有提升。总的来说如果业务没有特别的要求,其实也不用 Hadoop 的异构存储的功能。
InfoQ:Hadoop 有从底层来设计支持 DAG 优化 (比如现在有的 Tez,Flink)mapreduce 吗?
卢亿雷:目前没有,如果要从底层支持 DAG 优化,那就是重写 Hadoop 架构了。其实现在的 YARN 已经把计算的管理独立了出来, 完全可以在 YARN 上玩出计算的各种花样。现有的 Tez、Flink 等都是基于 Hadoop 之上来实现 DAG 优化的。大家都知道 Apache Tez 是基于 Hadoop Yarn 之上的 DAG(有向无环图,Directed Acyclic Graph)计算框架。它把 Map/Reduce 过程拆分成若干个子过程,同时可以把多个 Map/Reduce 任务组合成一个较大的 DAG 任务,减少了 Map/Reduce 之间的文件存储。同时合理组合其子过程,减少任务的运行时间,由 Hortonworks 开发并提供主要支持;而 Flink 是一个开源的针对批量数据和流数据的处理引擎,且支持 DAG 的运算。像 Tez、Flink 等都可以直接运行在 YARN 上,所以对于 Hadoop 来也不是必须一定要在底层上支持 DAG 的优化,这样分层后也有利于各自的发展。
InfoQ:集群在上百台机器的规模,增加(移出)十来台机器时怎么迁移其上的数据?
卢亿雷:通过 rebalance 来实现,前提是带宽需要做控制。一般大规模的集群都会有一个 rebalance 在持续运行的。如 Hadoop 的 rebalance 是一个非自动的管理功能,换句话说,它是由人工启动的。在任意一台能够连接到 HDFS 的机器上命令行下输入 hadoop balancer [-threshold] 即会启动。如果集群处于不平衡状态,这个过程就会在不平衡的节点之间迁移数据,如果 rebalance 过程没有被打断的话,完成此次 rebalance 目标后过程会自动停止。
受访嘉宾:卢亿雷,精硕科技 (AdMaster) 技术副总裁兼总架构师,大数据资深专家,CCF(中国计算学会)大数据专委委员,北航特聘教授。主要负责数据的采集、清洗、存储、挖掘等整个数据流过程,确保提供高可靠、高可用、高扩展、高性能系统服务,提供 Hadoop/HBase/Storm/Spark/ElasticSearch 等离线、流式及实时分布式计算服务。对分布式存储和分布式计算、超大集群、大数据分析等有深刻理解及实践经验。有超过 10 年云计算、云存储、大数据经验。曾在联想、百度、Carbonite 工作,并拥有多篇大数据相关的专利和论文。
公众号推荐:
AGI 概念引发热议。那么 AGI 究竟是什么?技术架构来看又包括哪些?AI Agent 如何助力人工智能走向 AGI 时代?现阶段营销、金融、教育、零售、企服等行业场景下,AGI应用程度如何?有哪些典型应用案例了吗?以上问题的回答尽在《中国AGI市场发展研究报告 2024》,欢迎大家扫码关注「AI前线」公众号,回复「AGI」领取。
评论