如何确定hdfs上面的文件对应的地址应该怎样表示?

确定HDFS文件地址的方法是通过使用hdfsgetconf-confKeyfs.defaultFS命令获取默认名称节点地址,例如hdfs://bigdata1:8020,然后添加文件路径,如/input/allword.txt。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何确定hdfs上面的文件对应的地址应该怎样表示?

public static String inputFilePath = "hdfs://bigdata1:8020/input/allword.txt";

解决方法:
使用hdfs getconf -confKey fs.default.name命令,获取地址前缀,然后后面补充目录等内容即可。

[tom@bigdata1 hadoop-3.1.3]$ hdfs getconf -confKey fs.default.name
2023-02-11 14:26:12,872 INFO Configuration.deprecation: fs.default.name is deprecated. Instead, use fs.defaultFS
hdfs://bigdata1:8020
[tom@bigdata1 hadoop-3.1.3]$ 
### 创建 `MyFSDataInputStream` 类 为了满足需求,可以创建一个名为 `MyFSDataInputStream` 的 Java 类,该类继承自 `org.apache.hadoop.fs.FSDataInputStream` 并添加了一个 `readLine()` 方法用于逐行读取 HDFS 文件。以下是具体的实现方式: #### 实现细节 1. **导入必要的包** 需要引入 Apache Hadoop 和其他标准库的相关包。 2. **定义 MyFSDataInputStream 类** 继承自 `org.apache.hadoop.fs.FSDataInputStream`,并重其构造函数以便能够接收底层输入流对象作为参数初始化父类实例。 3. **实现 readLine() 方法** 使用 `BufferedReader` 来封装传入的 `FSDataInputStream` 对象,从而提供高效的字符缓冲区支持以及方便调用 `readLine()` 函数完成按行读取操作;当遇到文件结尾时返回 null 值表示结束[^1]。 ```java import java.io.BufferedReader; import java.io.InputStreamReader; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class MyFSDataInputStream extends org.apache.hadoop.fs.FSDataInputStream { private final BufferedReader reader; public MyFSDataInputStream(org.apache.hadoop.fs.FSDataInputStream inputStream) { super(inputStream); this.reader = new BufferedReader(new InputStreamReader(inputStream)); } /** * Reads a line of text from the stream. * * @return A string containing the contents of the line, not including any line-termination characters, * or null if end-of-file has been reached. */ public String readLine() throws Exception { return reader.readLine(); } } ``` 4. **测试代码** 下面是一个简单的例子展示如何使用上述自定义类来打开位于 HDFS 上面的一个路径对应文件,并通过循环不断调用 `readLine()` 获取每一行直到返回值为 null 表明已经到达文档末尾位置[^2]。 ```java Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); Path filePath = new Path("/path/to/your/file"); try (MyFSDataInputStream myStream = new MyFSDataInputStream(fs.open(filePath))) { String line; while ((line = myStream.readLine()) != null) { System.out.println(line); } } catch (Exception e) { e.printStackTrace(); } fs.close(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值