FS Shell命令与JAVA实现操作HDFS文件
2018-01-08 22:41
946 查看
HDFS Shell命令
创建目录shell>hadoop fs –mkdir /user
列表
shell>hadoop fs –ls /
查看文件内容
shell>hadoop fs –cat /input/file.txt
上传文件
shell>hadoop fs –put 本地文件 远程目录
获取文件
shell> hadoop fs –get 远程文件 本地目录
移动文件
shell>hadoop fs –mv远程文件1 … 远程文件n 远程目录
复制文件
shell>hadoop fs –cp 远程文件1 … 远程文件n 远程目录
删除文件
shell>hadoop fs –rmr 目录/文件
测试文件命令
文件是否存在
shell>hadoop fs –test –e 文件 // 存在返回0
文件是否0字节
shell>hadoop fs –test –z 文件 //是0返回0
文件是否为目录
shell>hadoop fs –test –d 文件 //是目录返回1,否则返回0
显示目录中所有文件大小
shell>hadoop fs –du 目录/文件 //目录统计总大小,文件统计大小
清空回收站
shell>hadoop fs -expunge
JAVA操作HDFS的API
[b]hadoop文件系统API说明与编程步骤[/b]Hadoop提供的文件系统的API
1、 Configuration 类(org.apache.hadoop.conf包):封装了一个客户端或服务器的配置文件
Configuration():
默认加载core-default.xml,该配置文件设置从本地文件读取。 默认也会加载自定义的core-site.xml,设置配置文件从hdfs中读取,但是此文件需要放到 eclipse的 src目录,系统也会自动读取。最好也放log4j.properties
注:如果其它的配置文件如hdfs-site.xml,mapred-site.xml需要手动加载读取,记载方法是conf.addResource(“hdfs-site.xml”)格式。如果单独改变参数,conf.set(参数名,值)
2、 IOUtils类(org.apache.hadoop.io包):Hadoop提供的IO工具类
copyBytes(InputStream 输入流, OutputStream 输出流, int 缓存大小, boolean 是否关闭输入输出流):从输入流中读取数据到输出流,关闭输入输出流也可以使用IOUtils工具提供的closeStream(in)方法来关闭。
3、Path类(org.apache.hadoop.fs):一个文件被视为Path对象,该对象由文件的URI实例化。
Path(String uri):构建一个path对象
4、FileSystem类(org.apache.hadoop.fs包):代表一个文件系统,可以对文件进行操作。
static FileSystem get(Configuration conf):创建一个带有配置对象conf的FileSystem对象 static FileSystem get(URI uri, Configuration conf):创建带有URI和Conf的FileSystem对象 注:如果在uri中指定hdfs的前缀,那么就不需要在eclipse中加载core-site.xml文件了。
例:
FileSystem.get(URI.create(“hdfs://hfbin1:9000”),conf) InputStream open(path path):打开一个文件作为输入字节流 FSDataOutputStream create(Path path):创建一个文件,返回值是一个输出流。 void copyFromLocalFile(Path 本地文件,Path hdfs目录):从本地上传到hdfs copyToLocalFil e(Path hdfs文件,Path hdfs文件) boolean delete(Path path,Boolean 是否递归删除):删除文件/目录,通常参数2为true boolean rename(path from, path to):重命名,等价于fs shell命令的mv FileStatus getFileStatus(Path f):查询文件的详细信息,包括大小,权限,块大小等。 FileStatus[] listStatus(Path f):列出目录的内容,返回文件的详细信息数组。
5、FileStatus类():代表文件的详细信息
文件全路径: fileStatus.getPath() 文件块大小: fileStatus.getBlockSize() 文件长度: fileStatus.getLen() 副本数量: fileStatus.getReplication() 用户: fileStatus.getOwner() 用户组: fileStatus.getGroup() 权限: fileStatus.getPermission().toString()
6、java.net.URI
create(String prefix):创建一个带有prefix前缀的uri对象
使用FileSystem API编程步骤
1、 获取Configuration对象
Configuration conf = new Configuration(); //默认加载core-default.xml //conf.addResource("core-site.xml"); //默认从eclipse的src加载core-site.xml(这个文件可以到hadoop里面配置文件copy出来) //conf.set(“fs.defaultFS”, “hdfs://hfbin1:9000/”); //也可以这么写不需要加载
2、 获取文件系统的实例FileSystem对象
FileSystem fs = FileSystem.get(conf); // FileSystem.get(URI.create("hdfs://hfbin1:9000"), conf);//如果复制core-site.xml到src下了,需要的路径时不需要指定前缀,若core-site.xml没有加到src下则需要前缀。
3、 使用FileSystem对象操作文件
打开 open 创建 create 上传 copyFromLocalFile 下载 copyToLocalFile 删除 delelte 重命名 rename 文件详细信息 getFileStatus
[b]使用hadoop提供的文件系统API操作数据(读增删改名复制和文件详细信息)[/b]
读取文件内容打印在控制台:
package cn.hfbin; import java.io.IOException; import java.io.InputStream; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IOUtils; public class FileSystemCat { public static void main(String[] args) { //1、获取Configuration对象 Configuration conf = new Configuration(); //conf.addResource("core-site.xml");//已经自动从本地src目录加了。 InputStream in = null; try { //2、获取文件系统的实例FileSystem对象 //FileSystem fs = FileSystem.get(URI.create("hdfs://node1:9000"), conf);//不需要core-site.xml制定前缀 FileSystem fs = FileSystem.get(conf);//需要core-site.xml制定前缀 //3、使用FileSystem对象操作文件:打开一个文件作为输入字节流 in = fs.open(new Path("/music/music1.txt")); //例如:/input2/file4.txt IOUtils.copyBytes(in, System.out, 4096, false); } catch (IOException e) { e.printStackTrace(); } finally { IOUtils.closeStream(in); } } }
都是按照步骤来操作的上面都有备注,在这里我就另外说一下IOUtils.copyBytes()方法参数的意思:
第一个参数 in: 是FSDataInputStream类的对象,是有关读取文件的类,也就是所谓“输入流” 第二个参数 out: 是FSDataOutputStream类的对象,是有关文件写入的类,也就是“输出流”(上面我是使用Sys 4000 tem.out将内容在控制台输出) 第三个参数 4096 表示用来拷贝的buffer大小(buffer是缓冲区) 第四个参数 false 表明拷贝完成后我们并不关闭拷贝源可拷贝目的地
创建文件并将Hello World写进文件中
public class FileSystemCreate { public static void main(String[] args) throws IOException { Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); String filename = "/input2/file.txt"; FSDataOutputStream outputStream = fs.create(new Path(filename));//创建一个文件 InputStream in = new ByteArrayInputStream("Hello World".getBytes("utf-8")); IOUtils.copyBytes(in, outputStream, 4096, true); } }
将本文件上传到hdfs
public class FileSystemCopy { public static void main(String[] args) throws IOException { Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); fs.copyFromLocalFile(new Path("/home/hduser/file/file1"), new Path("/output"));//从本地上传到hdfs (第一个参数是本地路径,第二个参数是hdf文件路径) } }
删除一个文件
public class FileSystemDelete { public static void main(String[] args) throws IOException { String uri="/input/file1"; Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); Path f=new Path(uri); fs.delete(f,true); }
重命名/移动文件
public class FileSystemRename { public static void main(String[] args) throws IOException { String fromFile="/input2/file1";// String toFile="/input2/file1new";// Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); Path fromPath=new Path(fromFile); Path toPath=new Path(toFile); fs.rename(fromPath, toPath); } }
获取文件信息
public class FileSystemGetStatus { public static void main(String[] args) throws IOException { String uri=args[0];//如:/input2/file1.txt Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); Path f=new Path(uri); FileStatus stat=fs.getFileStatus(f); System.out.println("文件路径:"+stat.getPath()); System.out.println("文件块大小:"+stat.getBlockSize()); System.out.println("文件大小:"+stat.getLen()); System.out.println("副本数量:"+stat.getReplication()); System.out.println("用户:"+stat.getOwner()); System.out.println("用户组:"+stat.getGroup()); System.out.println("权限:"+stat.getPermission().toString()); } }
到这就讲解完毕了!!!感谢各位老铁的阅读
相关文章推荐
- java操作hadoop hdfs,实现文件上传下载demo
- Java实现HDFS文件操作工具类
- HDFS的文件操作(Java代码实现)
- java实现dos窗口文件操作命令2(远程操作)
- VM虚拟机上安装Eclipse和Hadoop上文件命令操作的java代码实现
- java实现对hdfs文件系统的上传,下载,删除,创建文件夹的操作演示
- JAVA实现:将文件从本地上传到HDFS上、从HDFS上读取等操作
- Java实现远程HDFS的文件操作(新建、上传、下载、删除)
- HDFS上的常用文件操作java code实现
- JAVA API 实现hdfs文件操作
- 使用java实现dos窗口文件操作命令(复制,删除,列出文件目录)
- java操作hdfs,实现文件上传、下载以及查看当前文件夹下所有文件
- 调用系统命令实现删除文件的操作,java调用系统命令实现删除文件的操作
- Java实现远程HDFS的文件操作(新建、上传、下载、删除)
- Hadoop HDFS文件操作 Java实现类
- Hadoop HDFS文件操作 Java实现类
- Java I/O内存映射方法实现对大文件的内存操作
- java速度入四.文件的基本操作及猜数字游戏的实现
- Linux 下几个文件操作命令的代码实现(转载)
- [zt] Linux 下几个文件操作命令的代码实现