Hadoop之简单的hdfs上文件的上传删除及查询

概览

1.Linux上进行上传下载查询操作
2.Java代码实现上传下载查询操作

上次将Hadoop集群版搭建完成了,那么怎么上传下载文件呢?

1.Linux上进行上传下载查询操作

首先将Hadoop服务启动

将master,slave1,slave2三台虚拟机启动

在master上启动Hadoop服务

1
start-all.sh

然后jps查看命令是否启动成功,和Hadoop集群搭建中验证方法一致

确认启动成功后,使用Xshell分别连接虚拟机

这时候需要你先将需要操作的文件传输到虚拟机中或者在虚拟机中创建文件

使用Xftp将文件上传到虚拟机中或者自己创建文件,我们就将文件放置在/usr/tmp中

1
cd /usr/tmp

然后我们创建一个文本文件

1
2
3
4
#touch 创建文件 mkdir 创建文件夹
touch test
#编辑文件
vim test

可以随便输入一些内容

1
2
3
4
5
6
hello world
hello lilei
hello haimeimei
hello hadoop
hello girl
hello girl

保存退出
然后将文件上传到hdfs根目录中

1
2
3
4
5
6
7
8
#将文件上传到Hadoop根目录中
hadoop fs -put test /
#查看是否上传成功
hadoop fs -ls /
#查看文件内容,发现与之前的内容相同则上传成功
#如果你在安装虚拟机的时候没有选择中文,而在文件中有中文内容,有可能造成乱码
hadoop fs -cat /test
#hdfs上的文件是不支持修改的

文件上传成功了,那么接下来试一试文件夹

1
2
3
4
5
6
#创建文件夹
mkdir testdir
#上传
hadoop fs -put testdir /
#查看
hadoop fs -ls /

删除文件/文件夹

1
2
3
4
5
6
#删除文件 
hadoop fs -rm -f /test
#删除文件夹
hadoop fs -rm -r /testdir
#查看
hadoop fs -ls /

将hdfs上的文件下载到本地

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#将文件上传上去
[root@master tmp]# hadoop fs -put test /
#将test改名为test1
[root@master tmp]# hadoop fs -mv /test /test1
#查看文件内容
[root@master tmp]# hadoop fs -cat /test1
hello world
hello lilei
hello haimeimei
hello hadoop
hello girl
hello girl
#文件下载
[root@master tmp]# hadoop fs -get /test1
#查看tmp文件夹下的内容
[root@master tmp]# ls
test test1 testdir

这就是几种基本的Linux上进行上传下载查询操作

2.Java代码实现上传下载查询操作

启动eclipse或者其他工具
新建个Java项目,test包,TestHadoop类

然后在项目下创建个lib文件夹存放jar包

将hadoop解压文件夹中的jar复制到lib内
如图,大概共有69个jar包
在这里插入图片描述
在这里插入图片描述

然后在eclipse中选择lib文件夹下所有jar包–>右键Build Path–>add to Build Path

因为是测试类,所以我们将JUnit4导入到Path中

在项目上右键–>Build Path–>Confirgure Build Path

在这里插入图片描述
在这里插入图片描述

然后,这是TestHadoop的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package com.hd.test;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Test;

public class TestHadoop {
/**
* 上传文件
* @throws IOException
* @throws InterruptedException
* @throws URISyntaxException
*/
@Test
public void upLoad() throws IOException, InterruptedException, URISyntaxException{
// 创建config对象
Configuration conf = new Configuration();
// 创建FileSystem对象 192.168.134.154是你的主机master的ip地址,root是你的用户名
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.134.154:9000"), conf, "root");
// 把本地磁盘上的文件(这个文件可以自己选择)上传到hdfs上面的根目录上,这里可以改名
fs.copyFromLocalFile(false, new Path("d:/TABS.DBF"), new Path("/abc.a"));
// 关闭
fs.close();
}
/**
* 下载
* @throws IOException
* @throws InterruptedException
* @throws URISyntaxException
*/
@Test
public void downLoad() throws IOException, InterruptedException, URISyntaxException{
// 创建config对象
Configuration conf = new Configuration();
// 创建FileSystem对象
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.134.154:9000"), conf, "root");
// 把hdfs上面的根目录上的文件下载到本地磁盘上
fs.copyToLocalFile(false, new Path("/abc.a"), new Path("E:/"), true);
// 关闭
fs.close();
}
/**
* 删除
* @throws IOException
* @throws InterruptedException
* @throws URISyntaxException
*/
@Test
public void del() throws IOException, InterruptedException, URISyntaxException{
// 创建config对象
Configuration conf = new Configuration();
// 创建FileSystem对象
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.134.154:9000"), conf, "root");
// 删除,false只能删除空文件夹
fs.delete(new Path("/abc.a"), true);
// 关闭
fs.close();
}
/**
* 创建文件夹
* @throws IOException
* @throws InterruptedException
* @throws URISyntaxException
*/
@Test
public void mkdir() throws IOException, InterruptedException, URISyntaxException{
// 创建config对象
Configuration conf = new Configuration();
// 创建FileSystem对象
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.134.154:9000"), conf, "root");
// 创建目录
fs.mkdirs(new Path("/a/b"));
// 关闭
fs.close();
}
/**
* 遍历查询输出
* @throws FileNotFoundException
* @throws IllegalArgumentException
* @throws IOException
* @throws InterruptedException
* @throws URISyntaxException
*/
@Test
public void out() throws FileNotFoundException, IllegalArgumentException, IOException, InterruptedException, URISyntaxException{
// 创建config对象
Configuration conf = new Configuration();
// 创建FileSystem对象
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.134.154:9000"), conf, "root");
// 遍历
FileStatus[] status = fs.listStatus(new Path("/"));

for (int i = 0; i < status.length; i++) {
if (status[i].isFile()) {
System.err.println("文件:" + status[i].getPath().toString());
} else if (status[i].isDirectory()) {
System.err.println("目录:" + status[i].getPath().toString());
}
}
// 关闭
fs.close();
}

}

每次运行只要双击方法名然后右键Run –>JUnit Test就能测试运行

然后分别在hdfs上 , 本地E盘 和 eclipse控制台 查看是否运行成功

以后会接着介绍更多的关于hadoop的操作