一、使用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. Struts2-057/CVE-2018-11776两个版本RCE漏洞分析(含EXP)

    0x01 前言 2018年8月22日,Apache Strust2发布最新安全公告,Apache Struts2存在远程代码执行的高危漏洞(S2-057/CVE-2018-11776),该漏洞由Sem ...

  2. C#图片处理,缩略图制作

    准备参数:图片文件流.文件名 方法:1.先将图片流通过System.Drawing.Image.FromStream方法转成图片对象 2.通过图片对象.GetThumbnailImage方法生成自定义 ...

  3. Wpf中显示Unicode字符

    1. 引言 今天在写一个小工具,里面有些字符用Unicode字符表示更合适.但是一时之间却不知道怎么写了.经过一番查找,终于找到了办法.记到这里,一是加深印象,二则以备查询. 2. C#中使用Unic ...

  4. c# 1-2+3-4.....求和

    找规律: 下界:1 上界:n class Program { static void Main(string[] args) { ; ; i <=; i++) { ==) { sum -= i; ...

  5. HDU4622 Reincarnation

    题目链接:戳我 因为对应的很多询问,所以我们一定要将每一种询问先处理出来,然后O(1)查询. 至于怎么处理出来子串的子串呢? 我们固定左端点,然后依次加入子串即可.然后统计的时候直接统计last那一个 ...

  6. Java基础学习篇---------static

    一.static的使用 1.使用static定义的属性往往通过类名直接调用,它的属性(方法)不属于某一个的对象的.所以对象没有创建之前就可以对static的属性的调用,方法亦如此. 2.static ...

  7. “全栈2019”Java多线程第二十七章:Lock获取lock/释放unlock锁

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  8. [Other] 应用下载网站的APK/IPA等常见MIME设置

    类型 扩展名 mime 错误做法 安卓安装包 .apk application/vnd.android.package-archive application/vnd.android 苹果安装包 .i ...

  9. windows系统正常但linux系统下找不到文件的问题

    问题描述:最近一个项目开发环境是windows系统,正式环境是linux系统.验证码图片在开发环境正常,但是在正式环境下一直报404. 问题原因:File dir = new File(realPat ...

  10. day 33js 后续 函数.对象

    前情提要: 今天学习的是js的函数以及简单的类的使用 一:函数的初识别 <!DOCTYPE html> <html lang="en"> <head& ...