HDFS常用操作
原创大约 2 分钟
常用Shell命令
查看文件列表。
> hdfs dfs -ls hdfs://172.16.185.176:9000/
# 或者
> hdfs dfs -ls /
> hdfs dfs -ls [-R] /
从本地上传文件。
> hdfs dfs -put /home/work/test1 /
# 或者其他路径
> hdfs dfs -put /home/work/test1 /test
查看文件内容。
> hdfs dfs -cat /home/work/test1
下载文件到本地(当前目录)。
> hdfs dfs -get /home/work/test1 .
创建文件夹。
> hdfs dfs -mkdir -p /home/work/resource/test1
删除文件夹或文件。
> hdfs dfs -rm [-r] /home/work/resource/test1
统计指定目录下文件的数量和每个文件的大小。
# 统计指定目录下文件的数量
> hdfs dfs ls / | wc -l
# 统计指定目录下文件的数量和每个文件的大小
> hdfs dfs ls / | grep / | awk '{print $8, $5}'
Java操作HDFS
引入依赖。
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>3.2.0</version>
</dependency>
package com.itechthink.hdfs;
import org.apache.hadoop.conf.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 java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* Java操作HDFS
* 上传文件,下载文件,删除文件
*/
public class HdfsOperatorWithJava {
public static void main(String[] args) throws Exception {
// 创建一个配置对象
Configuration conf = new Configuration();
// 指定HDFS的地址
conf.set("fs.defaultFS", "hdfs://172.16.185.176:9000");
// 获取操作HDFS的对象
FileSystem fileSystem = FileSystem.get(conf);
// 上传文件
//put(fileSystem);
// 下载文件
get(fileSystem);
// 删除文件
//delete(fileSystem);
}
/**
* 上传文件
*
*/
private static void put(FileSystem fileSystem) throws IOException {
// 获取本地文件的输入流
FileInputStream fis = new FileInputStream("/home/work/hadoop-3.2.0/README.txt");
// 获取HDFS文件系统的输出流
FSDataOutputStream fos = fileSystem.create(new Path("/README.txt"));
// 上传文件:通过工具类把输入流拷贝到输出流里面,实现本地文件上传到HDFS
IOUtils.copyBytes(fis, fos, 1024, true);
}
/**
* 下载文件
*
*/
private static void get(FileSystem fileSystem) throws IOException {
// 获取HDFS文件系统中的输入流
FSDataInputStream fis = fileSystem.open(new Path("/README.txt"));
// 获取本地文件的输出流
FileOutputStream fos = new FileOutputStream("/home/work/hadoop-3.2.0/README2.txt");
// 下载文件
IOUtils.copyBytes(fis, fos, 1024, true);
}
/**
* 删除文件或者目录
*
*/
private static void delete(FileSystem fileSystem) throws IOException {
// 删除文件,目录也可以删除
// 如果要递归删除目录,则第二个参数需要设置为true
// 如果删除的是文件或者空目录,第二个参数会被忽略
boolean flag = fileSystem.delete(new Path("/README.txt"), true);
if (flag) {
System.out.println("删除成功!");
} else {
System.out.println("删除失败!");
}
}
}
感谢支持
更多内容,请移步《超级个体》。