【小白视角】大数据基础实践(三)HDFS的简单基本操作_使用客户端节点执行hdfs dfs -put文件上传至hdfs很慢(2)

hdfs dfs -mkdir /目录


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612224306644.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)  
 注意要一层一层创建目录,好像不能一蹴而就。


列出HDFS的所有目录



hdfs dfs -ls


![在这里插入图片描述](https://img-blog.csdnimg.cn/2021061222464185.png)


删除HDFS的目录



hdfs dfs -rm -r /目录


![在这里插入图片描述](https://img-blog.csdnimg.cn/202106122243435.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)


#### 3.3 文件操作


文件上传



hdfs dfs -put 源路径 目的路径


在主机里创建文件  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612224520328.png)  
 然后上传到HDFS中  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612224536207.png)  
 文件内容查看



hdfs dfs -cat 文件路径


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612224747902.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)


文件下载



hdfs dfs -get 源文件地址 下载到的路径


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612224555304.png)  
 查看是否下载成功  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612224616557.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)


文件的移动



hdfs dfs -mv 文件路径 目的目录


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612224827101.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)  
 文件的复制



hdfs dfs -cp 文件路径 目的目录


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612224919889.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612224949162.png)


文件的创建



hdfs dfs -touch 文件路径


![在这里插入图片描述](https://img-blog.csdnimg.cn/202106122257574.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)


文件的追加



hdfs dfs -appendToFile 追加的内容文件路径 被追加的文件路径


在本地创建一个文件  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612224717669.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)  
 对其进行添加操作  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612224731497.png)


文件查看



hdfs dfs -text 文件路径


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612225851269.png)


文件删除



hdfs dfs -rm 文件路径


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612224811721.png)


### 4. 利用web界面管理HDFS


访问url:http://localhost:9870  
 就可以看到管理页面的!应该是可以的!我没试过。  
 附上老师的截图  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210613000714490.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)


### 5. 使用JavaApi进行管理HDFS


#### 5.1 导包并测试


Idea导入hadoop jar包  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2021061223001538.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612230021279.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612230027241.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)  
 找到文件路径安装即可。


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612230039667.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)  
 添加指定的jar文件  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612230054554.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)  
 看到这里的jar包即可成功了。


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612230109976.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)  
 测试代码


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612230849323.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)  
 可以运行就行了!


#### 5.2 题目


##### 第一题


编写Java代码实现功能:判断指定文件在HDFS中是否存在,若不存在,则创建该文件,若存在,则打开文件进行内容追加;


在本地创建一个文件夹用于追加使用。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612231219823.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)



