Hadoop第四章:Client客户端2.0
系列文章目录
系列文章目录
Hadoop第一章:环境搭建
Hadoop第二章:集群搭建(上)
Hadoop第二章:集群搭建(中)
Hadoop第二章:集群搭建(下)
Hadoop第三章:Shell命令
Hadoop第四章:Client客户端
Hadoop第四章:Client客户端2.0
文章目录
- 系列文章目录
- 系列文章目录
- 前言
- 一、简单封装
- 二、上传文件
- 副本数量优先级
- 三、下载文件
- 四、删除文件
- 五、更名和移动
- 六、是否为文件
- 七、查看文件详情
- 总结
前言
在上一次的博客中我们完成了了Client的基础模板,这次我们将其完善。
提示:以下是本篇文章正文内容,下面案例可供参考
一、简单封装
核心代码
public class HdfsClient {//连接集群的nn地址@Testpublic void testmkdir() throws URISyntaxException, IOException, InterruptedException {//连接地址URI uri=new URI("hdfs://hadoop102:8020");//配置文件Configuration configuration=new Configuration();//用户String user="atguigu";//获取客户端对象FileSystem fs=FileSystem.get(uri,configuration,user);//创建一个文件夹fs.mkdirs(new Path("/xiyou/huaguoshan"));//关闭资源fs.close();}
}
可以看到我们将整个过程中的连接集群,执行命令,以及最后的连接断开,都写到了一个函数中,这很明显不利用代码的我们应该将其分别封装在三个函数中。
public class HdfsClient {private FileSystem fs;@Beforepublic void init() throws URISyntaxException, IOException, InterruptedException {//连接地址URI uri=new URI("hdfs://hadoop102:8020");//配置文件Configuration configuration=new Configuration();//用户String user="atguigu";//获取客户端对象fs = FileSystem.get(uri,configuration,user);}@Afterpublic void close() throws IOException {//关闭资源fs.close();}@Testpublic void testmkdir() throws IOException {//创建一个文件夹fs.mkdirs(new Path("/xiyou/huaguoshan1"));}
}
现在我们在创建一个文件。
现在我们只需要在命令部分进行修改即可。
二、上传文件
核心代码
只测试某一个test
@Testpublic void testPut() throws IOException {//参数 1.是否删除源文件 2.是否强制覆盖 3.本地文件路径 4.hadoop文件路径fs.copyFromLocalFile(false,false,new Path("D:\\learn\\test.txt"),new Path("/"));}
副本数量优先级
正常情况下,这里会出现三个副本,因为咱们集群有三个节点,但是这个数量可以设置吗,当然是可以的,我们可以在项目的配置文件文件里设置(hdfs-site.xml),但这样灵活性会下降,所以就不介绍了,咱们之说在独立项目中如何设置。
在resources目录下创建一个hdfs-site.xml文件,如果要修改配置文件,就直接在hadoop的hdfs-site.xml文件中设置。
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><property><name>dfs.replication</name><value>1</value></property>
</configuration>
这里我们吧副本数量设置为1,现在再次上传。这次注意要允许覆盖。
现在我这个项目里上传的文件的副本数统一更改了,但是还是不够灵活我希望每一次上传的副本数都有我控制,所以我们呀修改连接配置。
核心代码
@Beforepublic void init() throws URISyntaxException, IOException, InterruptedException {//连接地址URI uri=new URI("hdfs://hadoop102:8020");//配置文件Configuration configuration=new Configuration();//配置副本数configuration.set("dfs.replication", "2");//用户String user="atguigu";//获取客户端对象fs = FileSystem.get(uri,configuration,user);}
所以这里记录优先级
配置文件<项目配置<代码配置。
三、下载文件
核心代码
@Test//文件下载public void testGet() throws IOException {//参数 1.是否删除源文件 2.hadoop路径 3.本地路径 4.是否校验fs.copyToLocalFile(false,new Path("/test.txt"),new Path("C:\\Users\\admin\\Desktop"),false);}
我的下载路径选择的是桌面。
这里说一下这个校验,就hadoop的问价哈希一下,然后本地文件也哈希一下,如果一样,就说明没有产生数据丢失。
四、删除文件
核心代码
@Test//文件删除public void tessRm() throws IOException {//参数 1.删除目录 2.是否递归fs.delete(new Path("/test.txt"),false);fs.delete(new Path("/wcinput"),true);}
注意空目录和文件可以直接删除,非空目录需要递归。
五、更名和移动
核心代码
@Test//文件移动和更名public void testmv() throws IOException {//参数 1.源路径 2.目标路径fs.rename(new Path("/xiyou/huaguoshan"),new Path("/xiyou/shuiliandong"));}
更名和移动是类似的只要修改路径即可。
六、是否为文件
信息代码
@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());}}}
七、查看文件详情
核心代码
@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.getBlockSize());System.out.println(fileStatus.getPath().getName());// 获取块信息BlockLocation[] blockLocations = fileStatus.getBlockLocations();System.out.println(Arrays.toString(blockLocations));}}
由于集群是从新搭建了一次,里边没啥东西,随便上传个文件测试一下就行。
总结
用Java进行客户端的搭建到这里就告一段落了。
Hadoop第四章:Client客户端2.0相关推荐
- hadoop java client_hadoop3 Java client客户端kerberos认证
hadoop集群升级hadoop3,并需要Kerberos认证,hadoop3代码包做了合并,引用jar包如下: org.apache.hadoop hadoop-hdfs 3.1.1 org.apa ...
- 第五章:Tensorflow 2.0 利用十三层卷积神经网络实现cifar 100训练(理论+实战)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/LQ_qing/article/deta ...
- 【正点原子Linux连载】第六十四章 Linux 多点电容触摸屏实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...
- Hadoop In Action 第四章(1)
第四章 编写基本的MapReduce程序 本章涵盖了: 用Hadoop处理数据集,以专利数据为例 一个MapReduce程序的基本结构 基本的MapReduce程序,以数据统计为例 Hadoop的流A ...
- HIDL示例-JAVA服务创建-Client验证-Android10.0 HwBinder通信原理(四)
摘要:本节主要来讲解Android10.0 JAVA层的HIDL服务创建和JAVA层的Client验证 阅读本文大约需要花费15分钟. 文章首发微信公众号:IngresGe 专注于Android系统级 ...
- Beginning WF 4.0翻译——第四章(传递参数)
在第一章,我已经向你展示了在工作流中怎么使用variables(变量)和arguments(参数).跟编码类似,variables类似于类成员,而arguments类似于方法的参数.你已经在前三章使用 ...
- 【正点原子Linux连载】第四十四章 设备树下的LED驱动实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...
- 【正点原子FPGA连载】第四章 Vivado软件的安装和使用 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0
1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...
- 【正点原子FPGA连载】第十四章 IP核之RAM实验 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0
1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...
最新文章
- filebeat成精之路
- 【BZOJ4259】残缺的字符串
- 2018年各大互联网前端面试题四(美团)
- javascript 网页设计 怎么在同一位置显示几张不同的图片(图片自动变换)
- 算术运算符_加号的多种用法
- JDK9新特性实战:简化流关闭新姿势
- H26L encoder.cfg参数分析
- VBA 常用代码及自定义函数备忘
- Object类中的toString方法
- ubuntu下MySQL的安装使用与卸载-程序编译
- 得益于数据中心芯片业务提升,AMD公司财务表现令投资者欣喜
- 云之讯-》返回码105147
- python比java_对比java和python对比
- 深度学习——目前可用的3D人体数据集
- 机器人学习笔记(3) 正运动学和逆运动学
- 调用restFul接口如何实现返回的数据编码格式为utf-8
- 机器人与matlab——Robotics Toolbox—02建立机器人模型
- python判断谁做了好事
- 产品需求文档到底该怎么写?
- 机器视觉学习笔记(三)-- 图像采集(镜头)