Hadoop系列007-HDFS客户端操作
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客户端操作的更多相关文章
- Hadoop JAVA HDFS客户端操作
JAVA HDFS客户端操作 通过API操作HDFS org.apache.logging.log4jlog4j-core2.8.2org.apache.hadoophadoop-common${ha ...
- Hadoop之HDFS客户端操作
1. HDFS 客户端环境准备 1.1 windows 平台搭建 hadoop 2.8.5 2. 创建Maven工程 # pom.xml <dependencies> <depend ...
- hadoop笔记之hdfs shell操作
HDFS命令行操作 HDFS命令行操作 (以下是hadoop 1.x 版本的命令使用) 装好hadoop之前首先要进行一个格式化 hadoop namenode -format 运行之后,可以将文件夹 ...
- Hadoop学习(2)-java客户端操作hdfs及secondarynode作用
首先要在windows下解压一个windows版本的hadoop 然后在配置他的环境变量,同时要把hadoop的share目录下的hadoop下的相关jar包拷贝到esclipe 然后Build Pa ...
- 大数据学习——hdfs客户端操作
package cn.itcast.hdfs; import org.apache.commons.io.IOUtils; import org.apache.hadoop.conf.Configur ...
- 对Hadoop分布式文件系统HDFS的操作实践
原文地址:https://dblab.xmu.edu.cn/blog/290-2/ Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)是Hadoop核 ...
- HDFS客户端操作(JAVA代码)
环境准备 windows需要配置hadoop的windows下的依赖 安装包地址: 链接:https://pan.baidu.com/s/1QtbH-x-S0QytkmaoSosdEw 提取码:2kt ...
- hadoop系列二:HDFS文件系统的命令及JAVA客户端API
转载请在页首明显处注明作者与出处 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的一些内容,如hadoop,spark,storm,机器学习等. 当前使用的hadoop版本为2.6 ...
- Hadoop HDFS的shell(命令行客户端)操作实例
HDFS的shell(命令行客户端)操作实例 3.2 常用命令参数介绍 -help 功能:输出这个命令参数手册 -ls 功能:显示目录信息 示例: hadoop fs ...
随机推荐
- 你不知道的JavaScript--Item25 创建对象(类)的8种方法总结
1. 使用Object构造函数来创建一个对象 下面代码创建了一个person对象,并用两种方式打印出了Name的属性值. var person = new Object(); person.name= ...
- Postman 使用详解
转自: http://blog.csdn.net/flowerspring/article/details/52774399 Postman 使用详解 阅读 6754收藏 3022016-6-9 作者 ...
- Go-技篇第二 命名规范
优秀的命名 优秀的命名应当是一贯的.短小的.精确的.所谓一贯,就是说同一个意义在不同的环境下的命名应当一致,譬如依赖关系,不要在一个方法中命名为depend,另一个方法中命名为rely.所谓短小,不必 ...
- BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集
BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集 Description 农夫约翰有N(2≤N≤40000)个农场,标号1到N,M( ...
- ES6知识整理(1)--let和const命令
最近准备在业余空闲时间里一边学习ES6,一边整理相关知识.只有整理过的学习才是有效的学习.也就是学习之后要使用和整理成文,才是正在的学到了... 那么现在开始 LINK START!(首先是第一讲,前 ...
- Docker系列之swarm集群搭建
学习Docker很久了,今天分享一下Docker的swarm集群的搭建过程很简单 首先第一步是 每台机器上面都要安装docker 本人使用的是centos7操作系统,使用3太虚拟机,3太虚拟机必须网络 ...
- 遍历数组 foreach
package com.java.array; public class Myforeach { public static void main(String[] ARGS){ /* int arr[ ...
- 【工具篇】抓包中的王牌工具—Fiddler (1-环境搭建)
导言 在现在高速发展的互联网时代,抓包工具被广泛应用在软件开发的项目中,Fiddler可谓是当下主流的抓包工具之一.测试人员用它来抓包.回放测试记录,构造发包测试用例,开发人员用来定位问题,其强大的功 ...
- 深度学习之卷积神经网络(CNN)的应用-验证码的生成与识别
验证码的生成与识别 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10755361.html 目录 1.验证码的制 ...
- Docker最全教程之使用TeamCity来完成内部CI、CD流程(十六)
本篇教程主要讲解基于容器服务搭建TeamCity服务,并且完成内部项目的CI流程配置.教程中也分享了一个简单的CI.CD流程,仅作探讨.不过由于篇幅有限,完整的DevOps,我们后续独立探讨. 为了降 ...