千家信息网

Hadoop之HDFS之一致性模型

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,HDFS某些地方为了性能可能会不符合POSIX(是的,你没有看错,POSIX不仅仅只适用于linux/unix,Hadoop 使用了POSIX的设计来实现对文件系统文件流的读取),所以它看起来可能与你
千家信息网最后更新 2026年11月01日Hadoop之HDFS之一致性模型

HDFS某些地方为了性能可能会不符合POSIX(是的,你没有看错,POSIX不仅仅只适用于linux/unix,Hadoop 使用了POSIX的设计来实现对文件系统文件流的读取),所以它看起来可能与你所期望的不同,要注意。
创建了一个文件以后,它是可以在命名空间(namespace)中可以看到的:

Path p = new Path("p");fs.create(p);assertThat(fs.exists(p), is(true));

但是任何向此文件中写入的数据并不能保证是可见的,即使你flush了已经写入的数据,此文件的长度可能仍然为零:

Path p = new Path("p");OutputStream out = fs.create(p);out.write("content".getBytes("UTF-8"));out.flush();assertThat(fs.getFileStatus(p).getLen(), is(0L));

  这是因为,在Hadoop中,只有满一个block数据量的数据被写入文件后,此文件中的内容才是可见的(即这些数据会被写入到硬盘中去),所以当前正在写的block中的内容总是不可见的。
  Hadoop提供了一种强制使buffer中的内容冲洗到datanode的方法,那就是FSDataOutputStream的sync()方法。调用了sync()方法后,Hadoop保证所有已经被写入的数据都被冲洗到了管道线中的datanode中,并且对所有读者都可见了:

Path p = new Path("p");FSDataOutputStream out = fs.create(p);out.write("content".getBytes("UTF-8"));out.flush();out.sync();assertThat(fs.getFileStatus(p).getLen(), is(((long) "content".length())));

    
  这个方法就像POSIX中的fsync系统调用(它冲洗给定文件描述符中的所有缓冲数据到磁盘中)。例如,使用java API写一个本地文件,我们可以保证在调用flush()和同步化后可以看到已写入的内容:

FileOutputStream out = new FileOutputStream(localFile);out.write("content".getBytes("UTF-8"));out.flush(); // flush to operating systemout.getFD().sync(); // sync to disk(getFD()返回与该流所对应的文件描述符)assertThat(localFile.length(), is(((long) "content".length())));

  在HDFS中关闭一个流隐式的调用了sync()方法:

Path p = new Path("p");OutputStream out = fs.create(p);out.write("content".getBytes("UTF-8"));out.close();assertThat(fs.getFileStatus(p).getLen(), is(((long) "content".length())));

  由于Hadoop中的一致性模型限制,如果我们不调用sync()方法的话,我们很可能会丢失多大一个block的数据。这是难以接受的,所以我们应该使用sync()方法来确保数据已经写入磁盘。但频繁调用sync()方法也是不好的,因为会造成很多额外开销。我们可以再写入一定量数据后调用sync()方法一次,至于这个具体的数据量大小就要根据你的应用程序而定了,在不影响你的应用程序的性能的情况下,这个数据量应越大越好。


数据 文件 方法 内容 UTF-8 保证 应用程序 性能 磁盘 程序 系统 这是 应用 一致 一致性 模型 不同 频繁 一定量 不好 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 精品咖啡豆 互联网科技公司 互联网科技公司排名 云之行互联网科技 互联网科技会 互联网 的科技创新 互联网科技logo设计 科技互联网创业计划书 一五八零互联网科技 互联网科技有限公司 翻译 顺网科技2021年互联网排名 广西拼得多互联网科技有限公司 深圳育鹏互联网科技有限公司招聘 青海科技产业互联网发展 梅州GM互联网络科技有限公司 互联网风格科技公司名称 广州梦谷互联网科技有限公司领导 互联网科技手机排行榜 北京天晋互联网科技有限公司 中国主要互联网科技公司 疫情对互联网科技公司影响 互联网科技公司怎么样 镁科技互联网资讯平台 中正互联网科技招聘 开一家科技互联网公司需要多少钱 互联网科技研发水平 互联网领先科技宣传片 互联网科技股为什么大涨 互联网科技创业计划的风险分析 株洲百竞科技的互联网营销顾问
0