【发布时间】:2014-12-27 13:01:49
【问题描述】:
我刚刚开始使用 Hadoop。我的问题对你来说可能很愚蠢,但它令人困惑。
我的问题是,如果我有 10TB 数据和 10 个节点,是否将数据复制到所有节点上,每个节点上都有 1 TB?
如果是这样,我会提交一个字数统计程序。 MapReduce 代码是否在每个节点上运行?如果是这样,一旦映射器完成,reducer 是否会在每个节点上启动?
提前致谢
【问题讨论】:
我刚刚开始使用 Hadoop。我的问题对你来说可能很愚蠢,但它令人困惑。
我的问题是,如果我有 10TB 数据和 10 个节点,是否将数据复制到所有节点上,每个节点上都有 1 TB?
如果是这样,我会提交一个字数统计程序。 MapReduce 代码是否在每个节点上运行?如果是这样,一旦映射器完成,reducer 是否会在每个节点上启动?
提前致谢
【问题讨论】:
欢迎使用 Hadoop。
数据分布取决于您的复制因子(hdfs-site.xml 中的dfs.replication)。如果因子为 1,则意味着所有数据在集群中只存储一次。 2 表示两次,依此类推。因此,在复制因子为 3 的情况下,10TB 的数据在集群中占用 30TB 的空间。大于 1 的复制因子也意味着同一个数据块不会在同一服务器中存储两次,而是副本驻留在其他服务器上。
一般来说,假设服务器是相同的,数据在整个集群中分布得相当均匀。如果由于某种原因分布不够均匀,您可以运行 Hadoop 平衡器进程来平衡集群。
数据节点旨在使用它们必须避免数据传输的数据运行映射阶段。所以所有节点都应该参与mapreduce。由于复制因子高于 1,我不确定工作是如何分布的,因为数据位于多个位置,但我想它应该是相当均匀地分布的。
【讨论】: