数据湖-HDFS-POSIX
POSIX (Portable Operating System Interface) -- "标准的规矩"
一句话解释
POSIX 是一套让软件在不同 Unix/Linux 系统上能通用运行的==标准接口规范==。
运维视角理解:
当你挂载一块硬盘(ext4/xfs)到 Linux 服务器的 /mnt/data 目录下时,你理所当然地认为:
- 可以用
ls,grep,vim操作文件。 - 文件有
rwx权限。 - 可以修改文件的任意位置(比如把第10行改了)。
- 文件名重命名(
mv)是==原子操作==(瞬间完成)。
这就是 POSIX 文件系统标准。绝大多数传统软件(如 MySQL、Nginx、以及你写的 Python 脚本)都默认底层存储是符合 POSIX 标准的。
痛点
到了云原生和大数据时代,S3(对象存储)和 HDFS 并不是完全符合 POSIX 标准的(比如 S3 不能修改文件中间的内容,只能覆盖上传)。如果强行用 s3fs 挂载 S3 当硬盘用,性能会非常差且容易丢数据,这就是因为=="非 POSIX 存储强行模拟 POSIX"==带来的代价。
HDFS (Hadoop Distributed File System) -- "大数据的硬盘"
一句话解释
HDFS 是 Hadoop 生态系统的核心组件,一种==分布式文件系统==,设计初衷是用一堆廉价的普通服务器组成一个超大容量的"虚拟硬盘"。
运维视角理解:
- 架构:典型的 Master/Slave 架构。
- NameNode (Master):相当于文件系统的"目录",记录文件存在哪台机器上(元数据)。它是==单点故障的高风险区==(虽然有 HA 方案)。
- DataNode (Slave):干苦力的,真正存数据块(Block)的地方。
- 特点(与普通 Linux 硬盘的区别):
- 大文件:适合存 GB/TB 级别的大文件,不适合存几十亿个 1KB 的小文件(会把 NameNode 内存撑爆)。
- 一次写入,多次读取:文件一旦写入,通常==不允许修改==(只能追加 Append,或者删了重写)。这也是为什么它不是标准的 POSIX 文件系统。
- 高吞吐,高延迟:它是为了吞吐量(Throughput)设计的,为了快速扫完 1PB 数据,而不是为了像 MySQL 那样快速返回某一行数据(Latency)。
- 多副本:默认 3 副本,坏了一台机器数据不丢,自动恢复。
应用场景
离线大数据分析。你在云上部署 EMR (Elastic MapReduce) 时,底层通常就在跑 HDFS(或者用 S3 替代 HDFS)。
Data Lake (数据湖) -- "囤货的仓库架构"
一句话解释
数据湖不是一种具体的技术(像 HDFS 那样),而是一种==数据架构理念==。它指的是一个集中式存储库,可以按原生格式存储所有结构化(数据库表)和非结构化(日志、图片、视频)数据。
运维视角理解:
- 以前 (数据仓库):你需要先把日志里的数据清洗好(ETL),定义好表结构(Schema),才能存进去。就像瓶装水,喝的时候很方便,但灌装很麻烦。
- 现在 (数据湖):不管三七二十一,先把所有原始日志、备份、IoT 数据扔进去(ELT)。需要分析的时候,再根据需求去读取和解析。就像天然湖泊,先把水蓄起来,要灌溉还是要在里面游泳,以后再说。
技术落地
- 私有云/自建:数据湖的底层存储通常就是 HDFS。
- 公有云 (AWS/阿里云):数据湖的底层存储通常是 S3 / OSS(对象存储)。
为什么云运维要懂?
因为现在的趋势是=="存算分离"==。
- 数据湖(S3/OSS)负责存,很便宜,无限扩容。
- 计算引擎(Spark/Presto/K8s Pods)负责算,用完即毁。
运维需要维护这两者之间的网络带宽、权限(IAM)以及生命周期管理。
总结:三者的关系
如果你是一个厨师(应用程序),这三者就像:
- POSIX:是厨房的操作台标准。规定了刀怎么切,火怎么开。如果你习惯了中式切菜法(POSIX),突然给你一个只能按按钮的食品加工机(对象存储/非POSIX),你会觉得很难用。
- HDFS:是一个巨型工业冷库。由很多小冰箱拼成。适合存整扇的猪肉(大文件),不适合存几粒米(小文件)。它的存取规则比较特殊(非 POSIX),不能随时进去切一小块肉下来,通常要整块拿出来解冻。
- 数据湖:是你的原材料采购策略。你决定不再只买切好的净菜(数据仓库),而是把整个农场的菜、肉、泥土甚至活鸡(原始数据)全部买回来堆在那个工业冷库(HDFS/S3)里。你想做什么菜,再去仓库里现找现杀。