我使用的hadoop(版本1.2.0)集群有16个节点,其中一个节点有一个公共ip(主节点),15个节点通过一个私有网络(从节点)连接。
是否可以使用远程服务器(除了这16个节点)来存储Map器的输出?问题是在Map阶段节点的磁盘空间不足,我无法再压缩Map输出。
我知道 mapred.local.dir
在 mapred-site.xml
用于设置存储tmp文件的目录的逗号分隔列表。理想情况下,我希望在远程服务器上有一个本地目录(默认目录)和一个目录。当本地磁盘填满时,我想使用远程磁盘。
2条答案
按热度按时间c7rzv4ha1#
我不是很确定,但根据链接(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中的空间落在下面,在当前所有任务完成并清理之前,不要询问更多任务。另外,要保存我们正在运行的其他任务,请杀死其中一个,以清理一些空间。从减少任务开始,然后选择完成最少的任务。以字节为单位的值。
mznpcxlj2#
解决方案是使用iscsi技术。一位技术人员帮助我们实现了这一点,所以不幸的是,我无法提供更多的细节。
我们将远程磁盘挂载到本地路径(
/mnt/disk
)并创建了一个tmp
在那里归档,用rwx
所有用户的特权。然后,我们换了房间
$HADOOP_HOME/conf/mapred-site.xml
文件并添加了属性:最初,我们有两个逗号分隔的属性值,第一个是默认值,但它仍然没有按预期工作(我们仍然得到一些“设备上没有剩余空间”的错误)。所以我们只留下一个值。