如何选择$ {mapred.local.dir}?

时间:2014-11-24 08:47:18

标签: hadoop dictionary mapreduce hadoop-streaming

如果我配置了几个$ {mapred.local.dir}目录来存储Map Task的即时结果,这些目录会挂载不同的磁盘。 我的问题是: 1. LocalDirAllocator.java是否用于管理$ {mapred.local.dir}目录?

2. getLocalPathForWrite()的方法LocalDirAllocator.java用于选择$ {mapred.local.dir}目录?

1 个答案:

答案 0 :(得分:1)

1. Whether LocalDirAllocator.java is used to manage ${mapred.local.dir} directories?

是的, tasktracker 使用LocalDirAllocator管理本地目录/磁盘以存储中间数据。(在解释中给出了分配空间的方式)

2.The method getLocalPathForWrite() of LocalDirAllocator.java is used to select a ${mapred.local.dir} directory?

LocalDirAllocator中有3个重载方法对应getLocalPathForWrite()。它们在磁盘集上循环(通过配置的dirs)并返回第一个有足够空间的完整路径。

说明来自java doc:LocalDirAllocator.java

  

用于磁盘分配的循环方案的实现   创建文件。它的工作方式是它跟踪什么磁盘   最后分配给文件写入。对于当前的请求,下一个   如果磁盘上的可用空间将分配磁盘集   磁盘足以容纳正在存在的文件   考虑创造。如果不能满足空间要求,   将尝试下一个磁盘,依此类推,直到找到磁盘为止   足够的能力。一旦识别出具有足够空间的磁盘,   检查完成以确保磁盘是可写的。还有   提供的API不会占用空间要求   考虑但只是检查所考虑的磁盘是否   可写(这应该用于文件大小不是的情况   已知apriori)。提供API以读取已创建的路径   早。该API通过扫描输入的所有磁盘来工作   路径名。此实现还提供了功能   每个JVM有多个分配器(每个独特功能一个)   或上下文,如mapred,dfs-client等)。它确保有   每个JVM每个上下文只有一个分配器实例。

注意:

  
      
  1. 上面提到的上下文实际上是Configuration类中定义的配置项,如" mapred.local.dir" (为此   我们想控制目录分配)。上下文字符串是   正是那些配置项。

  2.   
  3. 此实现未考虑磁盘在文件存在时变为只读或空间不足的情况   写入(磁盘在多个进程之间共享,所以   后一种情况很可能)。

         
        
    1. 在课堂实施中," Disk"被称为" Dir",它实际指向磁盘上已配置的目录   所有文件写/读分配的父级。
    2.   
  4.   

我不认为我们可以直接覆盖其行为,除非我们覆盖其家属的行为!