HDFS的shell操作和JavaAPI的使用:
WEB
- WEB端口50090查看SecondaryNameNode信息。可以查看Hadoop的版本,NameNode的IP,Checkpoint等信息。
![FBatc4.md.png](https://s1.ax1x.com/2018/12/18/FBatc4.md.png)
![FBacge.png](https://s1.ax1x.com/2018/12/18/FBacge.png)
SHELL
查看
1 2 3 4
| hdfs dfs -ls [-d][-h][-R] <paths> [-d]:返回path [-h]:按照KMG数据大小单位显示文件大小,默认B [-R]:级联显示paths下文件
|
创建文件夹
1
| hdfs dfs -mkdir [-p]<paths>
|
新建文件
查看文件
1 2 3
| hdfs dfs -cat/[-ignoreCrc] [src] hdfs dfs -text -ignoreCrc /input/test hdfs dfs -cat -ignoreCrc /input/test
|
追写文件
1 2
| hdfs dfs --appendToFile <localsrc> <dst> 如果localsrc为"-"表示数据来自键盘输入用"Ctrc+C"取消输入
|
上传下载
1 2
| hdfs dfs -put [-f][-p]<localsrc> <dst> # 上传到指定目录 hdfs dfs -get [-p]<src> <localhost> # 现在到本地
|
删除文件
1 2 3
| hdfs dfs -rm [-f] [-r] <src> -f 如果要删除的文件不存在,不显示错误信息 -r/R 级联删除目录下所有文件和子目录文件
|
磁盘空间
1 2 3
| hdfs dfs -du[-s][-h]<path> [-s]显示指定目录所占空间大小 [-h]按照K M G 数据显示文件大小
|
JAVA API
步骤
- 实例化Configuration
Configuration封装了客户端或服务器的配置,Confiuration实例会自动加载HDFS的配置文件core-site.xml,从中获取Hadoop集群中的配置信息。因此我们要把集群的配置core-site.xml放在Maven项目的resources目录下。
1
| Configuration conf = new Configuration();
|
- 实例化FileSystem
FileSystem类是客户端访问文件系统的入口,是一个抽象的文件系统。DistributedFileSystem类是FileSystem的一个具体实现。实例化FileSystem并发挥默认的文件系统代码如下:
1
| FileSystem fs = FileSystem.get(conf);
|
- 设置目标对象的路径
HDFS API 提供了Path类来封装文件路径。PATH类位于org.apache.hadoop.fs.Path包中,代码如下:
1
| Path path = new Path("/input/write.txt");
|
执行文件操作
得到Filesystem实例后,就可以使用该实例提供的方法成员执行相应的操作。如果:打开文件,创建文件、重命名文件、删除文件。
FileSystem类常用成员函数
方法名称及参数 | 返回值 | 功能 |
---|
create(Path f) | FSDataOutputStream | 创建一个文件 |
open(Path f) | FSDatatInputStream | 打开指定的文件 |
delete(Path f) | boolean | 删除指定文件 |
exsits(Path f) | boolean | 检查文件是否存在 |
getBlockSize(Path f) | long | 返回指定的数据块的大小 |
getLength(Path f) | long | 返回文件长度 |
mkdir(Path f) | boolean | 检查文件是否存在 |
copyFromLocalFile(Path src, Path dst) | void | 从本地磁盘复制文件到HDFS |
copyToLocalFile(Path src, Path dst) | void | 从HDFS复制文件到本地磁盘 |
……….. | ………. | ……………. |
上传文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| package hdfs;
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path;
import java.net.URI;
public class PutFile { public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create("hdfs://datanode1:9000"),conf,"hadoop");
Path src = new Path("D:\\上传文件.txt");
Path dst = new Path("/input/上传文件.txt");
fs.copyFromLocalFile(src, dst); fs.close(); System.out.println("文件上传成功"); } }
|
创建文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| package hdfs;
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path;
import java.net.URI;
public class CreateFile { public static void main(String[] args) throws Exception { Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create("hdfs://datanode1:9000"), conf, "hadoop"); Path dfs = new Path("/input/上传文件.txt"); FSDataOutputStream newFile = fs.create(dfs, true); newFile.writeBytes("this is a create file tes"); System.out.println("创建文件成功");
} }
|
文件详情
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| package hdfs;
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path;
import java.net.URI; import java.text.SimpleDateFormat; import java.util.Date;
public class SeeInfo { public static void main(String[] args) throws Exception { Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create("hdfs://datanode1:9000"), conf, "hadoop");
Path fpath = new Path("/input/上传文件.txt");
FileStatus fileLinkStatus = fs.getFileLinkStatus(fpath); long blockSize = fileLinkStatus.getBlockSize(); System.out.println("blocksize: " + blockSize);
long len = fileLinkStatus.getLen(); System.out.println("Filesize: " + len);
String owner = fileLinkStatus.getOwner(); System.out.println("FileOwner: " + owner);
SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); long accessTime = fileLinkStatus.getAccessTime(); System.out.println("access time: " + formater.format(new Date(accessTime)));
long modificationTime = fileLinkStatus.getModificationTime(); System.out.println("modify time: " + formater.format(new Date(modificationTime)));
} }
|
![FBsDLF.png](https://s1.ax1x.com/2018/12/18/FBsDLF.png)
下载文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| package hdfs;
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 java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.URI;
public class GetFIle { public static void main(String[] args) throws Exception { Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create("hdfs://datanode1:9000"), conf, "hadoop"); InputStream in = fs.open(new Path("/input/上传文件.txt"));
OutputStream out = new FileOutputStream("D://下载文件.txt"); IOUtils.copyBytes(in, out, 4096, true);
System.out.println("下载文件成功"); fs.close();
} }
|
删除文件
hdfs;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| package hdfs;
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path;
import java.net.URI;
public class DeleteFile { public static void main(String[] args) throws Exception { Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create("hdfs://datanode1:9000"), conf, "hadoop");
Path path = new Path("/input/上传文件.txt"); fs.delete(path); System.out.println("删除成功"); } }
|