hadoop学习(三)HDFS常用命令以及java操作HDFS
一、HDFS的常用命令
1、查看根目录下的信息:./hadoop dfs -ls
2、查看根目录下的in目录中的内容:./hadoop dfs -ls in或者./hadoop dfs -ls ./in
3、删除文件:./hadoop dfs -rmr 文件名
4、上传文件到HDFS:./hadoop dfs -put 系统目录下的文件 hadoop目录
5、将HDFS的文件复制到本地:./hadoop dfs -get haddo目录 本地目录
6、查看HDFS下某个文件的内容:./hadoop dfs -cat 文件名
7、查看HDFS基本统计信息:./hadoop dfsadmin -report
8、进入安全模式:./hadoop dfsadmin -safemode enter
9、退出安全模式:./hadoop dfsadmin -safemode leave
10、用hdfs(管理员)用户创建目录:sudo
-u hdfs hadoop fs -
mkdir
/user/neu
11、用hdfs(管理员)用户给目录分配权限:sudo
-u hdfs hadoop fs -
chown
neu
/user/neu
注意:用./hadoop dfs -ls命令的时候,有时候会出现一个“ls:Cannot access .: No such file or directory.”的错误,讲命令改为 ./hadoop dfs -ls / 即可解决。
二、java操作HDFS文件系统
java操作HDFS文件系统,有两种方式,一种是直接在Linux上装eclipse,装插件,配置好环境,直接执行;另外一种是将java类打成jar包,添加到HDFS系统中去执行。此处要说的是第二种方式,使用的hadoop版本是0.20.2,执行的操作是添加文件和查看文件最后修改时间,具体步骤如下:
1、创建一个java工程,将hadoop-0.20.2目录下的hadoop-0.20.2-core.jar和hadoop-0.20.2/lib/目录下commons-logging-1.0.4.jar添加java工程中。
2、创建两个java类,分别如下:
1 package com.gao.example; 2 3 import java.io.IOException; 4 5 import org.apache.hadoop.conf.Configuration; 6 import org.apache.hadoop.fs.FileStatus; 7 import org.apache.hadoop.fs.FileSystem; 8 import org.apache.hadoop.fs.Path; 9 10 /** 11 * @author gaojiang 12 * 13 */ 14 public class FileTime { 15 16 /** 17 * @param args 18 * @throws IOException 19 */ 20 public static void main(String[] args) throws IOException { 21 // TODO Auto-generated method stub 22 Configuration conf = new Configuration(); 23 FileSystem hdfs = FileSystem.get(conf); 24 Path path = new Path("./in/test1.txt"); 25 FileStatus filestatus = hdfs.getFileStatus(path); 26 long time = filestatus.getModificationTime(); 27 System.out.println("time1 is "+time); 28 29 Path path2 = new Path("./mkdir.jar"); 30 FileStatus filestatus2 = hdfs.getFileStatus(path2); 31 long time2 = filestatus2.getModificationTime(); 32 System.out.println("time2 is "+time2); 33 } 34 35 }
1 /** 2 * 3 */ 4 package com.gao.example; 5 6 import java.io.IOException; 7 8 import org.apache.hadoop.conf.Configuration; 9 import org.apache.hadoop.fs.FSDataOutputStream; 10 import org.apache.hadoop.fs.FileSystem; 11 import org.apache.hadoop.fs.Path; 12 13 /** 14 * @author gaojiang 15 * 16 */ 17 public class Mkdir { 18 19 /** 20 * @param args 21 * @throws IOException 22 */ 23 public static void main(String[] args) throws IOException { 24 // TODO Auto-generated method stub 25 Configuration conf = new Configuration(); 26 byte [] buff="hello word!".getBytes(); 27 FileSystem hdfs =FileSystem.get(conf); 28 Path dfs = new Path("./test"); 29 FSDataOutputStream out = hdfs.create(dfs); 30 out.write(buff,0,buff.length); 31 System.out.println("创建完毕"); 32 } 33 34 }
3、将工程打包,这里可以打成Runnable Jar file或者JAR file,打成Runnable的,只能以一个类作为入口类,打成JAR file,可以指定要执行的类名。
4、使用bin/hadoop dfs -put命令将打好的JAR包添加到HDFS系统中,使用bin/hadooop jar 包名 命令即可运行Runnable Jar,如果是打的JAR file,还需要在包名后面明确指出类名的完整路径。
5、需要注意的是,在java代码中创建Hadoop文件系统下的文件时,需要指出./test,而炼数成金视频中讲的只是/test,安装这样的操作去做,坑死我了。。。