一、使用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. Git Commit 标准化

    1 前言Git Commit Message 应该清晰明了,要用精简的语言说明本次提交的目的,其主要作用是为了后续的搜索.版本的回滚.合并冲突的追溯等操作. 我们在开发时一直以来对 Git Commi ...

  2. C# 泛型实现Table与实体的相互转换

    public class ModelHandler<T> where T : new() { /// <summary> /// Table转换成实体 /// </sum ...

  3. 《JavaScript高级程序设计》第六章【面向对象的程序设计】 包括对象、创建对象、继承

    一.理解对象 二.创建对象      1. 工厂模式      2. 构造函数模式      3. 原型模式      4. 组合使用构造函数模式和原型模式[使用最广泛]      5. 动态原型模式 ...

  4. Android Studio - 如何停止logcat不断滚动信息?

    今天升级了一下Android Studio,升级之后准备调试程序,发现logcat里面不断滚动各种信息,我想调试程序非常困难了!滚动信息截图: 如何阻止自动出现的各种滚动信息,只显示我正在开发工程的调 ...

  5. PARSER_JS_PRECISION_RANGE_EXCEEDED 错误

    { [Error: parseLengthCodedNumber: JS precision range exceeded, number is >= 53 bit: "3037620 ...

  6. 四,php异常处理

    1,异常处理 异常处理用于在指定的异常或错误发生时,改变脚本的正常执行流程. <?php try{ //错误或异常 }catch (Exception $ex){ //处理异常 //抛出异常 } ...

  7. Android逆向进阶——让你自由自在脱壳的热身运动(dex篇)

    本文作者:HAI_ 0×00 前言 来看看我们今天的主题. 让你自由自在脱壳的热身运动. 现在很多第厂家都是使用第三方的加固方式来进行加固的.或者使用自己的加固方式进行加固. 那么我们必不可少的就是脱 ...

  8. jvm(2)类的初始化(一)

    [深入Java虚拟机]之三:类初始化 类初始化是类加载过程的最后一个阶段,到初始化阶段,才真正开始执行类中的Java程序代码. 1,下面说的初始化主要是类变量的初始化,实例变量的初始化触发条件不同(一 ...

  9. vue复选框选中值获取

    <div id="d5"> <p>{{box5.toString()}}</p> <input type="checkbox&q ...

  10. Python爬虫之关于登录那些事

    常见的登录方式有以下两种: 查看登录页面,csrf,cookie;授权:cookie 直接发送post请求,获取cookie 上面只是简单的描述,下面是详细的针对两种登录方式的时候爬虫的处理方法 第一 ...