我有5台Linux机器集群。有3个数据节点和一个主节点。目前,每个数据节点上有大约50%的hdfs存储空间可用。但是我运行了mapreduce作业,它失败并出现以下错误
2017-08-21 17:58:47,627 WARN org.apache.hadoop.hdfs.DFSClient: Error Recovery for blk_6835454799524976171_3615612 bad datanode[0] 10.11.1.42:50010
2017-08-21 17:58:47,628 WARN org.apache.hadoop.hdfs.DFSClient: Error Recovery for block blk_6835454799524976171_3615612 in pipeline 10.11.1.42:50010, 10.11.1.43:50010: bad datanode 10.11.1.42:50010
2017-08-21 17:58:51,785 ERROR org.apache.hadoop.mapred.Child: Error in syncLogs: java.io.IOException: No space left on device
在每个系统df -h
上提供以下信息
Filesystem Size Used Avail Use% Mounted on
devtmpfs 5.9G 0 5.9G 0% /dev
tmpfs 5.9G 84K 5.9G 1% /dev/shm
tmpfs 5.9G 9.1M 5.9G 1% /run
tmpfs 5.9G 0 5.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 50G 6.8G 44G 14% /
/dev/sdb 1.8T 535G 1.2T 31% /mnt/11fd6fcc-1f87-4f1e-a53c-54cc7117759c
/dev/mapper/centos-home 412G 155G 59M 100% /home
/dev/sda1 494M 348M 147M 71% /boot
tmpfs 1.2G 16K 1.2G 1% /run/user/42
tmpfs 1.2G 0 1.2G 0% /run/user/1000
从上面可以清楚地看出,我的sdb dicsk(SDD)仅使用了31%但是centos-home是100%。当有足够的HDFS可用时,hadoop在mapreduce作业中使用本地文件系统吗?问题出在哪儿?我在谷歌搜索并发现了很多这样的问题,但没有人能够解决我的问题。
答案 0 :(得分:0)
syncLogs
不使用HDFS,它会写入hadoop.log.dir
如果您正在使用MapReduce,请在/etc/hadoop/conf/taskcontroller.cfg中查找hadoop.log.dir
的值。
如果您正在使用YARN,请在yarn-site.xml中查找yarn.nodemanager.log-dirs
的值。
其中一个应该指向您编写日志的位置。一旦你弄清楚哪个文件系统有问题,你可以从那里释放空间。
要记住的另一件事是你可以得到"设备上没有空间"如果你已经耗尽了磁盘上的inode。 df -i
会显示此信息。