2

我使用一个包含 16 个节点的 hadoop(1.2.0 版)集群,一个具有公共 IP(主)和 15 个通过专用网络(从)连接。

是否可以使用远程服务器(除了这 16 个节点)来存储映射器的输出?问题是节点在映射阶段的磁盘空间不足,我无法再压缩映射输出。

我知道mapred.local.dirinmapred-site.xml用于设置存储 tmp 文件的目录的逗号分隔列表。理想情况下,我希望在远程服务器上有一个本地目录(默认目录)和一个目录。当本地磁盘填满时,我想使用远程磁盘。

4

2 回答 2

3

我对此不太确定,但根据链接(http://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml)它说那:

本地目录是 MapReduce 存储中间数据文件的目录。可能是不同设备上以逗号分隔的目录列表,以便传播磁盘 i/o。不存在的目录将被忽略。

还有一些其他的属性,你应该检查一下。这些可能会有所帮助:

  1. mapreduce.tasktracker.local.dir.minspacestart:如果 mapreduce.cluster.local.dir 中的空间低于此,则不要要求更多任务。以字节为单位的值

  2. mapreduce.tasktracker.local.dir.minspacekill:如果 mapreduce.cluster.local.dir 中的空间低于此,则在所有当前任务完成并清理之前不要询问更多任务。另外,为了保存我们正在运行的其余任务,杀死其中一个,清理一些空间。从 reduce 任务开始,然后继续完成最少的任务。以字节为单位的值。

于 2014-10-30T10:54:05.603 回答
0

解决方案是使用iSCSI 技术。一位技术人员帮助我们实现了这一目标,所以很遗憾,我无法提供更多细节。

/mnt/disk我们将远程磁盘挂载到每个从节点的本地路径 ( ),并在tmp那里创建一个文件,rwx为所有用户提供权限。

然后,我们更改了$HADOOP_HOME/conf/mapred-site.xml文件并添加了属性:

<property>
    <name>mapred.local.dir</name>
    <value>/mnt/disk/tmp</value>
</property>

最初,我们对该属性有两个逗号分隔的值,第一个是默认值,但它仍然没有按预期工作(我们仍然得到一些“设备上没有剩余空间”的错误)。所以我们只留下了一个值。

于 2014-11-11T10:55:22.877 回答