`
standalone
  • 浏览: 609817 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

HDFS中不起作用的buffer size

阅读更多
/**
     * Create a new output stream to the given DataNode.
     * @see ClientProtocol#create(String, FsPermission, String, boolean, short, long)
     */
    DFSOutputStream(String src, FsPermission masked, boolean overwrite,
        short replication, long blockSize, Progressable progress,
        int buffersize, int bytesPerChecksum) throws IOException {
      this(src, blockSize, progress, bytesPerChecksum);

      computePacketChunkSize(writePacketSize, bytesPerChecksum);

      try {
        namenode.create(
            src, masked, clientName, overwrite, replication, blockSize);
      } catch(RemoteException re) {
        throw re.unwrapRemoteException(AccessControlException.class,
                                       QuotaExceededException.class);
      }
      streamer.start();
    }
  
    /**
     * Create a new output stream to the given DataNode.
     * @see ClientProtocol#create(String, FsPermission, String, boolean, short, long)
     */
    DFSOutputStream(String src, int buffersize, Progressable progress,
        LocatedBlock lastBlock, FileStatus stat,
        int bytesPerChecksum) throws IOException {
      this(src, stat.getBlockSize(), progress, bytesPerChecksum);
      initialFileSize = stat.getLen(); // length of file when opened

      //
      // The last partial block of the file has to be filled.
      //
      if (lastBlock != null) {
        block = lastBlock.getBlock();
        long usedInLastBlock = stat.getLen() % blockSize;
        int freeInLastBlock = (int)(blockSize - usedInLastBlock);

        // calculate the amount of free space in the pre-existing 
        // last crc chunk
        int usedInCksum = (int)(stat.getLen() % bytesPerChecksum);
        int freeInCksum = bytesPerChecksum - usedInCksum;

        // if there is space in the last block, then we have to 
        // append to that block
        if (freeInLastBlock > blockSize) {
          throw new IOException("The last block for file " + 
                                src + " is full.");
        }

        // indicate that we are appending to an existing block
        bytesCurBlock = lastBlock.getBlockSize();

        if (usedInCksum > 0 && freeInCksum > 0) {
          // if there is space in the last partial chunk, then 
          // setup in such a way that the next packet will have only 
          // one chunk that fills up the partial chunk.
          //
          computePacketChunkSize(0, freeInCksum);
          resetChecksumChunk(freeInCksum);
          this.appendChunk = true;
        } else {
          // if the remaining space in the block is smaller than 
          // that expected size of of a packet, then create 
          // smaller size packet.
          //
          computePacketChunkSize(Math.min(writePacketSize, freeInLastBlock), 
                                 bytesPerChecksum);
        }

        // setup pipeline to append to the last block XXX retries??
        nodes = lastBlock.getLocations();
        errorIndex = -1;   // no errors yet.
        if (nodes.length < 1) {
          throw new IOException("Unable to retrieve blocks locations " +
                                " for last block " + block +
                                "of file " + src);
                        
        }
        processDatanodeError(true, true);
        streamer.start();
      }
      else {
        computePacketChunkSize(writePacketSize, bytesPerChecksum);
        streamer.start();
      }
    }

 看上面代码, 没看到传进到的bufferSize最后哪里用到了。这样以来DFSClient create出来的文件并没有保存传入的bufferSize参数。

分享到:
评论
1 楼 zhousheng29 2012-06-13  
是的,确实我也查看源码,也做了试验,没有起效果。看来只能自己实现了

相关推荐

    HDFS实验手册.pdf

    - **io.file.buffer.size**: 文件IO操作时使用的缓冲区大小,默认为131072字节。 ##### 2.2 `hdfs-site.xml`配置详解 `hdfs-site.xml`文件用于配置HDFS特有的属性,这些属性对于HDFS的运行至关重要。 - **dfs....

    5、HDFS API的RESTful风格-WebHDFS

    例如,`LISTSTATUS`用于列出目录内容,`OPEN`用于读取文件,`offset`用于指定读取文件的起始位置,`length`定义了要读取的数据长度,`buffersize`设置缓冲区大小,以及`noredirect`参数,用于控制是否将请求重定向到...

    HDFS存取实例(java)

    3. **打开输出流**:调用`FileSystem.create(Path path, FsPermission permission, boolean overwrite, int bufferSize, short replication, long blockSize, Progressable progress)`创建一个`FSDataOutputStream`...

    详细简单的hdfs java的api接口实现

    在HDFS中上传文件,我们需要创建一个`FileSystem`实例,然后使用`FileSystem.create()`方法。这个方法接受一个`Path`对象作为文件路径,并可配置一些参数,如缓冲区大小、权限等。例如: ```java Configuration ...

    3、HDFS的使用(读写、上传、下载、遍历、查找文件、整个目录拷贝、只拷贝文件、列出文件夹下文件、删除文件及目录、获取文件及文件

    - **文件上传**:使用`FileSystem.create(Path path, FsPermission permission, boolean overwrite, int bufferSize, short replication, long blockSize, Progressable progress)`创建输出流,然后写入数据。...

    hadoop HDFS增删改

    本文将根据提供的文档信息,深入探讨 HDFS 中涉及的增、删、改操作以及相关的配置参数。 #### 一、HDFS 基础配置 HDFS 的配置主要分为两部分:`hdfs-site.xml` 和 `core-site.xml`。这两个文件中包含了 HDFS 运行...

    HDFS 的读写数据流程:

    * IO_FILE_BUFFER_SIZE_KEY:文件缓存大小配置 * getDefaultReplication:默认副本因子配置 * getDefaultBlockSize:默认块大小配置 结论 HDFS的读写数据流程是其核心组件,通过NameNode和DataNode的交互来实现...

    Hadoop 三个配置文件的参数含义说明

    例如,`hadoop.logfile.size`定义了日志文件的最大大小,而`io.file.buffer.size`设置了读写操作的缓冲区大小,影响I/O性能。`io.compression.codecs`列出了支持的压缩算法,如DefaultCodec、GzipCodec等。 了解和...

    Hadoop大数据处理技术-java操作HDFS(实验报告完整版).doc

    1. **理解HDFS的角色**:掌握HDFS在Hadoop体系结构中的核心作用。 2. **熟练Shell命令**:能够通过Shell命令操作HDFS进行基本的数据管理。 3. **熟悉Java API**:掌握如何使用Java API进行HDFS的操作,包括文件的...

    配置文件配置文件配置文件

    总之,配置文件在IT系统中起着桥梁的作用,它们连接了底层硬件和上层服务,使系统能够根据需求和环境变化进行适应。对于Hadoop这样的大数据处理平台,`hdfs-site.xml`和`core-site.xml`的配置更是直接决定了系统的...

    hdfswriter.zip

    8. `bufferSize`:HDFS写入缓冲区大小,影响写入性能。 五、使用场景与最佳实践 1. 数据备份:定期将关系数据库的数据备份到HDFS,提高数据安全性。 2. 数据迁移:在不同HDFS集群间迁移大量数据,利用DataX的并发...

    hadoop-xml配置

    `dfs.blocksize`则是HDFS中每个数据块的大小,默认为128MB,可以根据实际数据规模进行调整。 转向`yarn-site.xml`,这是针对YARN(Yet Another Resource Negotiator)的配置文件。YARN是Hadoop的资源管理器,负责...

    hadoop面试题

    * core-site.xml:fs.defaultFSNameNode URI、io.file.buffer.size 等 * hdfs-site.xml:dfs.namenode.name.dir、dfs.namenode.hosts、dfs.blocksize 等 * yarn-site.xml:yarn.resourcemanager.address、yarn....

    Hadoop搭建的源代码.doc

    7. `dfs.stream-buffer-size`: 这个属性定义了Hadoop在读取或写入HDFS文件时使用的缓冲区大小,例如这里设置为131072字节,通常用于提高I/O性能。 除了上述配置,实际搭建过程中还需要考虑其他配置,例如`mapred-...

    Hadoop分布式部署配置文件

    - `core-site.xml`中的`fs.defaultFS`指定了HDFS的URL,`io.file.buffer.size`控制I/O缓冲区大小。 - `hdfs-site.xml`中的`dfs.replication`定义了默认的副本因子,`dfs.blocksize`设定默认的块大小。 - `yarn-...

    hadoopConf

    例如,`fs.defaultFS`属性指定了HDFS的名称节点地址,而`io.file.buffer.size`则控制了文件读写时的缓冲区大小。 总的来说,`hadoopConf`是一系列配置文件,它们共同决定了Hadoop集群的运行方式和性能表现。正确地...

    mapreduce开发优化文档

    - **io.file.buffer.size**:设置缓存大小,影响数据传输速度和内存消耗。推荐值为64KB(65536字节),有助于提高I/O操作效率。 - **dfs.balance.bandwidthPerSec**:限制HDFS平衡操作的最大网络带宽。默认值可能过...

    content.zip

    - **Buffer size:** 设置合适的缓冲区大小可以提高读写性能。 - **Record Compressors:** 如BZip2,适用于更高效的压缩,但会牺牲一些写入速度。 5. **SequenceFile与MapReduce** 在MapReduce作业中,...

Global site tag (gtag.js) - Google Analytics