继上篇Hadoop入门第三篇后,我们今天来说一下HDFS客户端的操作。
准备工作:
这里我们先用伪分布式来说一下,所以我们要先有一个伪分布式。
1、HDFS客户端环境准备
1)根据自己电脑的操作系统拷贝对应的编译后的hadoop jar包到非中文路径(例如:C:\Study\tools)。
1.2.1.1 配置jdk的环境变量
一般学java的我们都会配好JDK的环境变量所以这里就不细说。
1.2.1.2 配置hadoop的环境变量
首先这里要创建HADOOP_HOME变量名和变量值
然后编辑系统变量中的Path
对Path进行编辑
添加变量%HADOOP_HOME%\bin
以上步骤就把我们环境变量配置好了。然后我们开始进行配置eclipse环境
- 1.2.2.1 在eclipse启动之前,先将hadoop-eclipse-plugin-2.6.0.jar复制到eclipse的安装目录下的plugins
- 1.2.2.2 启动eclipse
eclipse启动后,首先打开window——Show View——Other
进入到这个视图之后我们开始配置的端口号,此处的端口号是我们在伪分布式搭建成功后登陆50070后跳转页面上显示的接口号
然后在我们的虚拟机中先上传个文件,以便我们之后查看我们的文件。
我们先创建一个目录
[root@node01 ~]# hdfs dfs -mkdir -p /user/root
然后上传我们要上传的文件
[root@node01 ~]# hdfs dfs -put /etc/profile /user/root
/etc/profile 为我要上传的文件
/user/root 为我创建的目录
然后在我们eclipse中的左侧的小象刷新就可以显示我们已经上传到HDFS的文件了
2、创建项目
1)window——perferences
Hadoop Map/Reduce ——放置hadoop-2.6.5
java—build Path-----User Libraries—Add External然后把lib下的所有jar包导入进来
2)创建一个Java Project 项目
然后在我们的项目里右击----Build Path,导入我们所需要的User library—lib包
以及Junit包
创建conf文件夹,利用Xftp6这个软件把我们Linux中的配置文件拖出来。然后将这两个配置文件放入conf文件夹中,右击build,将它转化为资源包生效文件。
3、HDFS的API操作
3.1 创建一个类在其中编写我们的代码
//首先引入配置文件
Configuration conf=null;
//创建文件流
FileSystem fs=null;
@Before
public void conn() throws IOException {
//设置是否读取配置信息
conf=new Configuration(true);
fs=FileSystem.get(conf);
}
@After
public void close() throws IOException {
fs.close();
}
创建一个文件夹和判断是否存在以及删除文件夹
//创建删除重命名判断是否存在
@Test
public void mkdir() throws IOException {
//
Path f=new Path("/aaa");
//判断是否存在
if (fs.exists(f)) {
//删除文件夹
fs.delete(f);
}
fs.mkdirs(f);
}
//重命名
@Test
public void rn() throws IOException {
Path p1 = new Path("/user/root/profile");
Path p2 = new Path("/user/root/haha.txt");
boolean rename = fs.rename(p1, p2);
System.out.println(rename);
}
//上传文件
@Test
public void upload() throws IOException {
//输入位置 C:\\Users\\***\\Desktop\笔记.doc
//输出位置 /user/root
Path inputFile = new Path("/user/root/笔记.txt");
//文件内容输出
FSDataOutputStream output = fs.create(inputFile);
//输入
InputStream input=new BufferedInputStream(new FileInputStream(new File("C:\\\\Users\\\\吕宏达\\\\Desktop\\笔记.doc")));
IOUtils.copyBytes(input, output, conf, true);
}
//下载文件
@Test
public void download() throws IOException {
//从linux中上传到hdfs
//输入位置
Path src = new Path("/user/root/笔记.txt");
FSDataInputStream input = fs.open(src);
//输出位置
FileOutputStream output = new FileOutputStream("c:\\123\\笔记.txt");
IOUtils.copyBytes(input, output, conf, true);
}