本文涉及Java操作HDFS是在windows下开发。
1.在windows下解压hadoop,在etc/hadoop中的hadoop.env.cmd修改以下值
set JAVA_HOME="C:\PROGRA~1\Java\jdk1.8.0_102"
2.将winutils.exe、hadoop.dll放到hadoop\bin下
如果运行时报以下异常:
Exception in thread "main" java.lang.RuntimeException: java.io.FileNotFoundException: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset.
需将 hadoop.dll拷贝到c:/windows/system32下
3.设置环境变量
HADOOP_HOME=d:\software\hadoop\hadoop-3.3.1
在path变量中追加%HADOOP_HOME%\bin
4.新建Java项目。
使用jar包开发:
项目下新建lib文件夹,将hadoop的jar包拷贝到lib文件夹中,然后导入到项目。
使用Maven开发
在pom.xml加入对应的Hadoop依赖:
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.3.1</version>
</dependency>
</dependencies>
5.代码
这里列举下载和上传的代码:
public class TestHDFS {
FileSystem fs;
public void init() {
try {
URI uri = new URI("hdfs://hp1:9000");
Configuration conf = new Configuration();
conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
fs = FileSystem.get(uri, conf, "root");
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
public void put() {
try {
fs.copyFromLocalFile(new Path("/root/apps/e.zip"),
new Path("/ee"));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//下载需要配置hadoop_home
public void get() {
try {
fs.copyToLocalFile(new Path("/test"),
new Path("d://test/sts.zip"));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
TestHDFS th = new TestHDFS();
th.init();
th.put();
//th.get();
}
}