HDFS的JavaApi-----FileSystem的⽤法详解(fileSystemfi。。。Hadoop中HDFS的Java Api-----FileSystem的具体⽤法:
参考:
注意:
1>上传⽂件的前提:必须在hdfs中先创建⼀个⽂件 create
exists的用法
2>下载⽂件的前提:必须在hdfs中先打开这个⽂件 open
3> user的含义:HADOOP_USER_NAME
4>conf的作⽤:
5>fileSystem的层次结构:
①创建⽂件夹:mkdirs默认就会递归的创建出多级⽬录
public class App1
{
public static void main(String[] args) throws Exception
{
Configuration conf = new Configuration();
FileSystem fileSystem = (new URI("hdfs://hadoop20:9000/"), conf, "root");
//创建⽂件夹的⽅式:可以迭代创建
fileSystem.mkdirs(new Path("hdfs://hadoop20:9000/dir1/dir2"));
}
}
②从本地⽂件系统(本地参考的是eclipse安装在linux上还是windows上)上传⽂件到HDFS上(注意:⽬标⽂件的名字可以和源⽂件的名字不同,内容同样会拷贝)
public class App1
{
public static void main(String[] args) throws Exception
{
Configuration conf = new Configuration();
FileSystem fileSystem = (new URI("hdfs://hadoop20:9000/"), conf, "root");
//从本地上传⽂件到HDFS
FSDataOutputStream fw = ate(new Path("/dir1/"));
FileInputStream fr = new FileInputStream("C:\\");
}
}
上⾯的代码也可以⽤下⾯简单的代码来替代:
public class App1
{
public static void main(String[] args) throws Exception
{
Configuration conf = new Configuration();
FileSystem fileSystem = (new URI("hdfs://hadoop20:9000/"), conf, "root");
//从本地上传⽂件到HDFS
}
}
③从HDFS中下载⽂件到本地(本地参考的是eclipse安装在linux上还是windows上)
public class App1
{
public static void main(String[] args) throws Exception
{
Configuration conf = new Configuration();
FileSystem fileSystem = (new URI("hdfs://hadoop20:9000/"), conf, "root");
//从hdfs中下载⽂件到本地
FSDataInputStream fr = fileSystem.open(new Path("hdfs://hadoop20:9000/dir1/"));
}
}
当然,上⾯的代码也可以⽤下⾯的代码来替代:
public class App1
{
public static void main(String[] args) throws Exception
{
Configuration conf = new Configuration();
FileSystem fileSystem = (new URI("hdfs://hadoop20:9000/"), conf, "root");
//从hdfs中下载⽂件到本地
}
}
运⾏结果:
  调试⽅式:
改为:
错误原因:
在使⽤copyToLocalFile(Path src, Path dst)⽅法时可能导致 setPermission⽂件本地⽂件效验失败,因此使⽤copyToLocalFile( boolean delSrc,Path src, Path dst, boolean useRawLocalFileSystem),其中:
boolean delSrc 指是否将原⽂件删除
Path src 指要下载的⽂件路径
Path dst 指将⽂件下载到的路径
boolean useRawLocalFileSystem 是否开启⽂件效验
④删除⽂件或者⽂件夹(会递归到下层,不会到上层)
public boolean delete(Path f, boolean recursive) throws IOException
如果f是⼀个⽂件或空⽬录,那么recursive的值就会被忽略:
/user/mart_
/user/mart_risk
如果f不是⼀个空⽬录:只有在recrusive值为true时,⾮空⽬录及其⼦内容才会被删除(否则会抛出IOException异常)。/user/mart_risk/jdk1.7.0_25x64.zip
public class App1
{
public static void main(String[] args) throws Exception
{
Configuration conf = new Configuration();
FileSystem fileSystem = (new URI("hdfs://hadoop20:9000/"), conf, "root");
//删除⽂件或⽂件夹:第⼆个参数代表是否递归删除,类似于Python的那个
fileSystem.delete(new Path("hdfs://hadoop20:9000/dir1/"), false);
}
}
(5)mv操作(叫做rename)
import java.io.FileInputStream;
import java.URI;
import org.f.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.junit.Test;
public class hdfs_utils_1
{
public static void main(String[] args) throws Exception
{
Configuration config = new Configuration();
FileSystem fileSystem = (new URI("hdfs://hadoop11:9000"), config,"root");
//mv操作:竟然叫做rename
}
}
(6)获取⽂件或者⽂件夹的元数据信息
第⼀:listFiles只能列出⽂件的信息(⽽且提供递归遍历):访问时间、修改时间、块的位置、块的⼤⼩、所有者、所在组、路径、权限等等.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。