file - 我可以在 hdfs (hadoop) 中复制数据吗

标签 file hadoop mapreduce hdfs replication

我是 hadoop 的新手 (v 2.6.0) 我在我的论文中使用 hadoop (Linux) 中的遗传算法。 我的问题:

1:我想在所有从机的 hdfs 位置复制文件输入(文本)(不分区文件) 例如,我有一个文件(200 Mb),我想将所有文件发送给从属设备。(从属设备 1 为 200,从属设备 2 为 200 ...等等) 这可能吗?如果可能的话,这样做的关键是什么?

2:第二个问题:我有2个slaves和1个master ...当我启动时,我的程序是否默认在所有slaves中执行?或者 hadoop 决定哪个 slave 将执行程序?如果 hadoop 决定我如何让我的程序在所有 slaves 中无一异常(exception)地可执行?我希望这是可能的。 因为当我的程序启动时,我看到它只在从机 2(而不是从机 1)中执行。

用他的评论回答中的文本编辑 1

谢谢你提供的这些细节,我的数据不能任意增长:如果我理解你是对的......好吧,如果我的数据中有 200 个人......它用这个算法增加了 200 个人......

如果我指定 30 条染色体,算法将在每个节点中执行(在输入文件的数据库中)并在执行中执行 30 条染色体...此参数将在开始前由我指定我的代码。它们不是在我的算法中可以任意变大的参数。

你能给我更多关于 InputFormat 的细节来开始我的算法吗)

使用他的第二个评论-答案中的文本编辑 2

In this document你可以在 c:related work 中找到这部分说: The existent literature proposed some parallel version of GAs using the MapReduce paradigm.第一个是基于 .Net 的扩展,通过添加第二个 Reducer,名为“MRPGA”[6] 的 MapReduce。在此实现中,协调器客户端管理并行 GA 迭代的执行。所选模型是孤岛模型,其中每个参与节点为整个种群的一部分计算 GA 操作。在第一阶段,每个 Mapper 节点接收自己的部分种群并计算其每个个体的适应度值。第一个reduce 阶段的Reducer 节点接收相应岛的个体并应用选择函数。最终的 Reducer 计算全局选择和其他后续 GA 函数。

本文档仅详细介绍了此方法。这里的人口部分是指染色体的数量。(如果您决定使用 2000 条染色体和 5 个奴隶,则一组名为人口的染色体,然后只需在代码中指定 400 条染色体,每个奴隶将只使用 400(400 * 5 =2000)...这就是我的观点.. 因为如果您为一个节点指定 2000,这将花费大量时间来适应健身。您明白了吗?我要分享的真实数据是染色体而不是数据输入文件,我想使用大量的染色体,因为当你使用大量的染色体时,你将得到你需要的近似解。

最佳答案

Hadoop 并没有真正按照您的意愿行事。可能有一种方法可以定义您自己的 InputFormat (并且可能也覆盖其他一些类)以强制它做你想做的事,但我真的不推荐这样做。

map() MapReduce的一部分从根本上依赖于能够将问题分解为“独立的子任务,子任务之间不需要通信/同步”。如果您的问题的输入数据是可以任意增长且无法分解的单个记录,则 MapReduce 从根本上说是错误的概念方法,因为您没有进行任何分解。

我认为这可以分解的方式(如果你说的是正常的进化算法)是按记录(个人,在这种情况下)将其分解,你的文件将是记录的集合。然后您可以按记录拆分文件。根据您的文件格式,您可以根据需要创建一个 InputFormat,以便它知道如何拆分文件。这可能会导致相当大的记录,因此您可能希望将 block 大小调整为记录的平均大小,以便更好地分布。

看起来其他人将他们的世代作为单独的工作或在 reducer 中完成,而不是像您建议的那样在 mapper 中完成。您可能会阅读有关该主题的这些论文。

或者,您可以使用现有框架。 Apache Mahout Cookbook, Chapter 10描述了 Watchmaker Framework可用于 Mahout (Hadoop 的机器学习库)用于进化计算。

您可能还会发现 Spark更好地满足您的需求,因为它具有更好的迭代计算,因为它在内存中保留了更多。甚至还原生支持进化算法 being built他们的机器学习库 ( MLlib )。

我希望这不会毁了你的论文。

关于file - 我可以在 hdfs (hadoop) 中复制数据吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30276775/

相关文章:

php - 如何使用 PHP 替换 php 页面中的 js 文件路径?

hadoop - 集群中的不同数据节点是否可能具有不同的存储容量?

当文件格式为自定义格式时,Hadoop MultipleOutputs 不会写入多个文件

c++ - MapReduce - 直接插入 map 中 vector<int> 的第一个位置

java - 从命令行启动时,Java 中 File 对象的绝对路径不同

c++ - 我的 C++ 程序中的文件输入有问题

Hadoop:作业如何发送到 master 和 MapReduce 上的节点?

hadoop:如何增加失败任务的限制

hadoop - 来自 org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus 的 guava 秒表的 IllegalAccessError

objective-c - 如何在 Objective C 中使用 NSData 存储图像