一、linux
rm是删除,不是del
二、常用操作
package hdfs; import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import java.net.URISyntaxException; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.junit.Before;
import org.junit.Test;
//那么多test,指向运行一个 那么选种方法明后 在junit public class HDFSDemo {
FileSystem fs = null; @Before
public void init() throws Exception { URI uri = new URI("hdfs://192.168.58.180:8020/");
Configuration conf=new Configuration();
//这个是抽象类
fs = FileSystem.get(uri, conf, "hxsyl");
}
@Test
public void downLoadHdfs() throws Exception {
fs.copyToLocalFile(new Path("/in/1.txt"),new Path("d:/TestHDFS/2.txt"));
}
@Test
public void delHDFS() throws Exception, Throwable {
//true表示地柜删除
boolean flag = fs.delete(new Path("/1.txt"), true);
System.out.println(flag); }
@Test
public void mkdirHDFS() throws Exception, Throwable {
boolean flag = fs.mkdirs(new Path("/testHDFS"));
System.out.println(flag);
} @Test
public void uploadHDFS() throws Exception {
//一般来说win下的用户和linux下用户不一样,根据hdfs的权限机智,无法写成功,
//要么dfs.permissions false 这样一般不行
//要常穿的hdfs dfs -chmod 777 主要是改了其他用户权限
//或者伪装成用户
InputStream is = new FileInputStream("d:/TestHDFS/1.txt");
//指向hdfs 不用new
OutputStream os = fs.create(new Path("/1.txt"));
IOUtils.copyBytes(is, os, 4096,true);
}
public static void main(String[] args) throws Exception{ FileSystem fs = null;
URI uri = new URI("hdfs://192.168.58.180:8020/");
Configuration conf=new Configuration();
//这个是抽象类
fs = FileSystem.get(uri, conf); // TODO Auto-generated method stub //没有类似的get方法
//虽然这个文件存在 也要new
Path path = new Path("/Movielens1M/movies.dat");
InputStream is = fs.open(path);
//必须写到文件 否则
//java.io.FileNotFoundException: E:\AAA(拒绝访问。)
OutputStream os = new FileOutputStream("D:\\TestHDFS\\1.txt");
//拷贝完成关闭 默认的buffer都是4096
IOUtils.copyBytes(is, os, 4096, true); } }
上传下载除了输出输出流意外,然后IOUtils.copyBytes;就是用fs自带的方法。