【发布时间】:2011-12-11 04:17:15
【问题描述】:
是否可以在一台机器上使用 HDFS 客户端从 HDSF 集群实现分布式读取?
我对一个由 3 个数据节点(DN1、DN2、DN3)组成的集群进行了实验。然后我从位于 DN1 的客户端程序的 10 个独立文件中同时读取 10 次,它似乎只从 DN1 读取数据。其他数据节点(DN2、DN3)显示零活动(从调试日志判断)。
我检查了所有文件的块是否在所有 3 个数据节点上复制,所以如果我关闭 DN1,那么数据将从 DN2 读取(仅限 DN2)。
增加读取的数据量没有帮助(尝试从 2GB 到 30GB)。
由于我需要读取多个大文件并仅从中提取少量数据(几 Kb),因此我想避免使用 map/reduce,因为它需要设置更多服务并且还需要写入输出每个拆分任务返回 HDFS。相反,将结果从数据节点直接流式传输回我的客户端程序会很好。
我正在使用SequenceFile 以这种方式(jdk7)读取/写入数据:
//Run in thread pool on multiple files simultaneously
List<String> result = new ArrayList<>();
LongWritable key = new LongWritable();
Text value = new Text();
try(SequenceFile.Reader reader = new SequenceFile.Reader(conf,
SequenceFile.Reader.file(filePath)){
reader.next(key);
if(key.get() == ID_I_AM_LOOKING_FOR){
reader.getCurrentValue(value);
result.add(value.toString());
}
}
return result; //results from multiple workers are merged later
任何帮助表示赞赏。谢谢!
【问题讨论】: