一、书上学习
1.hadoop下的文件操作命令
命令格式:hadoop fs -cmd <args>
如 目录创建:hadoop fs -mkdir /user/chen
文件上传:hadoop fs -put filename.txt
上传文件到hdfs:hadoop dfs -put filename newfilename
查看hdfs下的某个文件:hadoop dfs -cat 文件名
将hdfs上的文件复制到本地系统:hadoop dfs -get 文件名 新文件名
删除hdfs下文档:hadoop dfs -rmr 文件名
清空回收站:hadoop fs -expunge
更改文件副本系数:hadoop fs -setrep -w 3 -R path
创建一个0字节的空文件:hadoop fs -touchz pathname
2.管理与更新
hdfs基本统计信息:hadoop dfsadmin -report
安全模式退出:hadoop dfsadmin -safemode leave
进入:hadoop dfsadmin -safemode enter
负载均衡:start-balancer.sh
二、命令笔记
1.start-all.sh/stop-all.sh在/usr/local/hadoop/sbin下(因人而异)
2.其他系统配置文件在/usr/local/hadoop/etc/hadoop下(因人而异)
3.hadoop namenode -format格式化出错:
解决:创建namenode和datanode对应的目录,分别在core-site.xml/core-site.xml 文件中,并更改文件操作权限
sudo chmod -R 775 you_datanode_path
sudo chmod -R 755 you_namenode_path
4.执行start-all.sh时报错:
ssh -o StrictHostKeyChecking=no 192.168.0.xxx
5.装完hadoop单机模式以后运行自带的wordcount频繁报错:
(1).org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /input/file1.txt._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1). There are 0 datanode(s) running and no node(s) are excluded in this operation.
at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget4NewBlock(BlockManager.java:1550)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getNewBlockTargets(FSNamesystem.java:3110)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:3034)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:723)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:492)
报错问题解析:命令行输入jps查看hadoop已启动的服务:
hadoop@localhost:/usr/local/hadoop/input$ jps
13001 Jps
12686 NodeManager
12551 ResourceManager
12386 SecondaryNameNode
12028 NameNode
只有五个,少了一个datanode
百度尝试单独启动datanode服务:
先进入执行目录下:
cd /usr/local/hadoop/sbin
再启动datanode服务:
hadoop-daemon.sh start datanode
执行以后再次执行jps,结果依旧是5个,没有datanode!!!
再次百度,找到一个问题:
datanode配置的目录hdfs-site.xml,里面有一段是指定datanode存放目录的,
<property>
<name>dfs.data.dir</name>
<value>/home/hadoop/data</value>
</property>
这部分必须指定,然后保存,退出
执行 chown -R hadoop:hadoop /usr/local/hadoop/hdfs/data
再次执行启动datanode的服务,成功!!!
这次启动了6个:
15606 Jps
14783 ResourceManager
14919 NodeManager
14256 NameNode
15528 DataNode
14617 SecondaryNameNode
然后执行编译命令,当然前提是要再hdfs服务器中创建了命令最后指定的两个目录:hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar wordcount /input/ /output
创建目录命令:hadoop fs -mkdir /input
然后是向目录中传文件:hadoop fs -put /input/* /input
然后是浏览传上去的文件:hadoop fs -ls /input
如果目录建错了 就删除它:hadoop fs -mv -r /input
最后的运行:
hdfs dfs -cat /output/*