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. 一起来读Netty In Action(一)

    Netty是一款异步事件驱动的网络应用程序框架,支持快速的开发可维护的高性能的面向协议的服务器和客户端.在网络编程中,阻塞.非阻塞.同步.异步经常被提到.同步(synchronous) IO和异步(a ...

  2. Hexo博客搭建

    http://www.jianshu.com/p/e99ed60390a8 http://blog.csdn.net/xuezhisdc/article/details/53130328 注意点: 1 ...

  3. Android监测手指上下左右滑动屏幕

    在开发android程序时,有时会需要监测手指滑动屏幕,当手指朝上下左右不同方向滑动时做出不同的响应,那怎么去实现呢? 利用Android提供的手势监测器就可以很方便的实现,直接上代码(已测试通过) ...

  4. python里如何保存float类型的小数的位数

    python保留两位小数: In [1]: a = 5.026 In [2]: b = 5.000 In [3]: round(a,2) Out[3]: 5.03 In [4]: round(b,2) ...

  5. Oracle中的decode()函数

    一.decode()函数 1.语法 DECODE(control_value,value1,result1[,value2,result2-][,default_result]); control _ ...

  6. Go缓存DNS

    Go里面的DNSclient没有带任何的缓存,语言层面没有任何的缓存,但是我们可以通过下面这样的代码来 这样当我们调用http.Client的时候就会采用这个缓存的ip了,里面用到的dnscache是 ...

  7. InfluxDB介绍

    InfluxDB介绍 InfluxDB用Go语言编写的一个开源分布式时序.事件和指标数据库,和传统是数据库相比有不少不同的地方. 类似的数据库有Elasticsearch.Graphite等. 特点 ...

  8. CAN总线的显性电平与隐性电平

    读CAN总线的书时,都会涉及到总线电平的问题,CAN总线的电平分为显性电平与隐性电平,这是CAN总线物理层的核心部分,也是总线仲裁的基础.那何为显性,何为隐性呢? 根据孔丙火(微信公众号:孔丙火)的理 ...

  9. java Dated Dateformat Calendar

    Date类概述 类Date表示特定的瞬间,精确到毫秒.1000毫秒=1秒 时间的原点:公元1970年 一月一日,午夜0:00:00 对应的毫秒值就是0 注意:时间和日期的计算,必须依赖毫秒值 long ...

  10. 大白话5分钟带你走进人工智能-第四节最大似然推导mse损失函数(深度解析最小二乘来源)(2)

    第四节  最大似然推导mse损失函数(深度解析最小二乘来源)(2) 上一节我们说了极大似然的思想以及似然函数的意义,了解了要使模型最好的参数值就要使似然函数最大,同时损失函数(最小二乘)最小,留下了一 ...