我一度是Hadoop的忠实拥护者。我喜欢它可以轻而易举地处理PB级别的数据,喜欢它可以将运算扩展到数千个节点的分布式计算能力,也喜欢它存储和加载数据的灵活性。但在经历过一系列的探索与使用之后,我对Hadoop非常失望。
下面就是我为什么不使用Hadoop做数据分析的见解。
Hadoop只是一个框架,而非一种完备的解决方案。人们期望Hadoop可以圆满地解决大数据分析问题,但事实是,对于简单的问题Hadoop尚可,对于复杂的问题,依然需要我们自己开发Map/Reduce代码。这样看起来,Hadoop与使用J2EE编程环境开发商业分析解决方案的方式别无二致!
Pig和Hive都非常不错,但却受到架构的局限。Pig和Hive都是设计精巧的工具,它们可以让人迅速上手,提高生产力。但它们毕竟只是一种工具,用于将常规的SQL或文本转化成Hadoop环境上的Map/Reduce查询。Pig和Hive受限于Map/Reduce框架的运作性能,尤其是在节点通信的情况下(如排序和连接),效率更为低下。
没有软件成本,部署相对容易,但维护和开发的代价极大。Hadoop非常受欢迎的理由在于,我们可以自由的下载、安装并运行。由于它是一个开源项目,所以没有软件成本,这使得它成为一种非常吸引人的解决方案,用于替代Oracle和Teradata。但是一旦进入维护和开发阶段,Hadoop的真实成本就会凸显出来。
擅长大数据分析,却在某些特定领域表现不佳。Hadoop非常擅长大数据分析,以及将原始数据转化成应用(如搜索或文本挖掘)所需的有用数据。但如果我们并不很清楚要分析的问题,而是想以模式匹配的方式探索数据,Hadoop很快会变得一塌糊涂。当然,Hadoop是非常灵活的,但需要你花费较长的时间周期去编写Map/Reduce代码。
并行处理的性能极佳,但不排除特例。Hadoop可以将数千个节点投入计算,非常具有性能潜力。但并非所有的工作都可以进行并行处理,如用户交互进行的数据分析。如果你设计的应用没有专门为 Hadoop集群进行优化,那么性能并不理想,因为每个Map/Reduce任务都要等待之前的工作完成。
综上所述,Hadoop的确是一个令人震惊的计算框架,它可以进行大规模的数据分析。另一方面,这也意味着数据分析工作必须建立在大量的编程工作之上。