我使用一个16个节点的hadoop(版本1.2.0)群集,一个带有公共IP(主站),15个通过专用网络(从站)连接。
是否可以使用远程服务器(除了这16个节点)来存储映射器的输出?问题是在映射阶段节点的磁盘空间不足我不能再压缩地图输出了。
我知道mapred.local.dir
中的mapred-site.xml
用于设置以逗号分隔的dirs文件列表,其中存储了tmp文件。理想情况下,我希望在远程服务器上有一个本地目录(默认值)和一个目录。当本地磁盘填满时,我想使用远程磁盘。
答案 0 :(得分:3)
我对此并不十分肯定,但根据链接(http://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml),它说:
本地目录是MapReduce存储中间数据文件的目录。 可能是以逗号分隔的目录中不同设备上的目录 为了传播磁盘i / o 。不存在的目录将被忽略。
还有一些其他属性你应该检查。这些可能会有所帮助:
mapreduce.tasktracker.local.dir.minspacestart :如果mapreduce.cluster.local.dir中的空格属于此范围,则不要求更多任务。以字节为单位的值
- 醇>
mapreduce.tasktracker.local.dir.minspacekill :如果mapreduce.cluster.local.dir中的空格在此下面,请不要询问更多任务,直到所有当前任务完成并清理干净。另外,为了保存我们运行的其余任务,杀死其中一个,以清理一些空间。从reduce任务开始,然后选择那些已完成最少的任务。以字节为单位的值。
答案 1 :(得分:0)
解决方案是使用iSCSI technology。技术人员帮助我们实现了这一点,所以不幸的是我无法提供更多细节。
我们将远程磁盘安装到每个从属节点的本地路径(/mnt/disk
),并在那里创建了tmp
文件,所有用户都有rwx
个权限。
然后,我们更改了$HADOOP_HOME/conf/mapred-site.xml
文件并添加了属性:
<property>
<name>mapred.local.dir</name>
<value>/mnt/disk/tmp</value>
</property>
最初,我们为该属性设置了两个以逗号分隔的值,第一个是默认值,但它仍然没有按预期工作(我们仍然有一些&#34;设备上没有剩余空间& #34;错误)。所以我们只剩下一个值。