https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/FileSystemShell.html
hadoop fs -mkdir [-p] 路径
-p:表示递归
hadoop fs -ls [-h] [-R] 路径
-R:递归
-h:详细,以人能看懂的方式展现
hadoop fs -put [-f] [-p] 需要上传的文件 上传的位置
-f:覆盖原文件
-p:保留访问和修改时间,所有权,权限信息
hadoop fs -moveFromLocal 需要上传的文件 上传的位置
hadoop fs -cat 文件路径
hadoop fs -head 文件路径
hadoop fs -tail [-f] 文件路径
-f:动态显示文件追加的内容
hadoop fs -get [-f] [-p] 需要下载的文件路径 要下载到的路径
-f:覆盖文件
-p:保留访问时间、修改时间、所有权和权限
hadoop fs -getmerge [-nl] 需要下载的文件路径 要下载到的路径
-nl :表示每个文件末尾添加换行符
hadoop fs -appendToFile 要追加的文件 要追加的目标文件
hadoop fs -df -h
hadoop fs -du -s -h 文件路径
-s:表示显示指定路径文件长度的汇总摘要
hadoop fs -mv 需要移动的文件 移动到的路径
hadoop fs -cp [-f] 需要复制的文件 复制到的路径
-f:强制覆盖
hadoop fs -setrep [-R] [-w] 文件副本个数 需要修改的文件
-R:递归
-w:客户端是否等待副本修改完毕
HDFS在生产应用中主要是Java客户端的开发,其核心步骤是从HDFS提供的API中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS上的文件。
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.3.4</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>3.3.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>3.3.4</version>
<scope>test</scope>
</dependency>
我的文件位置在:/export/server/hadoop-3.3.4/etc/hadoop
我们要关注的是配置的name和value
后面我们要将其设置到配置连接中
conf.set("fs.defaultFS","hdfs://node1.syf.cn:8020");
当然这个地方你得注意如果没有配置映射
我们就应该写成
conf.set("fs.defaultFS","hdfs://你的Hadoop主机的IP地址:8020");
@SpringBootTest
class Code1ApplicationTests {
private static Configuration conf = null;
private static FileSystem fileSystem = null;
/**
* 开启连接
* @throws IOException
*/
@Test
void connectTest() throws IOException {
//创建配置对象实例
conf = new Configuration();
//设置文件系统是HDFS并指定HDFS操作地址,查看core-site.xml
conf.set("fs.defaultFS","hdfs://node1.syf.cn:8020");
//创建FileSystem对象实例
fileSystem = FileSystem.get(conf);
}
/**
* 关闭连接
* @throws IOException
*/
public void close() throws IOException {
fileSystem.close();
}
}
首先设置身份,配置对象实例设置HDFS相关属性,然后使用FileSystem的get()
方法
private static Configuration conf = null;
private static FileSystem fileSystem = null;
/**
* 开启连接
* @throws IOException
*/
@Test
void connectTest() throws IOException {
//设置身份获取权限访问
System.setProperty("HADOOP_USER_NAME","root");
//创建配置对象实例
conf = new Configuration();
//设置文件系统是HDFS并指定HDFS操作地址,查看core-site.xml
conf.set("fs.defaultFS","hdfs://192.168.31.103:8020");
//创建FileSystem对象实例
fileSystem = FileSystem.get(conf);
}
使用FileSystem的close()
方法
private static Configuration conf = null;
private static FileSystem fileSystem = null;
/**
* 关闭连接
* @throws IOException
*/
@Test
public void close() throws IOException {
if (fileSystem!=null){
fileSystem.close();
}
}
使用FileSystem的mkdirs()
方法
private static Configuration conf = null;
private static FileSystem fileSystem = null;
/**
* 创建文件夹
*/
@Test
public void makeDir() throws IOException {
//连接到Hadoop
connectTest();
//判断文件夹是否存在
if (!fileSystem.exists(new Path("/test1"))){
//不存在就创建
fileSystem.mkdirs(new Path("/test1"));
}
}
使用FileSystem的copyFromLocalFile()
方法
private static Configuration conf = null;
private static FileSystem fileSystem = null;
/**
* 上传文件
*/
@Test
public void uploadFile() throws IOException {
connectTest();
fileSystem.copyFromLocalFile(new Path("C:\\Users\\Syf200208161018\\Desktop\\baidu.json"), new Path("/test1"));
}
使用FileSystem的copyToLocalFile()
方法
/**
* 下载文件
* @throws IOException
*/
@Test
public void downLoadFile() throws IOException {
connectTest();
//hadoop位置
final Path dst = new Path("/test1/baidu.json");
//本地位置
final Path src = new Path("C:\\Users\\Syf200208161018\\Desktop");
fileSystem.copyFromLocalFile(src,dst);
}