Hadoop Part 5 - HDFS Java 编程访问
文章导航
Hadoop Part 5 - HDFS Java 编程访问
【版本】
当前版本号v20210430
版本 | 修改说明 |
---|---|
v20210430 | 修正 HdfsUtils 类名错误 |
v20210404 | 增加常见问题 |
v20210403 | 初始化版本 |
【实验名称】
Hadoop Part 5 - HDFS Java 编程访问
【实验目的】
- 掌握 HDFS 文件系统的 Java 编程接口的调用和编程
【实验环境】
- Windows 7 以上64位操作系统
【实验资源】
- Hadoop
- JDK 8 - Java Development Kit是 Oracle 公司针对Java开发人员发布的免费软件开发工具包,是 Java 开发必备的开发工具。
- Intellij IDEA - 业界简称IDEA,是 jetbrains 公司推出的和 Eclipse 齐名的 Java 集成开发环境(IDE)。
- Apache Maven - Apache Maven,是一个软件项目管理及自动构建工具,由Apache软件基金会所提供。是 Java 构建打包最广泛使用的工具。
下载链接:https://pan.baidu.com/s/1ghde86wcK6pwg1fdSSWg0w
提取码:v3wv
【实验参考】
类 org.apache.hadoop.fs.FileSystem 的 参考文档
【实验步骤】
打开 Part 4 的 hadoopexp 项目。
在项目
hadoop-exp\src\main\java
下创建一个名为hadoop+你学号后4位.hdfs
的包。注意替换为你的学号后4位。在包下面新建一个 HdfsUtils 的类。该类包含了一个在HDFS上创建文件并写入内容的方法
createFile
。代码如下,注意替换为你的学号后4位。
package hadoop你学号后4位.hdfs;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.IOException;
import java.net.URI;
public class HdfsUtils {
/**
* 在HDFS上创建文件并写入内容
* @param conf HDFS的配置
* @param hdfsFilePath HDFS创建的文件的路径
* @param content 写入文件的内容
* @param overwrite true表示覆盖原文件,false表示不覆盖
*/
public static boolean createFile(Configuration conf,URI uri,String hdfsFilePath,String content,boolean overwrite) {
FileSystem fs=null;
FSDataOutputStream os=null;
boolean rs=false;
try {
// 指定用户名 , 获取 FileSystem 对象
fs = FileSystem.get(uri, conf, "hadoop");
//定义文件路径
Path dfs = new Path(hdfsFilePath);
os = fs.create(dfs, overwrite);
//往文件写入信息
os.writeBytes(content);
//成功创建文件,设置为true
rs=true;
}catch(Exception e){
e.printStackTrace();
}finally {
try {
if(os!=null) {
// 关闭流
os.close();
}
if(fs!=null) {
// 不需要再操作 FileSystem 了,关闭
fs.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return rs;
}
}
在项目
hadoop-exp\src\test\java
下创建一个名为hadoop+你学号后4位.hdfs
的包。注意替换为你的学号后4位。在包下面新建一个 HdfsUtilsTest 的类,用于单元测试。代码如下,注意替换为你的学号后4位。此测试用例主要目的是在 HDFS 上创建一个文件,并把 “hello” 写入文件。
package hadoop替换为你学号后4位.hdfs;
import hadoop替换为你学号后4位.hdfs.HdfsUtils;
import org.apache.hadoop.conf.Configuration;
import org.junit.Test;
import java.net.URI;
public class HdfsUtilsTest {
@Test
public void testCreate() {
Configuration conf=new Configuration();
boolean rs=false;
//创建的文件路径
String filePath="/替换为你学号后4位/test.txt";
String content="hello";
try {
URI uri = new URI("hdfs://10.0.0.71:8020");
rs= HdfsUtils.createFile(conf, uri, filePath, content, true);
}catch(Exception e){
e.printStackTrace();
}
if(rs){
System.out.println("Create successfully!");
}else{
System.out.println("Create fail!");
}
}
}
复制文件 hadoop.dll 到 C:\Windows\System32 下。
启动虚拟机的 Hadoop。
运行HdfsUtilsTest。查看 IDEA 的控制台输出结果是否创建成功。
SSH 登录 NodeA,运行以下命令查看创建文件的内容输出。是否和创建的文件内容一致。注意替换为你的学号后4位。
hdfs dfs -cat /替换为你学号后4位/test.txt
- 参考以上代码和【实验参考】给出的 API 文档,完成以下编程要求
- (1)在
HdfsUtils
类新增一个uploadFile
方法,可以上传本地文件到 HDFS。 - (2)在
HdfsUtilsTest
类新增一个testUpload
方法,测试上传文件到 HDFS。 - (3)在
HdfsUtils
类新增一个dowloadFile
方法,可以下载 HDFS 文件到本地。 - (4)在
HdfsUtilsTest
类新增一个testDownload
方法,测试下载 HDFS 文件到本地。
##【常见问题】
报错:(null) entry in command string
这是缺少文件hadoop.dll文件 1、下载hadoop.dll文件 2、把文件放在:\windows\system32目录下