一、使用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的更多相关文章

  1. Hadoop学习笔记一(HDFS架构)

    介绍 Hadoop分布式文件系统(HDFS)设计的运行环境是商用的硬件系统.他和现存的其他分布式文件系统存在很多相似点.不过HDFS和其他分布式文件系统的区别才是他的最大亮点,HDFS具有高容错的特性 ...

  2. Java基础学习笔记七 Java基础语法之继承和抽象类

    继承 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系. 例如公司中的研发部员工和维护部员工都属于员工, ...

  3. Hadoop学习笔记之五:HDFS功能逻辑(1)

    Block Report DataNode会周期性(默认1小时)将自身节点全部block信息发送给NameNode,以让NameNode正确确维护block信息. 在Block Report的数据源D ...

  4. Hadoop学习笔记之四:HDFS客户端

    HDFS的客户端核心是DFSClient类,所有使用HDFS的客户端都会持有一个DFSClient对象,或通过持有一个DistributedFileSystem对象间接使用DFSClient: DFS ...

  5. Java 学习笔记 (七) Java 参数

    head first java page 74 实参: argument 形参: parameter 方法会运用形参, 调用的一方会传入实参. 实参是传给方法的值.当它传入方法后就成了形参, 参数跟局 ...

  6. Hadoop学习笔记之六:HDFS功能逻辑(2)

    Lease(租约) HDFS(及大多数分布式文件系统)不支持文件并发写,Lease是HDFS用于保证唯一写的手段. Lease可以看做是一把带时间限制的写锁,仅持有写锁的客户端可以写文件. 租约的有效 ...

  7. Java学习笔记七:Java的流程控制语句之switch

    Java条件语句之 switch 当需要对选项进行等值判断时,使用 switch 语句更加简洁明了.例如:根据考试分数,给予前四名不同的奖品.第一名,奖励笔记本一台:第二名,奖励 IPAD 2 一个: ...

  8. hadoop学习笔记(四):HDFS文件权限,安全模式,以及整体注意点总结

    本文原创,转载注明作者和原文链接! 一:总结注意点: 到现在为止学习到的角色:三个NameNode.SecondaryNameNode.DataNode 1.存储的是每一个文件分割存储之后的元数据信息 ...

  9. Java IO学习笔记七:多路复用从单线程到多线程

    作者:Grey 原文地址:Java IO学习笔记七:多路复用从单线程到多线程 在前面提到的多路复用的服务端代码中, 我们在处理读数据的同时,也处理了写事件: public void readHandl ...

  10. Hadoop学习笔记—22.Hadoop2.x环境搭建与配置

    自从2015年花了2个多月时间把Hadoop1.x的学习教程学习了一遍,对Hadoop这个神奇的小象有了一个初步的了解,还对每次学习的内容进行了总结,也形成了我的一个博文系列<Hadoop学习笔 ...

随机推荐

  1. Linux(Debian)网卡设置

    debian IP地址配置 vim /etc/network/interface   配置网卡eth0的IP地址 auto eth0 表示网卡随系统自动请 iface eth0 inet static ...

  2. Win(Phone)10开发第(5)弹,本地媒体服务器的一些注意事项

    首先有个wp上的http服务器 http://wphttpserver.codeplex.com/ 使用方式: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...

  3. Nigix配置

  4. python中 使用join()方法 对各种数据类型中元的素进行合并拼接

    "连接符".join(列表或元组或字符串或字典) 返回的是一个使用连接符进行拼接的字符串 如果对象是列表,元组,就是以一个下标元素为单位进行拼接 如果对象是字符串,就是一个单词元素 ...

  5. poj1456---贪心

    题目大意: 有n个商品,每个商品有价值和一个最后期限,过了这个期限该商品就不能卖出去了 问你如何去卖,能得到最大的收益.(每个东西卖一天,不能同时卖两种东西) 思路: 贪心: 先按价值对商品排序,价值 ...

  6. poj3070矩阵快速幂求斐波那契数列

      Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13172   Accepted: 9368 Desc ...

  7. include与file_get_contents区别

    参考:http://www.cnblogs.com/bgwan/archive/2013/03/13/2957215.html 一,先来说file_get_contents         这个函数就 ...

  8. 使用dev-tool定位页面性能瓶颈

    这是部门同事的一次内部分享,听完后受益颇多,趁着记忆还算新鲜,赶紧记录一波. 从 dev-tool 看页面 parse 过程 时间都去哪儿了 当浏览器发送一个请求到接受所有响应数据截止,这个过程发生了 ...

  9. 记一次使用SecureCRT连接局域网巨慢的问题

    环境:Win7 32bit + SecureCRT 6.5 中文 使用工作机上的SecureCRT登录公司内网的跳板机,发现很慢,每次都得等待好几分钟才弹出输出私匙密码的框.咨询了一下其他同事,发现他 ...

  10. jvm(1)类的加载(三)(线程上下文加载器)

    简介: 类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的. Java Applet 需要从远程下载 Java 类文件到浏览器中并执行. 现在类加载器在 ...