上面这些是大家基于对象存储构建数据湖分析方案遇到的典型问题。解决这些问题需要理解对象存储相比传统HDFS的架构区别进行针对性的优化。目前业界做了大量的探索和实践:
JuiceFS:维护独立的元数据服务,使用对象存储作为存储介质。通过独立元数据服务来提供高效的文件管理语义,比如list、rename等。但是需要部署额外服务,所有的分析读取对象存储依赖该服务; Hadoop:由于Hadoop、Spark写入数据使用的是基于OutputCommitter两阶段提交协议,在OutputCommitter V1版本在commitTask以及commitJob会进行两次rename。在对象存储上面进行rename会进行对象的拷贝,成本很高。因此提出了OutputCommitter V2,该算法只用做一次rename,但是在commitjob过程中断会产生脏数据; Alluxio:通过部署独立的Cache服务,将远程的对象存储文件Cache到本地,分析计算本地读取数据加速; HUDI:当前出现的HUDI、Delta Lake、Iceberg通过metadata的方式将dataset的文件元信息独立存储来规避list操作 ,同时提供和传统数据库类似的ACID以及读写隔离性; 阿里云云原生数据湖分析服务DLA:DLA服务在读写对象存储OSS上面做了大量的优化,包括Rename优化、InputStream优化、Data Cache等。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。