1. 添加依赖
首先,确保你的项目中引入了Hadoop的依赖。如果你使用的是Maven项目,可以在pom.xml中添加以下依赖:
xml
复制
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>3.3.4</version> <!-- 根据你的Hadoop版本调整 -->
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>3.3.4</version> <!-- 根据你的Hadoop版本调整 -->
</dependency>
2. 编写代码
以下是一个完整的Java代码示例,展示如何将本地文件上传到HDFS:
java
复制
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.IOException;
public class HdfsFileUploader {
public static void main(String[] args) {
// 配置HDFS的地址
String hdfsUri = "hdfs://your-hadoop-namenode:8020"; // 替换为你的HDFS NameNode地址
String localFilePath = "/path/to/local/file.txt"; // 替换为本地文件路径
String hdfsFilePath = "/path/on/hdfs/file.txt"; // 替换为HDFS目标路径
// 创建HDFS配置
Configuration conf = new Configuration();
conf.set("fs.defaultFS", hdfsUri);
try {
// 获取HDFS文件系统实例
FileSystem fs = FileSystem.get(conf);
// 创建本地文件路径和HDFS目标路径
Path localPath = new Path(localFilePath);
Path hdfsPath = new Path(hdfsFilePath);
// 检查目标路径是否存在,如果存在则删除
if (fs.exists(hdfsPath)) {
fs.delete(hdfsPath, false);
}
// 将本地文件上传到HDFS
fs.copyFromLocalFile(localPath, hdfsPath);
System.out.println("文件上传成功!");
// 关闭文件系统
fs.close();
} catch (IOException e) {
e.printStackTrace();
System.out.println("文件上传失败!");
}
}
}
3. 代码说明
Configuration:用于配置HDFS的连接信息,如NameNode的地址。FileSystem:表示HDFS文件系统,通过它可以操作HDFS中的文件和目录。copyFromLocalFile:将本地文件上传到HDFS。exists和delete:用于检查目标路径是否存在,如果存在则删除,避免冲突。
4. 运行代码
- 确保你的Hadoop集群正在运行,并且NameNode和DataNode服务正常。
- 替换代码中的
hdfsUri、localFilePath和hdfsFilePath为实际的值。 - 编译并运行代码,如果一切正常,文件将被上传到指定的HDFS路径。
注意事项
- 确保Hadoop集群的配置文件(如
core-site.xml和hdfs-site.xml)在你的项目中可用,或者通过Configuration手动设置相关参数。