使用Java API访问Hdfs服务器
本文使用IDEA 通过Java方式,远程访问/操作hdfs服务器,实现window本地文件与hdfs服务器端文件的互传,以及使用java远程创建和删除hdfs服务器上的文件
一、运行环境
- 使用Maven创建一个新的项目testToHdfs,步骤如下:
选择maven…quickstart
创建项目名称:testToHdfs
选择本地Maven工程的安装路径:
选择Maven/conf 文件夹下的setting.xml文件:
选择setting文件中指定设置好的jarstore文件夹:
注:可以查看maven安装目录conf文件夹下的setting文件:
创建完成,进入IDEA界面,将下图中1.7改成1.8, 4.11改成4.12
在<dependencies>...</dependencies>
中插入以下代码,引入相关jar包
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.6.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.6.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
点击IDEA界面右下角的import Changes 引入jar包:
2.window配置hadoop环境:
①:以管理员运行,将准备好的hadoop安装包解压到当前路径文件夹下,
②:将准备好的hadoopBin压缩包解压,
复制hadoopbin文件夹中的所有文件,拷贝至步骤①中hadoop-2.6.0-cdh5.14.2文件夹bin目录下
③:将hadoopBin中hadoop.dll文件,拷贝至 C:\Windows\System32 目录下
④:设置window系统的环境变量:
- 添加 HADOOP_HOME 路径:
如下图所示:
- 添加 HADOOP_HOME的bin路径:
%HADOOP_HOME%\bin
%HADOOP_HOME%\sbin
如下图所示:
二、java连接hdfs服务器
- 开启Linux虚拟机hadoop-1,开启hdfs服务:
start-dfs.sh
- 创建resouces目录,使之成为默认资源目录,将准备好的log-4j.properties粘贴至目录下:
- IDEA创建实体类 HdfsClient
相关代码如下:
①上传文件:
@Test
public void testCopyFromLocalFile() throws Exception{
//1.创建配置文件
Configuration conf= new Configuration();
//2.获取文件系统
FileSystem fs=FileSystem.get(new URI("hdfs://192.168.37.101:9000"),conf,"root");
//3.调用API操作
fs.copyFromLocalFile(new Path("f:/test/mobile.txt"),new Path("/hdfs"));
fs.close();
}
②:下载文件:
@Test
public void testCopyFromHdfs() throws Exception{
//1.创建配置文件
Configuration conf= new Configuration();
//2.获取文件系统
FileSystem fs=FileSystem.get(new URI("hdfs://192.168.37.101:9000"),conf,"root");
//3.调用API操作
fs.copyToLocalFile(new Path("/hdfs/mobile.txt"),new Path("f:/"));
fs.close();
}
③:创建一个文件夹:
@Test
public void testMkdirs()throws Exception{
//1.创建配置文件
Configuration conf = new Configuration();
//2.获取文件系统
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.37.101:9000"),conf,"root");
//3.调用API操作
fs.mkdirs(new Path("/hdfs/shell"));
//4.关闭资源
fs.close();
}
④:删除文件:
@Test
public void testDelete()throws Exception{
//1.创建配置
Configuration conf = new Configuration();
//2.获取文件系统
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.37.101:9000"),conf,"root");
//3.调用API
//代表递归删除
fs.delete(new Path("/hdfs/mobile.txt"),true);
//4.关闭资源
fs.close();
}
注:验证操作是否成功可以在 http://192.168.37.101:50070 页面查看(92.168.37.101为虚拟机haoop-1的ip地址)
如图: