gpt4 book ai didi

python - Mapreduce:数据到节点的复杂分布

转载 作者:可可西里 更新时间:2023-11-01 16:55:33 31 4
gpt4 key购买 nike

我在 hadoop 方面没有实际经验 -- 我只学了一些理论。我面临的任务是使用集群处理一个巨大的 CSV 文件(比内存大得多),我想出了以下过程。

假设 csv 文件包含 3 亿行,我将 1-1 亿行称为第 1 部分,将 101-2 亿行称为第 2 部分,将 201-3 亿行称为第 3 部分。 (这只是一个例子,因为在实践中数据必须被分割成更多的部分以便在内存中处理)

我想按以下方式将数据分发到节点上。

节点号数据获取

节点 1 只有第 1 部分

节点 2 只有第 2 部分

节点 3 只有第 3 部分

节点 4 第 1 部分和第 2 部分

节点 5 第 2 部分和第 3 部分

节点 6 第 1 部分和第 3 部分

您会看到一些节点只获取数据的一部分,而一些节点获取 2 部分数据。根据这一点,两个函数之一应用于每个节点。我了解到这可以通过 reducer 中的 if-else 语句来完成。即我的 reducer 应该是这样的

如果(节点 1,2,3)运行函数 f1(data_block)

如果(节点 4,5,6)运行函数 f2(data_blockA,data_blockB)

问题是我学过的大部分hadoop例子都不允许每个节点选择要读取哪一部分数据。数据以一种相当黑盒的方式分发到节点。有什么办法可以解决这个问题吗?附言我正在考虑依赖 Hadoop 流,因为我的主要语言是 Python,而不是 Java,所以这可能是另一个限制。

最佳答案

HDFS架构中有 block 的概念。 HDFS 使用的典型 block 大小为 64 MB。当我们将一个大文件放入 HDFS 时,它被分成 64 MB 的 block (基于 block 的默认配置),假设你有一个 1GB 的文件并且你想将该文件放入 HDFS,那么将有 1GB/64MB = 16拆分/ block ,这些 block 将分布在数据节点上。

数据拆分基于文件偏移发生。文件拆分的目标是数据的并行处理和故障转移。

根据您的集群配置,这些 block / block 将驻留在不同的 DataNode 上。每个 block 都会分配一个 block ID,NameNode 会为每个文件保留 block 的信息。

假设你有一个 128MB 的文件,你想把这个文件写到 HDFS 上。

客户端机器首先将文件拆分成 block 说 block A, block B然后客户端机器与名称节点交互并询问写入的位置 block (Block A Block B).NameNode给出可用的datanode列表给client写入数据。

然后客户端从这些列表中选择第一个数据节点并将第一个 block 写入数据节点,一旦写入过程和复制完成,数据节点将 block 复制到另一个数据节点第一个数据节点给出关于它收到的 block 的确认。然后客户端写入这数据节点的另一个 block 。 NameNode 保留有关文件及其关联 block 的信息。

当客户端发出读取数据的请求时,它会再次向 NameNode 发出请求以获取特定文件的数据位置,然后 NameNode 将有关数据的 block 信息提供给客户端。

因此您无需担心 HDFS 上的数据替换问题。

您问题的答案:

没有其他方法可以控制 hadoop 上的数据替换策略,但是如果您根据 HDFS block 大小划分文件(假设 block 大小为 64MB,您的数据大小为 63MB),那么一个文件将占用一个 block ,并且它将继续一个特定的数据节点,但数据节点将再次被 NameNode 选择。稍后您可以检查文件所在的数据节点。

但是将小文件放在 hadoop 上并不是处理 hadoop 的有效方法,因为 hadoop 旨在处理非常大的数据集,而小文件可能是 NameNode 的开销。请参阅此链接以获取 small file problem on Hadoop

以下链接有助于了解更多有关 hadoop 的信息。

http://docs.spring.io/spring-hadoop/docs/2.0.4.RELEASE/reference/html/store.html

http://www.aosabook.org/en/hdfs.html

关于python - Mapreduce:数据到节点的复杂分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30397433/

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