在2016年Hadoop十岁生日之际,为大家梳理Hadoop这十年的变化,技术圈的生态状况,回顾以前,激励当下。本文是对卢亿雷老师进行的采访,对大家关心的问题进行了专业的解答。
问:Hadoop会考虑内存或磁盘动态管理技术吗?
卢亿雷:随着实时计算的发展,Hadoop会考虑内存管理技术的。动态管理的目的一个是资源自动发现, 一个是系统的效率.从资源自动发现来看,比如新的 Hadoop 版本已经支持根据机器内存大小的不同,自动计算可以使用的内存量; 从系统效率角度来讲, 比如新的 Hadoop 已经支持对内存/ssd/硬盘的分级存储管理, 可以更高效地使用存储.
问:基于Hadoop实现的设计本身,它能做到的最好性能是什么?以及哪些瓶颈是设计本身造成的,不可改变的?
卢亿雷:基于Hadoop架构设计本身,它能做到最好的性能是大批量数据离线统计,对于多次迭代计算等是它现在设计本身的瓶颈。但是随着 YARN 的发展, Hadoop 的计算层变得越来越像一个纯粹的计算资源管理系统, Spark/Storm/Flink 等多种计算模型都可以在 YARN 上来执行, 极大丰富了 Hadoop支持的计算, 可以说, Hadoop已经变得更像一个大数据的框架,相信它的性能也会越来越好.
问:Hadoop能否在底层就实现基于广义shema的存储结构,而不是现在的block,这样会不会性能更好?
卢亿雷:Hadoop原来设计主要是基于文本存储,后续也进行了改进,可以设计特定的Schema存储结构来提高性能,如Hive中使用的RCFile,就是按需取字段,这样大大减少磁盘和网络IO,可以提高性能。另一方面, Hadoop底层存储是高度抽象的, 具体的存储结构甚至可以由用户来自定义,比如现在就有用 AWS做底层存储的模块,还有用阿里云做底层存储的模块, 用户可以根据自己的需求来优化相应的存储结构.
问:Hadoop越来越跟随着Spark的方向在开发,那是不是Spark新功能的出现会比较大的影响到Hadoop的发展?
卢亿雷:之前谈到, Hadoop的YARN已经可以支持多种计算模型, Spark就可以在YARN上来执行. 从这个层面来讲, Spark新功能的出现, 会让 Hadoop使用者更多地受益, YARN的优化也会更好地支持Spark的新功能 。另一方面,在大数据量的存储方面, Hadoop 的HDFS基本上就是大数据事实上的存储标准, Spark的大数据输入/输出也是基于HDFS的。
问: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的异构存储的功能。
问: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的优化,这样分层后也有利于各自的发展。
问:集群在上百台机器的规模,增加(移出)十来台机器时怎么迁移其上的数据?
卢亿雷:通过rebalance来实现,前提是带宽需要做控制。一般大规模的集群都会有一个 rebalance 在持续运行的。如Hadoop的rebalance 是一个非自动的管理功能,换句话说,它是由人工启动的。在任意一台能够连接到HDFS的机器上命令行下输入 hadoop balancer [-threshold] 即会启动。如果集群处于不平衡状态,这个过程就会在不平衡的节点之间迁移数据,如果rebalance过程没有被打断的话,完成此次rebalance目标后过程会自动停止。
受访嘉宾:卢亿雷,精硕科技(AdMaster)技术副总裁兼总架构师,大数据资深专家,CCF(中国计算学会)大数据专委委员,北航特聘教授。
在这里我还是要推荐下我自己建的大数据学习交流qq裙:522189307 , 裙 里都是学大数据开发的,如果你正在学习大数据 ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有大数据开发相关的),包括我自己整理的一份最新的大数据进阶资料和高级开发教程,欢迎进阶中和进想深入大数据的小伙伴。上述资料加群可以领取