使用FSDataInputStream获取HDFS的/user/hadoop/目录下的task.txt的文件内容,并输出,其中uri为hdfs://localhost:9000/user/hadoop/task.txt。
时间: 2024-11-25 09:14:10 浏览: 26
在Hadoop MapReduce框架中,要通过FSDataInputStream从HDFS获取文件内容,首先需要创建一个FileSystem实例,然后使用它来打开DataInputSteam。以下是使用Java的示例代码:
```java
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class HDFSFileReader {
public static void main(String[] args) throws Exception {
// 设置Hadoop配置
Configuration conf = new Configuration();
String uri = "hdfs://localhost:9000/user/hadoop/task.txt";
// 创建FileSystem实例
FileSystem fs = FileSystem.get(conf);
// 根据URI解析出文件路径
Path filePath = new Path(uri);
// 检查文件是否存在
if (!fs.exists(filePath)) {
System.out.println("The file does not exist at the given path.");
return;
}
// 打开文件并获取输入流
FSDataInputStream in = fs.open(filePath);
try {
// 读取文件内容
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) {
String content = new String(buffer, 0, bytesRead); // 可能需要指定字符编码,这里省略了
System.out.println(content);
}
} finally {
// 关闭输入流
in.close();
}
}
}
```
在这个例子中,我们首先设置了一个Hadoop配置,然后利用`FileSystem.get()`获取到HDFS文件系统。接着,我们创建了一个`Path`对象表示任务文件的路径。如果文件存在,就打开一个`FSDataInputStream`,并逐块读取文件内容并打印出来。
阅读全文