首先博主用的64位ubuntu,hadoop官方只提供32位版本,这样的话启动本地库无法兼容,需要自己编译为64位版本,或下载别人编译好的64位版本。
下载好需要在etc/hadoop目录下改动以下几个配置
其中hadoop-env.sh中需要指定JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_75
core-site.xml配置
<configuration> <property> <name>fs.default.name</name> <value>hdfs://xiao:9000/</value> </property> <property> <name>hadoop.native.lib</name> <value>true</value> <description>Should native hadoop libraries, if present, be used.</description> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/xiao/download/hadoop-2.4.0/tmp/</value> </property> </configuration>
hdfs-site.xml配置
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
mapred-site.xml配置
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
yarn-site.xml配置
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>xiao</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> </configuration>
配置好后启动需要关闭防火墙以及安装好ssh
sudo apt-get update
sudo apt-get install openssh-server
然后格式化namenode
hadoop namenode -format
然后切换到sbin目录下启动
start-dfs.sh
start-yarn.sh
查看目录下文件
hadoop fs -ls hdfs://xiao:9000/
拷贝本地文件到hdfs下
hadoop fs -put a.txt hdfs://xiao:9000/
这一步楼主遇到一个故障
尝试了网上各种办法无效。
看了下logs里面的日志其中datanode日志无错误,namenode日志报上述错误,可见跟datanode无关,用命令查看datanode状态
按照report的数据DFS还剩下(541.63 MB)的大小,应该是可以创建的,但是抛出了这个异常,肯定是对DATANODE的剩余最小容量做了限制。
查了一下HADOOP 2.2.0的源码,org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicyDefault的方法isGoodTarget中,会对DATANODE的剩余容量进行判断:
long remaining = node.getRemaining() - (node.getBlocksScheduled() * blockSize); // check the remaining capacity of the target machine if (blockSize* HdfsConstants.MIN_BLOCKS_FOR_WRITE>remaining) { if(LOG.isDebugEnabled()) { threadLocalBuilder.get().append(node.toString()).append(": ") .append("Node ").append(NodeBase.getPath(node)) .append(" is not chosen because the node does not have enough space "); } return false; }
然后博主清空了下目录里面的文件,剩余大小为900多M,再执行下命令,成功。