第一种、shell交互
例子:
1、 hdfs dfs -ls [-R] <args>
-R:递归列出目录所有内容
hdfs dfs -ls / :列出根目录的内容
2、hdfs dfs -put <localsrc> ... <dst> 上传文件
3、hdfs dfs -text <src> 或者 hdfs dfs -cat URI [URI ...] 查看文件内容
4、hdfs dfs -mkdir [-p] <paths> 创建文件夹
-p:自动创建父目录
5、hdfs dfs -rm [-f] [-r|-R] [-skipTrash] URI [URI ...] 删除文件
第二种、Java交互
package rdb.com.hadoop01;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
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;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Progressable;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/*
* Hadoop HDFS Java API 操作
*/
public class HDFSAPP {
public static final String HDFS_PATH="hdfs://192.168.44.183:8020";
FileSystem fileSystem = null;
Configuration configuration = null;
@Before
public void setUp()throws Exception{
configuration = new Configuration();
fileSystem = FileSystem.get(new URI(HDFS_PATH), configuration,"hadoop");
}
/**
* 创建文件夹
* @throws IOException
* @throws IllegalArgumentException
*/
@Test
public void mkdir() throws Exception{
//创建文件夹
fileSystem.mkdirs(new Path("/javaApi/test01"));
}
/**
* 创建文件
*@throws Exception
*/
@Test
public void create()throws Exception{
FSDataOutputStream outPut = fileSystem.create(new Path("/javaApi/test01/a.txt"));
outPut.write("hadoop 分布式文件系统:HDFS".getBytes());
outPut.flush();
outPut.close();
}
/**
* 查看文件内容
*@throws Exception
*/
@Test
public void cat()throws Exception{
FSDataInputStream input = fileSystem.open(new Path("/javaApi/test01/a.txt"));
IOUtils.copyBytes(input, System.out, 1024);
input.close();
}
/**
* 重命名
*@throws Exception
*/
@Test
public void rename() throws Exception{
fileSystem.rename(new Path("/javaApi/test01/a.txt"), new Path("/javaApi/test01/b.txt"));
}
/**
* 从本地拷贝文件到hdfs
*/
@Test
public void copyFromLocalFile()throws Exception{
fileSystem.copyFromLocalFile(new Path("D://PS//logo.png"), new Path("/javaApi/test01"));
}
/**
* 从本地拷贝大文件,带进度条上传
*@throws Exception
*/
@Test
public void copyFromLocalFileWithProgress()throws Exception{
InputStream in = new BufferedInputStream(new FileInputStream(new File("D://PS//001.rar")));
FSDataOutputStream out = fileSystem.create(new Path("/javaApi/test01/001.rar"), new Progressable() {
public void progress() {
//以*表示上传进度
System.out.print("*");
}
});
IOUtils.copyBytes(in, out, 1024);
}
/**
* 下载文件
*@throws Exception
*/
@Test
public void copyToLocal()throws Exception{
fileSystem.copyToLocalFile(false,new Path("/javaApi/test01/b.txt"), new Path("D://PS//tmp//"),true);
}
@Test
public void listPath()throws Exception{
FileStatus[] fileStatus = fileSystem.listStatus(new Path("/javaApi/test01"));
for(FileStatus f:fileStatus){
String isDir = f.isDirectory()? "文件夹" : "文件";
String path = f.getPath().toString();
System.out.println(isDir+":"+path);
}
}
/**
* 删除
*@throws Exception
*/
@Test
public void delete()throws Exception{
fileSystem.delete(new Path("/javaApi/test01"),true);
}
@After
public void tearDown() throws Exception{
fileSystem.close();
}
}