import java.io.*;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class HDFSmkdir {
public static void appendToFile(Configuration conf, String localFilePath, String remoteFilePath) {
Path remotePath = new Path(remoteFilePath); //传入hdfs文件路径
try(
FileSystem fs = FileSystem.get(conf);
FileInputStream in = new FileInputStream(localFilePath)😉{
//new一个文件的输入流的对象,并加入需要add的文件路径
FSDataOutputStream out = fs.append(remotePath); // 将hdfs中的文件读入
byte[] data = new byte[1024];
/*
从输出流中读取一定数量的字节,并将其存储在缓冲区数组data中。返回:
读入缓冲区的总字节数;
如果因为已经到达流末尾而不再有数据可用,则返回 -1。
*/
int read = -1;
while((read = in.read(data)) > 0) {
out.write(data,0,read); // 添加hdfs文件之中
}
out.close(); // 关闭hdfs的文件
}catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new Mkdir(); //主函数new一个Mkdir对象
}
}

class Mkdir{
public Mkdir(){
String filename = “/user/hadoop/input/hdfs-site.xml”; //需要添加本地内容的文件
Configuration conf = new Configuration(); // new一个配置文件的对象
conf.set(“dfs.client.block.write.replace-datanode-on-failure.enable”, “true”);
/*
在进行pipeline写数据(上传数据的方式)时,
如果DN或者磁盘故障,客户端将尝试移除失败的DN,然后写到剩下的磁盘。
一个结果是,pipeline中的DN减少了。这个特性是添加新的DN到pipeline。
这是一个站点范围的选项。
*/
conf.set(“dfs.client.block.write.replace-datanode-on-failure.policy”,“NEVER”);
/*
此属性仅在dfs.client.block.write.replace-datanode-on-failure.enable设置为true时有效。
ALWAYS: 总是添加新的DN
NEVER: 从不添加新的DN
DEFAULT: 设r是副本数,n是要写的DN数。在r>=3并且floor(r/2)>=n或者r>n(前提是文件是 hflushed/appended)时添加新的DN。
*/
conf.set(“fs.defaultFS”, “hdfs://localhost:9000”);
/*
默认文件系统的名称。URI形式。uri’s的scheme需要由(fs.SCHEME.impl)指定文件系统实现类。 uri’s的authority部分用来指定host, port等。默认是本地文件系统。
HA方式,这里设置服务名,例如:hdfs://111111
HDFS的客户端访问HDFS需要此参数。
伪分布是这样的,如果是全分布的话,应该是你的映射名字不是localhost了。应该。
*/
conf.set(“fs.hdfs.impl”, “org.apache.hadoop.hdfs.DistributedFileSystem”);
try {
FileSystem fs = FileSystem.get(conf);
Path path = new Path(filename);
if(fs.exists(path)) {
System.out.println(“File “”+ filename +”" Exist!“);
// 文件存在,追加内容
try {
String localFilePath = “/home/zqc/add.txt”;
//需要追加的文件内容的路径
HDFSmkdir.appendToFile(conf, localFilePath, filename);
System.out.println(“File Written Successfully!”);
}catch(Exception e) {
e.printStackTrace();
}
}
else {
System.out.println(“File “”+ filename +”” Not Exist!");
fs.createNewFile(path); // 文件不存在,创建文件
System.out.println(“File Created Successfully!”);
}
}catch(IOException e)
{
e.printStackTrace();
}
}
}


编译器终端显示没有错误。![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612232021271.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)  
 然后在shell中cat是否添加  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612232036498.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)  
 成功!追加成功!


##### 第二题


编写Java代码实现功能:通过用户实时输入内容或本地文本内容完成HDFS文件写入操作,用户输入“exit”结束写入;



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.io.FileInputStream;
import java.io.IOException;
import java.util.Scanner;

public class HDFSFileWritten {
public static void appendToFile(Configuration conf, String localFilePath, String remoteFilePath) {
Path remotePath = new Path(remoteFilePath);
try (FileSystem fs = FileSystem.get(conf);
FileInputStream in = new FileInputStream(localFilePath)😉 {
FSDataOutputStream out = fs.append(remotePath);
byte[] data = new byte[1024];
int read = -1;
while ((read = in.read(data)) > 0) {
out.write(data, 0, read);
}
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new HDFSWrite();
}
}

class HDFSWrite {
public HDFSWrite() {
System.out.println(“Please Choose The Way To Write”);
System.out.println(“1.Written On Real Time”);
System.out.println(“2.Written By Local File”);
Scanner str = new Scanner(System.in);
String s = str.nextLine();
String filename = “/user/hadoop/input/hdfs-site.xml”;
Path writtenpath = new Path(filename);
Configuration conf = new Configuration();
//配置信息都和上面的一样的!
conf.set(“dfs.client.block.write.replace-datanode-on-failure.enable”, “true”);
conf.set(“dfs.client.block.write.replace-datanode-on-failure.policy”, “NEVER”);
conf.set(“fs.defaultFS”, “hdfs://localhost:9000”);
conf.set(“fs.hdfs.impl”, “org.apache.hadoop.hdfs.DistributedFileSystem”);
if (s.equals(“1”)) { //如果选择了1的话,就是自己输入
System.out.println(“Please Input The Content You Want To Append:”);
Scanner scanner = new Scanner(System.in);
String string;
try { //一个死循环
while (true) {
FileSystem fs = FileSystem.get(conf);
FSDataOutputStream fsdataoutput = fs.append(writtenpath);
string = scanner.nextLine();
if (string.equals(“exit”)) { //如果输入是exit就退出
System.out.println(“APPEND SUCCESSFULLY”);
break;
}
try { // 不然的话就是输入输入文件的内容
fsdataoutput.write(string.getBytes());
fsdataoutput.flush();
fsdataoutput.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
if (s.equals(“2”)) { //如果是2的话就直接添加
try {
String localFilePath = “/home/zqc/add.txt”;
HDFSFileWritten.appendToFile(conf, localFilePath, filename);
System.out.println(“APPEND SUCCESSFULLY”);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}


添加成功了。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612235616759.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)  
 本地文件内容为JAVA HADOOP 添加成功。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210612235638548.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwNDUwMw==,size_16,color_FFFFFF,t_70)


##### 第三题


编写Java代码实现功能:读取HDFS上的文件的内容并输出到控制台



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 org.apache.hadoop.io.IOUtils;

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数大数据工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

中…(img-FxX2ynhN-1712999621384)]
[外链图片转存中…(img-f3aosGu0-1712999621385)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
[外链图片转存中…(img-Uhcsiq1I-1712999621385)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>