一、HDFS的shell操作:
1.语法:hadoop fs 具体命令
或者hdfs dfs 具体命令
2.上传:
(1)剪切hadoop fs -moveFromLocal 本地文件路径 HDFS文件路径
(2)复制hadoop fs -copyFromLocal 本地文件路径 HDFS文件路径
或者hadoop fs -put 本地文件路径 HDFS文件路径
(3)追加到文件末尾hadoop fs -appendToFile 本地文件路径 HDFS文件路径
3.下载:拷贝到本地hadoop fs -copyToLocal HDFS文件路径 本地文件路径
或者hadoop fs -get HDFS文件路径 本地文件路径
4.创建文件夹:hadoop fs -mkdir HDFS文件名
5.拷贝文件:hadoop fs -cp HDFS原文件路径 HDFS目的文件路径
6.剪切文件:hadoop fs -mv HDFS原文件路径 HDFS目的文件路径
7.显示文件末尾1kb数据:hadoop fs -tail HDFS文件路径
8.删除文件:hadoop fs -rm HDFS文件路径
9.递归删除文件:hadoop fs -rm -r HDFS原文件路径 HDFS目的文件路径
10.显示文件夹数据大小:hadoop fs -du -s -h HDFS文件路径
11.显示文件夹下各个文件的数据大小:hadoop fs -du -h HDFS文件路径
12.设置HDFS中文件的副本数量:hadoop fs -setrep 数量 HDFS文件路径
二、读写数据
1.oiv查看fsimage文件,hdfs oiv -p 文件类型 -i 编辑日志 -o 转换后文件输出路径
2.oev查看Edits文件,hdfs oev -p 文件类型 -i 编辑日志 -o 转换后文件输出路径
三、面试题
1.HDFS文件块大小:在企业中一般128m(中小公司),256m(大公司)
2.HDFS的shell操作(开发重点)
3.HDFS的读写流程(面试重点)
四、代码样例:
package com.lzp.hdfs;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.lang.reflect.Array;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays;
public class HdfsClient {
private FileSystem fs;
@Before
public void init() throws URISyntaxException, IOException, InterruptedException {
URI uri=new URI("hdfs://hadoop102:8020");
Configuration configuration = new Configuration();
String user="lzp";
fs = FileSystem.get(uri, configuration,user);
}
@After
public void close() throws IOException {
fs.close();
}
@Test
public void testmkdir() throws URISyntaxException, IOException, InterruptedException {
fs.mkdirs(new Path("/xiyou/huaguoshan1" ));
}
@Test
public void testPut() throws IOException {
fs.copyFromLocalFile(false,false,new Path("D:\\sunwukong.txt"),new Path("/xiyou/huaguoshan"));
}
@Test
public void testGet() throws IOException {
fs.copyToLocalFile(false,new Path("/xiyou/huaguoshan"),new Path("D:\\sunwukong.txt"),false);
}
@Test
public void testRm() throws IOException {
fs.delete(new Path("/xiyou/huaguoshan/sunwukong.txt"),false);
fs.delete(new Path("/xiyou/huaguoshan"),false);
fs.delete(new Path("/sanguo"),true);
}
@Test
public void testmv() throws IOException {
fs.rename(new Path("/input/README.txt"),new Path("/input/ss.txt"));
fs.rename(new Path("/input/ss.txt"),new Path("/ss.cjk.txt"));
}
@Test
public void fileDetail() throws IOException {
RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);
while (listFiles.hasNext()) {
LocatedFileStatus fileStatus = listFiles.next();
System.out.println("========="+fileStatus.getPath()+"==========");
System.out.println(fileStatus.getPermission());
System.out.println(fileStatus.getOwner());
System.out.println(fileStatus.getGroup());
System.out.println(fileStatus.getLen());
System.out.println(fileStatus.getModificationTime());
System.out.println(fileStatus.getReplication());
System.out.println(fileStatus.getBlockLocations());
System.out.println(fileStatus.getBlockSize());
System.out.println(fileStatus.getPath().getName());
BlockLocation[] blockLocations = fileStatus.getBlockLocations();
System.out.println(Arrays.toString(blockLocations));
}
}
@Test
public void testFile() throws IOException {
FileStatus[] listStatus = fs.listStatus(new Path("/"));
for (FileStatus status : listStatus) {
if (status.isFile()) {
System.out.println("文件:"+status.getPath().getName());
}else{
System.out.println("目录:"+status.getPath().getName());
}
}
}
}
五、集群运行
1.打包到集群上然后往集群上上传输入文件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY