title: Hadoop系列007-HDFS客户端操作

date: 2018-12-6 15:52:55

updated: 2018-12-6 15:52:55

categories: Hadoop

tags: [Hadoop,HDFS,HDFS客户端]


本人微信公众号,欢迎扫码关注!

HDFS客户端操作

1 环境准备

1.1 Jar包准备

1)解压hadoop-2.7.2.tar.gz到非中文目录

注意1:如果使用WinRAR解压报错的话,就使用超级管理员权限打开DOS窗口,然后cd到解压包所在位置,执行start winrar x -y xxx.tar.gz命令,即可成功

注意2:使用对应平台下编译后的hadoop源码包,即win7系统使用在win7下编译后的源码包,win10同理。

2)进入share文件夹,查找所有jar包,并把jar包拷贝到_lib文件夹下

3)在全部jar包中查找.source.jar,并剪切到_source文件夹。

4)在全部jar包中查找tests.jar,并剪切到_test文件夹。

1.2 IDEA准备

1)配置HADOOP_HOME环境变量

2)建立工程并且添加依赖

注意:Eclipse全选Jar包右键Add Build Path

3)编写代码测试


4)执行程序

客户端去操作hdfs时,是有一个用户身份的。默认情况下,hdfs客户端api会从jvm中获取一个参数来作为自己的用户身份:-DHADOOP_USER_NAME=atguigu,atguigu为用户名称。

5)验证

2 通过API操作HDFS

2.1 HDFS获取文件系统
@Test
public void getFileSystem() {
// 1 创建配置对象
Configuration conf = new Configuration();
// 2 获取文件系统
FileSystem fs = null;
try {
fs = FileSystem.get(new URI("hdfs://hadoop102:8020"), conf, "intflag"); // 3 打印文件系统
System.out.println(fs);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
} finally {
if (fs != null) {
try {
fs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

2.2 HDFS文件上传
@Test
public void putFileToHDFS() {
// 1 获取文件系统
FileSystem fs = getFileSystem();
// 2 上传文件
try {
fs.copyFromLocalFile(true,new Path("D:/test/x3.000"), new Path("/user/intflag/input/x3.000"));
} catch (IOException e) {
e.printStackTrace();
} finally {
// 3 关闭资源
closeFileSystem(fs);
}
}
2.3 HDFS文件下载
@Test
public void getFileFromHDFS() {
// 1 获取文件系统
FileSystem fs = getFileSystem();
// 2 下载文件
try {
fs.copyToLocalFile(new Path("/user/intflag/input/x3.000"),new Path("D:/test/x3.000"));
} catch (IOException e) {
e.printStackTrace();
} finally {
// 3 关闭资源
closeFileSystem(fs);
}
}
2.4 HDFS目录创建
/**
* 在HDFS上创建文件夹
*/
@Test
public void mkdirAtHDFS() {
// 1 获取文件系统
FileSystem fs = getFileSystem();
// 2 创建文件夹
try {
fs.mkdirs(new Path("/user/intflag/test"));
} catch (IOException e) {
e.printStackTrace();
} finally {
// 3 关闭资源
closeFileSystem(fs);
}
}
2.5 HDFS文件夹删除
/**
* 删除HDFS上的文件夹
*/
@Test
public void deleteDirAtHDFS() {
// 1 获取文件系统
FileSystem fs = getFileSystem();
// 2 删除文件夹
try {
//fs.delete(new Path("/user/intflag/test"));
fs.delete(new Path("/user/intflag/test"),true);
} catch (IOException e) {
e.printStackTrace();
} finally {
// 3 关闭资源
closeFileSystem(fs);
}
}
2.6 HDFS文件名更改
/**
* 重命名HDFS上的文件夹
*/
@Test
public void renameDirAtHDFS() {
// 1 获取文件系统
FileSystem fs = getFileSystem();
// 2 重命名文件夹
try {
fs.rename(new Path("/user/intflag/test"), new Path("/user/intflag/test22"));
} catch (IOException e) {
e.printStackTrace();
} finally {
// 3 关闭资源
closeFileSystem(fs);
}
}
2.7 HDFS文件详情查看
/**
* 读取HDFS上的文件信息
*/
@Test
public void readFileAtHDFS() {
// 1 获取文件系统
FileSystem fs = getFileSystem();
// 2 读取文件信息
try {
RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);
while (listFiles.hasNext()) {
LocatedFileStatus status = listFiles.next();
System.out.println("-----------------------------------");
System.out.println("文件名称:"+status.getPath().getName());
System.out.println("块的大小:"+status.getBlockSize());
System.out.println("内容长度:"+status.getLen());
System.out.println("文件权限:"+status.getPermission());
}
} catch (IOException e) {
e.printStackTrace();
} finally {
// 3 关闭资源
closeFileSystem(fs);
}
}
-----------------------------------
文件名称:asd.txt
块的大小:134217728
内容长度:34
文件权限:rw-r--r--
-----------------------------------
文件名称:hadoop-2.7.2.tar.gz
块的大小:134217728
内容长度:197657687
文件权限:rw-r--r--
-----------------------------------
文件名称:liugx.txt
块的大小:134217728
内容长度:64
文件权限:rw-r--r--
-----------------------------------
文件名称:x3.000
块的大小:134217728
内容长度:592
文件权限:rw-r--r-- Process finished with exit code 0
2.8 HDFS文件夹查看
/**
* 读取文件夹信息
*/
@Test
public void readFfolderAtHDFS() {
// 1 获取文件系统
FileSystem fs = getFileSystem();
// 2 读取文件夹信息
try {
FileStatus[] listStatus = fs.listStatus(new Path("/user/intflag/"));
for (FileStatus status : listStatus) {
if (status.isFile()) {
System.out.println("f----"+status.getPath().getName());
} else {
System.out.println("d----"+status.getPath().getName());
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
// 3 关闭资源
closeFileSystem(fs);
}
}

3 通过IO流操作HDFS

3.1 HDFS文件上传
/**
* 文件上传到HDFS
*/
@Test
public void putFileToHDFS() {
// 1 获取HDFS
FileSystem fs = getFileSystem(); try {
// 2 获取输出流
FSDataOutputStream fos = fs.create(new Path("/user/intflag/input/x3.000"));
// 3 获取输入流
FileInputStream fis = new FileInputStream(new File("D:/test/x3.000"));
// 4 流对接
IOUtils.copyBytes(fis, fos, new Configuration());
// 5 关闭流
IOUtils.closeStream(fis);
IOUtils.closeStream(fos);
} catch (IOException e) {
e.printStackTrace();
} finally {
// 5 关闭资源
closeFileSystem(fs);
}
}
3.2 HDFS文件下载
/**
* 下载文件
*/
@Test
public void getFileFromHDFS() {
// 1 获取HDFS
FileSystem fs = getFileSystem(); try {
// 2 获取输入流
FSDataInputStream fis = fs.open(new Path("/user/intflag/input/liugx.txt")); // 3 获取输出流
FileOutputStream fos = new FileOutputStream(new File("D:/test/liugx.txt")); // 4 流对接
IOUtils.copyBytes(fis, fos, new Configuration());
// 5 关闭流
IOUtils.closeStream(fis);
IOUtils.closeStream(fos);
} catch (IOException e) {
e.printStackTrace();
} finally {
// 5 关闭资源
closeFileSystem(fs);
}
}
3.3 定位文件读取

下载第一块

/**
* 下载大文件-下载第一块
*/
@Test
public void getFileFromHDFSSeek1() {
// 1 获取HDFS
FileSystem fs = getFileSystem(); try {
// 2 获取输入流
FSDataInputStream fis = fs.open(new Path("/user/intflag/input/hadoop-2.7.2.tar.gz")); // 3 获取输出流
FileOutputStream fos = new FileOutputStream(new File("D:/test/hadoop-2.7.2.tar.gz.part1")); // 4 流对接(只读取128m)
byte[] buff = new byte[1024];
//1024 * 1024 * 128
int len = 1024 * 128;
for (int i = 0; i < len; i++) {
fis.read(buff);
fos.write(buff);
}
// 5 关闭流
IOUtils.closeStream(fis);
IOUtils.closeStream(fos);
} catch (IOException e) {
e.printStackTrace();
} finally {
// 5 关闭资源
closeFileSystem(fs);
}
}

下载第二块

/**
* 下载大文件-下载第二块
*/
@Test
public void getFileFromHDFSSeek2() {
// 1 获取HDFS
FileSystem fs = getFileSystem(); try {
// 2 获取输入流
FSDataInputStream fis = fs.open(new Path("/user/intflag/input/hadoop-2.7.2.tar.gz")); // 3 获取输出流
FileOutputStream fos = new FileOutputStream(new File("D:/test/hadoop-2.7.2.tar.gz.part2")); // 4 流对接(只读取128m)
// 定位到128m
int len = 1024 * 1024 * 128;
fis.seek(len);
IOUtils.copyBytes(fis,fos,new Configuration()); // 5 关闭流
IOUtils.closeStream(fis);
IOUtils.closeStream(fos);
} catch (IOException e) {
e.printStackTrace();
} finally {
// 5 关闭资源
closeFileSystem(fs);
}
}

合并文件

打开DOS窗口,定位到下载后的位置,输入以下命令合并文件
type hadoop-2.7.2.tar.gz.part2 >> hadoop-2.7.2.tar.gz.part1
然后重命名文件hadoop-2.7.2.tar.gz.part1,将文件.part1去掉
打开文件验证

Hadoop系列007-HDFS客户端操作的更多相关文章

  1. Hadoop JAVA HDFS客户端操作

    JAVA HDFS客户端操作 通过API操作HDFS org.apache.logging.log4jlog4j-core2.8.2org.apache.hadoophadoop-common${ha ...

  2. Hadoop之HDFS客户端操作

    1. HDFS 客户端环境准备 1.1 windows 平台搭建 hadoop 2.8.5 2. 创建Maven工程 # pom.xml <dependencies> <depend ...

  3. hadoop笔记之hdfs shell操作

    HDFS命令行操作 HDFS命令行操作 (以下是hadoop 1.x 版本的命令使用) 装好hadoop之前首先要进行一个格式化 hadoop namenode -format 运行之后,可以将文件夹 ...

  4. Hadoop学习(2)-java客户端操作hdfs及secondarynode作用

    首先要在windows下解压一个windows版本的hadoop 然后在配置他的环境变量,同时要把hadoop的share目录下的hadoop下的相关jar包拷贝到esclipe 然后Build Pa ...

  5. 大数据学习——hdfs客户端操作

    package cn.itcast.hdfs; import org.apache.commons.io.IOUtils; import org.apache.hadoop.conf.Configur ...

  6. 对Hadoop分布式文件系统HDFS的操作实践

    原文地址:https://dblab.xmu.edu.cn/blog/290-2/ Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)是Hadoop核 ...

  7. HDFS客户端操作(JAVA代码)

    环境准备 windows需要配置hadoop的windows下的依赖 安装包地址: 链接:https://pan.baidu.com/s/1QtbH-x-S0QytkmaoSosdEw 提取码:2kt ...

  8. hadoop系列二:HDFS文件系统的命令及JAVA客户端API

    转载请在页首明显处注明作者与出处 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的一些内容,如hadoop,spark,storm,机器学习等. 当前使用的hadoop版本为2.6 ...

  9. Hadoop HDFS的shell(命令行客户端)操作实例

    HDFS的shell(命令行客户端)操作实例 3.2 常用命令参数介绍 -help 功能:输出这个命令参数手册 -ls                  功能:显示目录信息 示例: hadoop fs ...

随机推荐

  1. 你不知道的JavaScript--Item25 创建对象(类)的8种方法总结

    1. 使用Object构造函数来创建一个对象 下面代码创建了一个person对象,并用两种方式打印出了Name的属性值. var person = new Object(); person.name= ...

  2. Postman 使用详解

    转自: http://blog.csdn.net/flowerspring/article/details/52774399 Postman 使用详解 阅读 6754收藏 3022016-6-9 作者 ...

  3. Go-技篇第二 命名规范

    优秀的命名 优秀的命名应当是一贯的.短小的.精确的.所谓一贯,就是说同一个意义在不同的环境下的命名应当一致,譬如依赖关系,不要在一个方法中命名为depend,另一个方法中命名为rely.所谓短小,不必 ...

  4. BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集

    BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集 Description     农夫约翰有N(2≤N≤40000)个农场,标号1到N,M( ...

  5. ES6知识整理(1)--let和const命令

    最近准备在业余空闲时间里一边学习ES6,一边整理相关知识.只有整理过的学习才是有效的学习.也就是学习之后要使用和整理成文,才是正在的学到了... 那么现在开始 LINK START!(首先是第一讲,前 ...

  6. Docker系列之swarm集群搭建

    学习Docker很久了,今天分享一下Docker的swarm集群的搭建过程很简单 首先第一步是 每台机器上面都要安装docker 本人使用的是centos7操作系统,使用3太虚拟机,3太虚拟机必须网络 ...

  7. 遍历数组 foreach

    package com.java.array; public class Myforeach { public static void main(String[] ARGS){ /* int arr[ ...

  8. 【工具篇】抓包中的王牌工具—Fiddler (1-环境搭建)

    导言 在现在高速发展的互联网时代,抓包工具被广泛应用在软件开发的项目中,Fiddler可谓是当下主流的抓包工具之一.测试人员用它来抓包.回放测试记录,构造发包测试用例,开发人员用来定位问题,其强大的功 ...

  9. 深度学习之卷积神经网络(CNN)的应用-验证码的生成与识别

    验证码的生成与识别 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10755361.html 目录 1.验证码的制 ...

  10. Docker最全教程之使用TeamCity来完成内部CI、CD流程(十六)

    本篇教程主要讲解基于容器服务搭建TeamCity服务,并且完成内部项目的CI流程配置.教程中也分享了一个简单的CI.CD流程,仅作探讨.不过由于篇幅有限,完整的DevOps,我们后续独立探讨. 为了降 ...