前言
Hadoop发展至今,它所涵盖的周边生态圈已经非常庞大了。但是作为一套目前看来如此成熟的系统,免不了要做一些兼容性的事情,比如一些第三方服务类型的系统。毕竟有些用户会使用到第三方的系统,但又不想去改变现有程序运行的模式以及学习第三方系统的成本。Hadoop作为一个如此成熟的项目,在兼容其它第三方系统上,肯定是有考虑到。今天,笔者就来讲讲目前Amazon S3服务与Hadoop的集成兼容性问题。
S3Guard:基于Hadoop之上运行Amazon S3
这里要提到一个名词:S3Guard。它其实是Hadoop内部实现的一个新特性:帮助S3服务能够运行于Hadoop系统之上。简单的理解就是,Hadoop能够以S3作为底层存储的文件系统,而S3Guard,做的就是一个Hadoop兼容性文件系统的工作。这么说的话,大家应该能够更好理解一些了吧。
问题:S3与HDFS的一致性问题
在做这样一个兼容性系统的工作中,一个主要的问题是解决S3与HDFS的一致性保证问题。这话怎么理解呢?S3与HDFS不同,HDFS是强一致性的,比如说我们执行了一个创建文件的操作后,然后去list这个文件,文件是能够被立马显示出来的。而S3是最终一致性保证的,它就不能保证在创建动作结束后,能够立刻list出之前的文件,而是需要delay一段时间。这倒不是说S3服务这块做的不如HDFS什么的,而是说不同系统的内部结构,设计的不同罢了。所以问题来了,基于Hadoop的任务是依赖于HDFS这种强一致性保证的,那我们肯定要在这方面做到一定的兼容性吧。