Hadoop基础-HDFS的API常见操作
Hadoop基础-HDFS的API常见操作
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
本文主要是记录一写我在学习HDFS时的一些琐碎的学习笔记, 方便自己以后查看。在调用API的时候,可能会需要maven依赖,添加依赖的包如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>HADOOP</artifactId>
<groupId>yinzhengjie.org.cn</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>HDFS</artifactId> <dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.6.0</version>
</dependency> <dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.6.0</version>
</dependency> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency> </dependencies> </project>
一.HDFS获取文件系统
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Hadoop%E7%94%9F%E6%80%81%E5%9C%88/
EMAIL:y1053419035@qq.com
*/
package hdfs.yinzhengjie.org.cn; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem; import java.io.IOException; public class HdfsClient { public static void main(String[] args) throws IOException {
initHDFS();
} //获取文件系统
public static void initHDFS() throws IOException{
//创建Configuration对象
Configuration conf = new Configuration();
//获取文件系统
FileSystem fs = FileSystem.get(conf); //打印文件系统到控制台
System.out.println(fs);
}
}
二.HDFS文件上传
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Hadoop%E7%94%9F%E6%80%81%E5%9C%88/
EMAIL:y1053419035@qq.com
*/
package hdfs.yinzhengjie.org.cn; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path; import java.net.URI; public class HdfsClient { public static void main(String[] args) throws Exception {
putFileToHDFSinitHDFS();
}
//文件上传
public static void putFileToHDFSinitHDFS() throws Exception {
//配合Hadoop的环境变量,如果没有配置可能会抛异常:“ERROR util.Shell: Failed to locate the winutils binary in the hadoop binary path”,还有一件事就是你的HADOOP_HOME的bin目录下必须得有winutils.exe
System.setProperty("hadoop.home.dir", "D:\\yinzhengjie\\softwares\\hadoop-2.7.3");
//创建Configuration对象
Configuration conf = new Configuration();
//在代码中配置副本数,优先级最高,其次是配置文件的优先级,最后才是hdfs集群默认的副本数
conf.set("dfs.replication","2");
//获取文件系统,注意传入的三个参数对应的是hdfs的链接地址(需要将集群的客户端配置文件放在RESOURCES目录下!),配置对象,以及提交权限的用户名称。
FileSystem fs = FileSystem.get(new URI("hdfs://yinzhengjie-hdfs-ha"),conf,"hdfs");
/**
* 当然,传入hdfs的url也可以指定主机名,当然你得在操作系统的hosts文件中指定对应的IP地址信息!
* FileSystem fs = FileSystem.get(new URI("hdfs://node105.yinzhengjie.org.cn:8020"),conf,"hdfs");
*/
//上传文件到hdfs路径中
fs.copyFromLocalFile(new Path("D:\\yinzhengjie\\data\\yinzhengjie.txt"),new Path("/yinzhengjie/yinzhengjie.blog"));
}
}
三.HDFS文件下载
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Hadoop%E7%94%9F%E6%80%81%E5%9C%88/
EMAIL:y1053419035@qq.com
*/
package hdfs.yinzhengjie.org.cn; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path; import java.net.URI; public class HdfsClient { public static void main(String[] args) throws Exception {
getFileFromHDFS();
}
//下载文件
public static void getFileFromHDFS() throws Exception {
//配合Hadoop的环境变量,如果没有配置可能会抛异常:“ERROR util.Shell: Failed to locate the winutils binary in the hadoop binary path”,还有一件事就是你的HADOOP_HOME的bin目录下必须得有winutils.exe
System.setProperty("hadoop.home.dir", "D:\\yinzhengjie\\softwares\\hadoop-2.7.3");
//创建Configuration对象
Configuration conf = new Configuration();
//获取文件系统,需要传入hdfs的链接地址,conf对象,以及操作的用户名
FileSystem fs = FileSystem.get(new URI("hdfs://node105.yinzhengjie.org.cn:8020"),conf,"hdfs");
/**
* 指定下载操作,下面是对该copyToLocalFile的参数说明
* 第一个参数:boolean delSrc -------> 指是否将源文件删除
* 第二个参数:Path src -------> 指定下载的文件路径
* 第三个参数:Path dst -------> 指定文件下载到的路径
* 第四个参数: boolean useRawLocalFileSystem -------> 指是否开启文件校验
*/
fs.copyToLocalFile(false,new Path("/yinzhengjie/yinzhengjie.blog"),new Path("D:\\yinzhengjie\\data"),true);
//关闭链接,释放资源
fs.close();
} }
四.HDFS目录创建
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Hadoop%E7%94%9F%E6%80%81%E5%9C%88/
EMAIL:y1053419035@qq.com
*/
package hdfs.yinzhengjie.org.cn; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path; import java.net.URI; public class HdfsClient { public static void main(String[] args) throws Exception {
mkdirAtHDFS();
} //在hdfs中创建文件夹
public static void mkdirAtHDFS() throws Exception{
//配合Hadoop的环境变量,如果没有配置可能会抛异常:“ERROR util.Shell: Failed to locate the winutils binary in the hadoop binary path”,还有一件事就是你的HADOOP_HOME的bin目录下必须得有winutils.exe
System.setProperty("hadoop.home.dir", "D:\\yinzhengjie\\softwares\\hadoop-2.7.3");
//创建Configuration对象
Configuration conf = new Configuration();
//获取文件系统,需要传入hdfs的链接地址,conf对象,以及操作的用户名
FileSystem fs = FileSystem.get(new URI("hdfs://node105.yinzhengjie.org.cn:8020"),conf,"hdfs");
//创建目录
fs.mkdirs(new Path("/yinzhengjie/2018/11/04"));
//释放资源
fs.close();
} }
五.HDFS文件夹删除
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Hadoop%E7%94%9F%E6%80%81%E5%9C%88/
EMAIL:y1053419035@qq.com
*/
package hdfs.yinzhengjie.org.cn; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path; import java.net.URI; public class HdfsClient { public static void main(String[] args) throws Exception {
deleteAtHDFS();
} //删除文件或者文件夹
public static void deleteAtHDFS() throws Exception{
//配合Hadoop的环境变量,如果没有配置可能会抛异常:“ERROR util.Shell: Failed to locate the winutils binary in the hadoop binary path”,还有一件事就是你的HADOOP_HOME的bin目录下必须得有winutils.exe
System.setProperty("hadoop.home.dir", "D:\\yinzhengjie\\softwares\\hadoop-2.7.3");
//创建Configuration对象
Configuration conf = new Configuration();
//获取文件系统,需要传入hdfs的链接地址,conf对象,以及操作的用户名
FileSystem fs = FileSystem.get(new URI("hdfs://node105.yinzhengjie.org.cn:8020"),conf,"hdfs"); //执行删除操作,第一个参数指定的是删除路径,第二个参数表示是否递归删除。要注意的是,如果是目录的必须设置为true,否则会抛异常!
fs.delete(new Path("/yinzhengjie/2018"),true); //关闭资源
fs.close();
}
}
六.HDFS文件名更改
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Hadoop%E7%94%9F%E6%80%81%E5%9C%88/
EMAIL:y1053419035@qq.com
*/
package hdfs.yinzhengjie.org.cn; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path; import java.net.URI; public class HdfsClient { public static void main(String[] args) throws Exception {
renameAtHDFS();
}
//给文件或者目录进行重命名操作
public static void renameAtHDFS() throws Exception{
//配合Hadoop的环境变量,如果没有配置可能会抛异常:“ERROR util.Shell: Failed to locate the winutils binary in the hadoop binary path”,还有一件事就是你的HADOOP_HOME的bin目录下必须得有winutils.exe
System.setProperty("hadoop.home.dir", "D:\\yinzhengjie\\softwares\\hadoop-2.7.3");
//创建Configuration对象
Configuration conf = new Configuration();
//获取文件系统,需要传入hdfs的链接地址,conf对象,以及操作的用户名
FileSystem fs = FileSystem.get(new URI("hdfs://node105.yinzhengjie.org.cn:8020"),conf,"hdfs");
//修改文件名称
fs.rename(new Path("/yinzhengjie/yinzhengjie.blog2"),new Path("/yinzhengjie/yinzhengjie.blog-2018-11-04"));
//关闭资源
fs.close();
}
}
七.HDFS文件详情查看
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Hadoop%E7%94%9F%E6%80%81%E5%9C%88/
EMAIL:y1053419035@qq.com
*/
package hdfs.yinzhengjie.org.cn; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*; import java.net.URI; public class HdfsClient { public static void main(String[] args) throws Exception {
readListFiles();
} public static void readListFiles() throws Exception {
//配合Hadoop的环境变量,如果没有配置可能会抛异常:“ERROR util.Shell: Failed to locate the winutils binary in the hadoop binary path”,还有一件事就是你的HADOOP_HOME的bin目录下必须得有winutils.exe
System.setProperty("hadoop.home.dir", "D:\\yinzhengjie\\softwares\\hadoop-2.7.3");
//创建配置信息对象
Configuration conf = new Configuration();
//获取文件系统,需要传入hdfs的链接地址,conf对象,以及操作的用户名
FileSystem fs = FileSystem.get(new URI("hdfs://node105.yinzhengjie.org.cn:8020"),conf,"hdfs"); //获取文件详情(注意:返回的是迭代器,而不是List之类的容器。),第一个参数指定的想要在hdfs获取的路径,第二个参数是否递归获取,改参数一般针对目录有效!
RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true); while (listFiles.hasNext()) {
//调用迭代器listFiles的next()方法获取文件详细信息
LocatedFileStatus fileStatus = listFiles.next();
//输出文件名称
System.out.println(fileStatus.getPath().getName());
//输出块大小的信息
System.out.println(fileStatus.getBlockSize());
//输出权限信息
System.out.println(fileStatus.getPermission());
//输出长度信息
System.out.println(fileStatus.getLen());
//输出组的信息
System.out.println(fileStatus.getGroup()); //获取到块的位置信息
BlockLocation[] blockLocations = fileStatus.getBlockLocations(); for (BlockLocation bl : blockLocations) { System.out.println("block-offset:" + bl.getOffset());
//获取该快在哪个节点上
String[] hosts = bl.getHosts(); for (String host : hosts) {
//打印获取到的主机信息
System.out.println(host);
}
} System.out.println("<--------------尹正杰的分割线------------->");
}
}
} 8>.HDFS文件和文件夹
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Hadoop%E7%94%9F%E6%80%81%E5%9C%88/
EMAIL:y1053419035@qq.com
*/
package hdfs.yinzhengjie.org.cn; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*; import java.net.URI; public class HdfsClient { public static void main(String[] args) throws Exception {
findAtFiles();
} public static void findAtFiles() throws Exception {
//配合Hadoop的环境变量,如果没有配置可能会抛异常:“ERROR util.Shell: Failed to locate the winutils binary in the hadoop binary path”,还有一件事就是你的HADOOP_HOME的bin目录下必须得有winutils.exe
System.setProperty("hadoop.home.dir", "D:\\yinzhengjie\\softwares\\hadoop-2.7.3");
//创建配置信息对象
Configuration conf = new Configuration();
//获取文件系统,需要传入hdfs的链接地址,conf对象,以及操作的用户名
FileSystem fs = FileSystem.get(new URI("hdfs://node105.yinzhengjie.org.cn:8020"),conf,"hdfs"); //获取查询路径下的文件状态信息
FileStatus[] listStatus = fs.listStatus(new Path("/")); //便利所有的文件状态
for (FileStatus status : listStatus) {
//判断是文件还是文件夹
if (status.isFile()){
//如果是文件就在打印的时候加上指定的字符串前添加"file ------->"
System.out.println("file ------->" + status.getPath().getName());
}else {
//如果是文件夹就在打印的时候加上特定的字符串前添加"directories ------->"
System.out.println("directories ------->"+ status.getPath().getName());
}
}
}
}
Hadoop基础-HDFS的API常见操作的更多相关文章
- Hadoop基础-HDFS的API实现增删改查
Hadoop基础-HDFS的API实现增删改查 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客开发IDE使用的是Idea,如果没有安装Idea软件的可以去下载安装,如何安装 ...
- Hadoop生态圈-Hbase的API常见操作
Hadoop生态圈-Hbase的API常见操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- Hadoop基础-HDFS分布式文件系统的存储
Hadoop基础-HDFS分布式文件系统的存储 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HDFS数据块 1>.磁盘中的数据块 每个磁盘都有默认的数据块大小,这个磁盘 ...
- Hadoop基础-HDFS集群中大数据开发常用的命令总结
Hadoop基础-HDFS集群中大数据开发常用的命令总结 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本盘博客仅仅列出了我们在实际生成环境中常用的hdfs命令,如果想要了解更多, ...
- Hadoop基础-HDFS安全管家之Kerberos实战篇
Hadoop基础-HDFS安全管家之Kerberos实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们都知道hadoop有很多不同的发行版,比如:Apache Hadoop ...
- Hadoop基础-Hdfs各个组件的运行原理介绍
Hadoop基础-Hdfs各个组件的运行原理介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.NameNode工作原理(默认端口号:50070) 1>.什么是NameN ...
- Hadoop基础-HDFS的读取与写入过程
Hadoop基础-HDFS的读取与写入过程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 为了了解客户端及与之交互的HDFS,NameNode和DataNode之间的数据流是什么样 ...
- Hadoop基础-HDFS的读取与写入过程剖析
Hadoop基础-HDFS的读取与写入过程剖析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客会简要介绍hadoop的写入过程,并不会设计到源码,我会用图和文字来描述hdf ...
- Hadoop基础-HDFS数据清理过程之校验过程代码分析
Hadoop基础-HDFS数据清理过程之校验过程代码分析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 想称为一名高级大数据开发工程师,不但需要了解hadoop内部的运行机制,还需 ...
随机推荐
- 5.2&5.3
队友吕日荣 http://www.cnblogs.com/Russelling/ 最近队友有点忙,尽管如此,队友还是有很给力的付出,让我们在最后完成了任务. 一开始都不知道这次的任务是要做什么,毫无头 ...
- corosync+pacemaker的crmsh的常用指令介绍
配置crmsh的yum仓库,此仓库的RPM包有openSUSE提供,将这个network:ha-clustering:Stable.repo文件直接下载到本地并且命名为crmsh.repo wget ...
- Appium学习笔记2_Android获取元素篇
在利用Appium做自动化测试时,最重要的一步就是获取对应的元素值,根据元素来对对象进行对应的操作,如果获得对象元素呢? Appium Server Console其实提供了一个界面对话框" ...
- 使用非服务器磁盘(MBROnly)安装ESXi时的方法.
From ESXi 5.0, if you install ESXi to a empty hard disk, the target disk will be prepared with GPT-b ...
- jmeter 参数化测试
变量的值可以不改变,可以被定义一次,如果不使用,不会改变值. 在测试计划中,变量可以做为方便的频繁使用的表达式,或都作为在测试运行中的可能会改变的常量,例如 线程组中线程的数量.主机名称 在确定一个测 ...
- mysql 8.0,运行springboot项目配置:
1.修改pom.xml <dependency> <groupId>mysql</groupId> <artifactId>mysql-connecto ...
- XML的基礎結構
1.xml是什麼? xml,Extensible Markup Language,扩展性标识语言,後綴名為.xml. 2.xml有什麼功能? xml功能是傳輸和儲存數據,用於不同的應用和平台數據共享和 ...
- jq 事件取消绑定与重新绑定
前端有时会碰到这样的需求: 点击某个元素发送ajax请求, 发送期间此元素的鼠标相关事件(比如点击)无效, 发送完成鼠标点击事件功能恢复, 对于这种需求, 我们会遇到两种情况, 一种是点击的按钮为fo ...
- hdu1728 逃离迷宫
给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地方是障碍,她必须绕行,从迷宫的一个位 ...
- Cuba项目配置IDEA,如何dubug
1.在cuba中编辑端口,如下图: 2.在IDEA中添加一个远程链接,添加为对应的端口号,然后运行debug即可 如果两个端口号不对应,就会报出以下的错误:unable to open debugge ...