Hdfs常用操作

一、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自带的方法。

原文地址:https://www.cnblogs.com/hxsyl/p/6137879.html