本文主要整理关于hdfs的shell操作api和java操作的api内容。
shell操作
传文件
这里的hdfs://localhost:9000是你的hdfs服务端地址,如果你的本地机器有配置HDOOP_HOME环境的变量的话,它会自动识别到core-site.xml中国呢配置的fs.defaultFS属性的值。
hdfs dfs -put ./test.txt hdfs://localhost:9000/
下载文件
直接下载到本地磁盘,如果本地文件命名冲突,可以支持下载后重命名
hdfs dfs -get /test.txt
hdfs dfs -get /test.txt /重命名文件
查看文件目录
这里的-ls命令和linux命令一样,而且支持追加参数
hdfs dfs -ls hdfs://localhost:9000/
hdfs dfs -ls -R hdfs://localhost:9000/
创建目录
这里的-mkdir命令和linux命令一样,而且支持追加参数
hdfs dfs -mkdir /test
hdfs dfs -mkdir -R /test/dir1
删除文件
hdfs dfs -rm /test.txt
java的api操作
对于hdfs文件的操作,官方也有提供一些高级语言使用的sdk包,例如hadoop-client,下边是基于java的sdk去进行接口调用的代码案例。
<properties>
<hdfs.version>3.3.6</hdfs.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${hdfs.version}</version>
</dependency>
</dependencies>
简单的java代码案例:
package org.hdfs.sample;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
/**
* @Author idea
* @Date: Created at 2024/10/2
* @Description hdfs操作案例
*/
public class TestHdfsReadMain {
public static void main(String[] args) {
try {
Configuration conf = new Configuration();
String hdfsUserName = "root";
// HDFS的访问路径
URI hdfsUri = new URI("hdfs://127.0.0.1:9000");
// 根据远程的NameNode节点,获取配置信息,创建HDFS对象
FileSystem fs = FileSystem.get(hdfsUri, conf, hdfsUserName);
System.out.println(fs.exists(new Path("/readme.txt")));
FSDataInputStream fsDataInputStream = fs.open(new Path("/readme.txt"));
byte[] content = new byte[100];
fsDataInputStream.getWrappedStream().read(content);
System.out.println("read: " + new String(content));
} catch (URISyntaxException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}