当我使用m1.large作为jobflow创建的hadoop示例的示例类型来运行amazonemr作业时,出现了一个错误“设备上没有剩余空间”。由于m1.large示例的容量应该是420gb*2(根据:ec2示例类型),因此该作业最多生成约10gb的数据。我很困惑,仅仅10gb的数据怎么会导致“磁盘空间满了”这样的消息。我知道,如果我们已经完全耗尽了文件系统上允许的inode总数,也可能会产生这种错误,但这是一个相当大的数字,总计数百万个,我非常确定我的工作不会产生那么多文件。我已经看到,当我尝试独立于m1.large type创建一个ec2示例时,默认情况下,它会为它分配一个8gb的根卷。这是否也是在emr中提供示例的原因呢?那么,大小为420gb的磁盘何时分配给示例?
另外,这里是“df-hi”和“mount”的输出
$ df -hi
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda1 640K 100K 541K 16% /
tmpfs 932K 3 932K 1% /lib/init/rw
udev 930K 454 929K 1% /dev
tmpfs 932K 3 932K 1% /dev/shm
ip-10-182-182-151.ec2.internal:/mapr
100G 50G 50G 50% /mapr
$ mount
/dev/xvda1 on / type ext3 (rw,noatime)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/var/run on /run type none (rw,bind)
/var/lock on /run/lock type none (rw,bind)
/dev/shm on /run/shm type none (rw,bind)
rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
ip-10-182-182-151.ec2.internal:/mapr on /mapr type nfs (rw,addr=10.182.182.151)
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda1 202:1 0 10G 0 disk /
xvdb 202:16 0 420G 0 disk
xvdc 202:32 0 420G 0 disk
1条答案
按热度按时间e4yzc0pl1#
在@slayedbylucifer的帮助下,我发现了一个问题:默认情况下,集群上的hdfs可以使用完整的磁盘空间。因此,机器上安装了默认的10gb空间,可供本地使用。有一个选项叫做
--mfs-percentage
它可以用来(在使用hadoop的mapr发行版时)指定本地文件系统和hdfs之间的磁盘空间分割。它在上装载本地文件系统配额/var/tmp
. 确保选项mapred.local.dir
设置为内部目录/var/tmp
因为tasktracker尝试的所有日志都在这里,对于大任务来说,日志的大小可能很大。我的案例中的日志记录导致了磁盘空间错误。我设置了--mfs-percentage
到60,并能够成功运行该作业。