基本文件命令:html
格式为:hadoop fs -cmd <args>java
cmd的命名一般与unix对应的命令名相同。例如,文件列表命令: hadoop fs -lsapache
一、添加目录和文件编程
HDFS有一个默认的工做目录 /user/$USER,其中$USER是你的登陆用户名。不过目录不会自动创建,咱们如今用mkdir创建它,我使用的是chen做为用户名。oop
hadoop fs -mkdir /user/chenspa
(hadoop的mkdir命令会自动建立父目录,相似于带-p的unix命令)unix
咱们如今放本地文件系统的一个文件进去。code
hadoop fs -put example.txt .htm
最后一个参数是句点,至关于放入了默认的工做目录,等价于 hadoop fs -put example.txt /user/chen对象
当你把文件放入HDFS上后,你就能够运行Hadoop程序来处理它。
二、检索文件
get命令与put命令相反,它从HDFS复制文件回到本地文件系统。
hadoop fs -get example.txt .
复制到本地的当前工做目录中。
另外一种是显示数据,用cat
hadoop fs -cat example.txt
三、删除文件
rm命令
hadoop fs -rm example.txt
也能够用来删除空目录
编程读写HDFS
利用HDFS给咱们提供的API,咱们一样能够访问它。
在Hadoop中用做文件操做的主类位于org.apache.hadoop.fs软件包中。包括常见的open、read、write、close。Hadoop文件的API起点是FileSystem类,这是一个与文件系统交互的抽象类,咱们经过调用factory的方法FileSystem.get(Configuration conf)来取得所需的FileSystem实例,以下咱们能够得到与HDFS接口的FileSystem对象:
Configuration conf = new Configuration();
FileSystem hdfs = FileSystem.get(conf);//得到HDFS的FileSystem对象
若是咱们要实现HDFS与本地文件系统的交互,咱们还须要获取本地文件系统的FileSystem对象
FileSystem local = FileSystem.getLocal(conf);//得到本地文件系统的FileSystem对象
如下代码讲解了一个例子,咱们开发一个PutMerge程序,用于合并本地文件后放入HDFS,由于大文件HDFS处理起来比较容易,因此这个程序常常会在之后的开发中用到
import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class PutMerge { public static void main(String[] args) throws IOException { Configuration conf = new Configuration(); FileSystem hdfs =FileSystem.get(conf); //得到HDFS文件系统的对象 FileSystem local = FileSystem.getLocal(conf);//得到本地文件系统的对象 Path inputDir = new Path(args[0]);//设定输入目录 Path hdfsFile = new Path(args[1]);//设定输出目录 try{ FileStatus[] inputFiles = local.listStatus(inputDir);//FileStatus的listStatus()方法得到一个目录中的文件列表 FSDataOutputStream out = hdfs.create(hdfsFile);//生成HDFS输出流 for(int i = 0; i < inputFiles.length; i ++){ System.out.println(inputFiles[i].getPath().getName()); FSDataInputStream in = local.open(inputFiles[i].getPath());//打开本地输入流 byte[] buffer = new byte[256]; int bytesRead = 0; while((bytesRead = in.read(buffer))>0){ out.write(buffer,0,bytesRead);//经过一个循环来写入 } in.close(); } out.close(); }catch (IOException e) { e.printStackTrace(); } } |
Hadoop:第一个程序操做HDFS