为了开发和调试方便,用VirtualBox安装了一个Ubuntu 12.04的虚拟机,在里面运行Hive和Hadoop。
使用过程中发现了一个问题,在Hive中跑一些query,一段时间后,虚拟磁盘空间增长很快,达到几十个G。虚拟磁盘本身配置为动态增长模式,但开发机系统本身的物理磁盘空间有限,最后虚拟磁盘无法增长空间导致虚拟磁盘空间不足,无法继续在Hive中跑query。
一个解决方案是删除HDFS数据所在的目录,使用ZeroFree工具将虚拟磁盘中的空闲块清零,之后再用VirtualBox自带的VBoxManage工具压缩虚拟磁盘,节省占用空间。具体操作可参考这篇文章:http://dantwining.co.uk/2011/07/18/how-to-shrink-a-dynamically-expanding-guest-virtualbox-image/。然后进入虚拟机重新格式化HDFS。但这个方案比较耗时,且稍显繁琐。
采取的方案是:创建一个新的虚拟磁盘,专门存放HDFS数据。将此盘加为虚拟机的第二块硬盘。用gparted工具对此盘分区并格式化为EXT4文件系统。将此盘copy一份备用。修改/etc/fstab将此盘mount到一个指定的目录下,比如~/hdfsdata。设置hadoop core-site.xml中的hadoop.tmp.dir属性为~/hdfsdata。修改目录的访问权限(chmod a+rwx ~/hdfsdata),否则format namenode会失败。格式化HDFS,运行Hive和Hadoop。一段时间后,如果此盘空间增长过大,就用备份盘覆盖此盘,重新格式化HDFS,即可继续使用。