Hadoop-2

一致性模型

HDFS某些地方为了性能可能会不符合POSIX(是的,你没有看错,POSIX不仅仅只适用于linux/unix,Hadoop 使用了POSIX的设计来实现对文件系统文件流的读取),所以它看起来可能与你所期望的不同,要注意。
  创建了一个文件以后,它是可以在命名空间(namespace)中可以看到的:
    Path p = new Path(“p”);
    fs.create§;
    assertThat(fs.exists§, is(true));
  但是任何向此文件中写入的数据并不能保证是可见的,即使你flush了已经写入的数据,此文件的长度可能仍然为零:
    Path p = new Path(“p”);
    OutputStream out = fs.create§;
    out.write(“content”.getBytes(“UTF-8”));
    out.flush();
    assertThat(fs.getFileStatus§.getLen(), is(0L));
  这是因为,在Hadoop中,只有满一个block数据量的数据被写入文件后,此文件中的内容才是可见的(即这些数据会被写入到硬盘中去),所以当前正在写的block中的内容总是不可见的。
  Hadoop提供了一种强制使buffer中的内容冲洗到datanode的方法,那就是FSDataOutputStream的sync()方法。调用了sync()方法后,Hadoop保证所有已经被写入的数据都被冲洗到了管道线中的datanode中,并且对所有读者都可见了:
    Path p = new Path(“p”);
    FSDataOutputStream out = fs.create§;
    out.write(“content”.getBytes(“UTF-8”));
    out.flush();
    out.sync();
    assertThat(fs.getFileStatus§.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 system
    out.getFD().sync(); // sync to disk(getFD()返回与该流所对应的文件描述符)
    assertThat(localFile.length(), is(((long) “content”.length())));
  在HDFS中关闭一个流隐式的调用了sync()方法:
    Path p = new Path(“p”);
    OutputStream out = fs.create§;
    out.write(“content”.getBytes(“UTF-8”));
    out.close();
    assertThat(fs.getFileStatus§.getLen(), is(((long) “content”.length())));

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

**以上转自:**http://www.cnblogs.com/beanmoon/archive/2012/12/17/2821548.html

NameNode工作机制

1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hadoop是一个开源的分布式计算框架,用于处理大规模数据集的存储和处理,Hadoop的最新稳定版本是Hadoop-2.7.6。 要下载Hadoop-2.7.6,首先要打开Hadoop官方网站。在网站上,你可以找到并下载Hadoop的各个版本。你可以通过以下步骤来下载Hadoop-2.7.6: 1. 打开你的网页浏览器,输入Hadoop官方网站的URL地址,例如http://hadoop.apache.org。 2. 在网站的主页上,找到并点击“Downloads”或者“下载”选项。 3. 进入下载页面后,你会看到Hadoop的不同版本列表,找到“Hadoop 2.7.6”并点击进入。 4. 进入Hadoop-2.7.6的下载页面后,你会看到各种不同的下载选项,包括源码、二进制文件和签名校验等。选择你需要的下载选项,比如选择二进制文件下载。 5. 完成选择后,点击下载按钮,你的浏览器将开始下载Hadoop-2.7.6的文件。 6. 下载完成后,你可以在下载文件的存储位置找到刚才下载的Hadoop-2.7.6文件。 在下载Hadoop之前,确保你的计算机满足Hadoop的硬件和软件要求,并且你已经具备基本的Hadoop使用知识。下载Hadoop之后,你可以按照Hadoop官方文档中的指南进行安装和配置,开始使用Hadoop进行大规模数据处理。 总之,下载Hadoop-2.7.6只需要几个简单的步骤,你可以通过Hadoop官方网站找到并下载该版本的Hadoop文件。记得在下载之前确保满足硬件和软件要求,下载完成后,根据官方文档进行安装和配置,即可开始使用Hadoop进行分布式计算。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值