hadoop学习笔记(七):Java HDFS API
一、使用HDFS FileSystem详解
HDFS依赖的第三方包:
hadoop 1.x版本:
commons-configuration-1.6.jar
commons-lang-2.4.jar
commons-loggin-1.1.1.jar
hadoop-core-1.2.1.jar
log4j-1.2.15.jar
hadoop2.x版本:
hadoop-mapreduce-client-core-2.2.0.jar
hadoop-common-2.2.0.jar
hadoop-mapreduce-client-common-2.2.0.jar
hadoop-mapreduce-client-jobclient-2.2.0.jar
注意:可根据自身的情况和版本信息手动添加或maven仓库依赖。
文件操作
1 工具类的创建:
创建一个工具类HDFSUtils,主要用来加载公共信息:
package com.laowang.utils; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.hdfs.DistributedFileSystem;
import java.io.IOException;
import java.net.URI; /**
* @author laowang
* @version v1.0.0
* @apiNote HDFS 工具类
* @since 2018/4/26 10:36
*/
public class HDFSUtil {
/**
* @author laowang
* @version v1.0.0
* @apiNote 获取FileSystem
* @since 2018/4/26 10:39
*/
public static FileSystem getFileSystem() {
FileSystem hdfs = null;
//获取配置文件信息
Configuration conf = new Configuration();
conf.set("fs.hdfs.impl",DistributedFileSystem.class.getName());
try {
//获取文件系统
hdfs = FileSystem.get(URI.create("hdfs://master01:9000"), conf);
} catch (IOException e) {
e.printStackTrace();
}
return hdfs;
} /**
* 关闭文件流
* @param fileSystem
*/
public static boolean closeFileSystem(FileSystem fileSystem) {
boolean flag = false;
if (fileSystem != null) {
try {
fileSystem.close();
flag = true;
} catch (Exception e) {
e.printStackTrace();
}
}
return flag;
}
}
HDFSUtils
2 上传文件到HDFS
/**
* @author laowang
* @version v1.0.0
* @apiNote 上传文件
* @since 2018/4/26 14:14
*/
public static void putFile() throws Exception {
Path sourcePath = new Path("E:\\port.txt");
//文件名称
Path targetPath = new Path("/test/");
//从本地复制文件到文件系统中去
hdfs.copyFromLocalFile(sourcePath,targetPath);
}
上传文件
3 读取文件
/**
* @author laowang
* @version v1.0.0
* @apiNote 读取文件
* @since 2018/4/26 10:39
*/
public static void testRead() throws Exception{
FileSystem hdfs = HDFSUtil.getFileSystem();
//文件名称
Path path = new Path("/test/initNetwork.sh");
//打开文件输入流
FSDataInputStream inputStream = hdfs.open(path);
//读取文件到控制台
IOUtils.copyBytes(inputStream,System.out,4096,false);
//关闭流
IOUtils.closeStream(inputStream);
}
读取文件
/**
* @author laowang
* @version v1.0.0
* @apiNote 查看目录
* @since 2018/4/26 14:29
*/
public static void testList() throws Exception{
FileSystem fileSystem=HDFSUtil.getFileSystem();
Path path = new Path("/test/");
FileStatus[] fileStatuses = hdfs.listStatus(path);
for(FileStatus fileStatus : fileStatuses){
Path p = fileStatus.getPath();
String info = fileStatus.isDirectory() ? "目录" : "文件";
System.out.println(info + ": " + p);
}
}
查看目录
4 在hadoop fs中新建文件,并写入
/**
* 创建文件
* @throws Exception
*/
public static void testDirectory() throws Exception {
FileSystem fileSystem = HDFSUtil.getFileSystem();
Path path = new Path("/test/laowang");
boolean mkdirs = hdfs.mkdirs(path);
System.out.println("创建:" + (mkdirs ? "成功" : "失败"));
}
创建文件
/**
* 创建文件并写入内容
* @throws Exception
*/
public static void testCreate() throws Exception{
Path path = new Path("/test/test.txt");
//创建文件
FSDataOutputStream outputStream = hdfs.create(path);
//写入内容
outputStream.writeUTF("hello hadoop!");
IOUtils.closeStream(outputStream);
}
创建文件并写入内容
5 重命名文件
/**
* 重命名
*/
public static void testRename() throws Exception{
//原路径
Path srcPath = new Path("/test/test.txt");
//目标路径
Path targetPath = new Path("/test/test2.txt");
boolean rename = hdfs.rename(srcPath, targetPath);
System.out.println("重命名:" + (rename ? "成功" : "失败"));
}
重命名
6 删除hadoop fs上的文件
/**
* 删除
*/
public static void testDelete() throws Exception {
Path path = new Path("/test/test2.txt");
boolean b = hdfs.deleteOnExit(path);
System.out.println("删除:" + (b ? "成功" : "失败"));
}
删除
HDFS信息
1 查找某个文件在HDFS集群中的位置
/**
* @author laowang
* @version v1.0.0
* @apiNote 查找某个文件在HDFS中的位置
* @since 2018/4/26 15:31
*/
public static void testLocation() throws Exception{
Path path = new Path("/test/port.txt");
FileStatus fileStatus = hdfs.getFileStatus(path);
BlockLocation[] fileBlockLocations = hdfs.getFileBlockLocations(fileStatus, 0, fileStatus.getLen());
for(BlockLocation blockLocation : fileBlockLocations){
String[] hosts=blockLocation.getHosts();
for (String host : hosts) {
System.out.println("端口:" + host);
}
}
}
查找某个文件在HDFS中的位置
2 获取HDFS集群上所有节点名称信息
/**
* @author laowang
* @version v1.0.0
* @apiNote 获取HDFS集群上所有节点名称信息
* @since 2018/4/26 15:38
*/
public static void testCluster() throws Exception {
DistributedFileSystem distributedFileSystem = (DistributedFileSystem) hdfs;
DatanodeInfo[] dataNodeStats = distributedFileSystem.getDataNodeStats();
for (DatanodeInfo datanodeInfo : dataNodeStats) {
System.out.println(datanodeInfo.getHostName());
}
}
获取HDFS集群上所有节点名称信息
hadoop学习笔记(七):Java HDFS API的更多相关文章
- Hadoop学习笔记一(HDFS架构)
介绍 Hadoop分布式文件系统(HDFS)设计的运行环境是商用的硬件系统.他和现存的其他分布式文件系统存在很多相似点.不过HDFS和其他分布式文件系统的区别才是他的最大亮点,HDFS具有高容错的特性 ...
- Java基础学习笔记七 Java基础语法之继承和抽象类
继承 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系. 例如公司中的研发部员工和维护部员工都属于员工, ...
- Hadoop学习笔记之五:HDFS功能逻辑(1)
Block Report DataNode会周期性(默认1小时)将自身节点全部block信息发送给NameNode,以让NameNode正确确维护block信息. 在Block Report的数据源D ...
- Hadoop学习笔记之四:HDFS客户端
HDFS的客户端核心是DFSClient类,所有使用HDFS的客户端都会持有一个DFSClient对象,或通过持有一个DistributedFileSystem对象间接使用DFSClient: DFS ...
- Java 学习笔记 (七) Java 参数
head first java page 74 实参: argument 形参: parameter 方法会运用形参, 调用的一方会传入实参. 实参是传给方法的值.当它传入方法后就成了形参, 参数跟局 ...
- Hadoop学习笔记之六:HDFS功能逻辑(2)
Lease(租约) HDFS(及大多数分布式文件系统)不支持文件并发写,Lease是HDFS用于保证唯一写的手段. Lease可以看做是一把带时间限制的写锁,仅持有写锁的客户端可以写文件. 租约的有效 ...
- Java学习笔记七:Java的流程控制语句之switch
Java条件语句之 switch 当需要对选项进行等值判断时,使用 switch 语句更加简洁明了.例如:根据考试分数,给予前四名不同的奖品.第一名,奖励笔记本一台:第二名,奖励 IPAD 2 一个: ...
- hadoop学习笔记(四):HDFS文件权限,安全模式,以及整体注意点总结
本文原创,转载注明作者和原文链接! 一:总结注意点: 到现在为止学习到的角色:三个NameNode.SecondaryNameNode.DataNode 1.存储的是每一个文件分割存储之后的元数据信息 ...
- Java IO学习笔记七:多路复用从单线程到多线程
作者:Grey 原文地址:Java IO学习笔记七:多路复用从单线程到多线程 在前面提到的多路复用的服务端代码中, 我们在处理读数据的同时,也处理了写事件: public void readHandl ...
- Hadoop学习笔记—22.Hadoop2.x环境搭建与配置
自从2015年花了2个多月时间把Hadoop1.x的学习教程学习了一遍,对Hadoop这个神奇的小象有了一个初步的了解,还对每次学习的内容进行了总结,也形成了我的一个博文系列<Hadoop学习笔 ...
随机推荐
- Feed back TFS 2017 RC upgrade status to product team in product group 2017.03.01
作为微软的MVP,有一个我最喜欢的好处,就是可以与产品组(产品研发部门)有零距离接触,可以最先拿到即将发版的产品,并且和产品组沟通,对产品中出现的问题实时反馈. 看到TFS产品组吸收了自己的建议和反馈 ...
- Microsoft.Web.Administration操作IIS7时的权限设置
在用Microsoft.Web.Administration操作IIS7时,你可能会遇到如下权限错误: 文件名: redirection.config错误: 由于权限不足而无法读取配置文件 如下图: ...
- 基于RBAC设计的通用权限管理框架
RoadFlow拥有基于RBAC设计的通用权限管理框架.不仅可以基于角色组进行菜单授权,还可以根据组织架构中部门.岗位.人员等进行细分的权限管理分配. 如果一个人有重复菜单权限,则将自动合并. 系统资 ...
- 初识GitHub与Git
在初次接触GitHub的时候,英语渣渣本渣真是深感无奈啊..... ORZ 在好友的帮助下,也算是初步入门了吧. 谨以此文作为初级使用手册记录,希望能帮助到你. 一.首先要申请一个GitHub账户 二 ...
- Day14 作业
1,整理今天的博客,写课上代码,整理流程图. 2,用列表推导式做下列小题 (1) 过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母 (2) 求(x,y)其中x是0-5之间的偶数,y是0- ...
- OSX - libc++究竟是啥?
libc++是什么? libc++是C++标准库的实现! libc++ is an implementation of the C++ standard library, targeting C++ ...
- centos6.5 yum安装lamp
准备篇: 1.清空防火墙 iptables -F 或者关闭防火墙 /etc/init.d/iptables stop,如果要防火墙开机不要启动 chkconfig iptables off 2.关闭S ...
- Weblogic有免费的License了
分类: 系统运维 曾几何时, 为了找一个不限IP, 不限CPU, 不限时间的Weblogic License, 需要翻遍整个互联网, 这种日子一去不复返了~~~~~ 几个月前, 听到Oracle收购B ...
- php语法分析
php的语法分析的主要作用是验证词法分析的基础上将token组成的序列,在php这门语言中是否是一个有效的句子,也可以理解为这些token序列是否匹配设计php这门语言时的语法模型,在匹配的情况下构建 ...
- Swift循环遍历集合方法
第一种方式:for-in循环 OC延续了C语言的for循环,在Swift中被彻底改造,我们无法再使用传统形式的for循环了 遍历数组和字典: //遍历数组 let iosArray = [&quo ...