gpt4 book ai didi

hadoop - 没有 Map/Reduce 的 HDFS 分布式读取

转载 作者:可可西里 更新时间:2023-11-01 14:16:12 25 4
gpt4 key购买 nike

是否可以在一台机器上使用 HDFS 客户端实现从 HDSF 集群的分布式读取?

我用一个由 3 个数据节点(DN1、DN2、DN3)组成的集群进行了实验。然后我从位于 DN1 上的客户端程序运行 10 个同时读取 10 个独立文件,它似乎只从 DN1 读取数据。其他数据节点(DN2、DN3)显示为零事件(从调试日志判断)。

我检查了所有文件的 block 是否在所有 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

感谢任何帮助。谢谢!

最佳答案

恐怕您看到的行为是设计使然。来自 Hadoop document :

Replica Selection

To minimize global bandwidth consumption and read latency, HDFS tries to satisfy a read request from a replica that is closest to the reader. If there exists a replica on the same rack as the reader node, then that replica is preferred to satisfy the read request. If angg/ HDFS cluster spans multiple data centers, then a replica that is resident in the local data center is preferred over any remote replica.

可以通过相应的Hadoop source code进一步确认:

  LocatedBlocks getBlockLocations(...) {
LocatedBlocks blocks = getBlockLocations(src, offset, length, true, true);
if (blocks != null) {
//sort the blocks
DatanodeDescriptor client = host2DataNodeMap.getDatanodeByHost(
clientMachine);
for (LocatedBlock b : blocks.getLocatedBlocks()) {
clusterMap.pseudoSortByDistance(client, b.getLocations());

// Move decommissioned datanodes to the bottom
Arrays.sort(b.getLocations(), DFSUtil.DECOM_COMPARATOR);
}
}
return blocks;
}

即,如果前一个失败,所有可用的副本都会一个接一个地尝试,但最近的总是第一个。

另一方面,如果您通过 HDFS Proxy 访问 HDFS 文件, 它确实选择数据节点 randomly .但我认为这不是您想要的。

关于hadoop - 没有 Map/Reduce 的 HDFS 分布式读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8454511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com