Hadoop于2006年1月28日诞生,至今已有10年,它改变了企业对数据的存储、处理和分析的过程,加速了大数据的发展,形成了自己的极其火爆的技术生态圈,并受到非常广泛的应用。在2016年Hadoop十岁生日之际,记者策划了一个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的社区和源码,是大数据学习的不二选择。如果有条件的话,在一个大数据公司工作,实际使用它们,会学习更快的。
记者:Hadoop解决异构存储介质上的功能现在有生产环境可以用吗?或者对应性能测试怎么样?
卢亿雷:Hadoop解决异构存储介质上的功能主要支持普通硬盘、SSD、内存这三个存储介质,且在Hadoop2.6以后重点实现了,管理员可以在一个限定的Datanode跨磁盘存储层,以及应用程序可利用的API将数据存储到这些不同的存储层。这意味着管理员可以优化他们的应用程序通过使用Hadoop运行:在SSD存储层以提高读/写延迟;内存存储层进行快速读/写;普通硬盘可以进行归档存储层,以提高存储效率。所以可以在生产环境上使用的,前提是需要有同学对这块了解才可以。具体的测试性能需要看对应的应用场景,如果搭配的好,性能提升是比较显现,但是也需要注意的是如果内部数据交换比较多或者带宽有限制,从而导致文件IO不是瓶颈,带宽才是瓶颈,则性能基本不会有提升。总的来说如果业务没有特别的要求,其实也不用Hadoop的异构存储的功能。
记者:Hadoop有从底层来设计支持DAG优化(比如现在有的Tez,Flink)mapreduce吗?
卢亿雷:目前没有,如果要从底层支持DAG优化,那就是重写Hadoop架构了。其实现在的YARN已经把计算的管理独立了出来,完全可以在YARN上玩出计算的各种花样。现有的Tez、Flink等都是基于Hadoop之上来实现DAG优化的。大家都知道ApacheTez是基于HadoopYarn之上的DAG(有向无环图,DirectedAcyclicGraph)计算框架。它把Map/Reduce过程拆分成若干个子过程,同时可以把多个Map/Reduce任务组合成一个较大的DAG任务,减少了Map/Reduce之间的文件存储。同时合理组合其子过程,减少任务的运行时间,由Hortonworks开发并提供主要支持;而Flink是一个开源的针对批量数据和流数据的处理引擎,且支持DAG的运算。像Tez、Flink等都可以直接运行在YARN上,所以对于Hadoop来也不是必须一定要在底层上支持DAG的优化,这样分层后也有利于各自的发展。
记者:集群在上百台机器的规模,增加(移出)十来台机器时怎么迁移其上的数据?
卢亿雷:通过rebalance来实现,前提是带宽需要做控制。一般大规模的集群都会有一个rebalance在持续运行的。如Hadoop的rebalance是一个非自动的管理功能,换句话说,它是由人工启动的。在任意一台能够连接到HDFS的机器上命令行下输入hadoopbalancer[-threshold]即会启动。如果集群处于不平衡状态,这个过程就会在不平衡的节点之间迁移数据,如果rebalance过程没有被打断的话,完成此次rebalance目标后过程会自动停止。
受访嘉宾:卢亿雷,精硕科技(AdMaster)技术副总裁兼总架构师,大数据资深专家,CCF(中国计算学会)大数据专委委员,北航特聘教授。主要负责数据的采集、清洗、存储、挖掘等整个数据流过程,确保提供高可靠、高可用、高扩展、高性能系统服务,提供Hadoop/HBase/Storm/Spark/ElasticSearch等离线、流式及实时分布式计算服务。对分布式存储和分布式计算、超大集群、大数据分析等有深刻理解及实践经验。有超过10年云计算、云存储、大数据经验。曾在联想、百度、Carbonite工作,并拥有多篇大数据相关的专利和论文。
本文作者:俊达 来源:articles.e-
CIO之家 www.ciozj.com 微信公众号:imciow