您的位置:首页 > 大数据 > Hadoop

Hdfs常用操作

2016-12-06 15:51 274 查看
一、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自带的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: