Hadoop运行错误——could only be replicated to 0 nodes, instead of 1
今天下午配置伪分布式的Hadoop环境,直接将系统上的hadoop照搬下来,修改了master和slaves中的namenode和datanode和core-site.xml、hdfs-site.xml和mapred-site.xml文件相应的namenode配置,运行起来后报错:File /home/hadoop/data/tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1。
网上搜了N种方法,大部分说需要重新format tmp文件夹,但是没说这么做的原因。后来查看配置发现自己的设置的预留空间太大,tmp文件夹所在位置没有这么大的空间,修改配置后运行正常。其实这个错误的意思应该是说没有可用的datanode,造成这个原因的可能很多,可能是防火墙问题、原有tmp文件格式化版本问题等等。
hadoop配置中相关空间的配置有以下几个(本人用到的):
- core-site.xml
io.file.buffer.size:文件所对应的的缓存大小,这里设置的是131072(128K)
io.bytes.per.checksum:每个校验和文件的大小,这里设置的是2048(2K)
local.cache.size:缓存的容量,这个缓存是为了保存外部数据的,这里设置为默认值10737418240(10G)
fs.checkpoint.size:edit log的大小,当达到这个大小的时候进行检验,这里设置为16777216(16M)
- hdfs-site.xml
dfs.datanode.max.xcievers:该参数限制了datanode所允许同时执行的发送和接受任务的数量,缺省为256,这里设置为4096
dfs.block.size:block块大小,这里设置为268435456(256M)
dfs.balance.bandwidthPerSec:启动负载均衡的数据节点可利用带宽最大值,这里设置为10485760(10M)
dfs.datanode.du.reserved:每个卷预留的空闲空间数量,这里设置为1073741824(1G)
- mapred-site.xml
mapred.child.java.opts:启动task管理的子进程时的内存设置,这里设置为-Xmx512m
mapred.local.dir.minspacestart:如果mapred.local.dir空间小于这个值,datanode不申请task。如果mapreduce卡主,可以检查这个在值,这里设置为1073741824(1G)