我是 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)中执行。
谢谢你提供的这些细节,我的数据不能任意增长:如果我理解你是对的......好吧,如果我的数据中有 200 个人......它用这个算法增加了 200 个人......
如果我指定 30 条染色体,算法将在每个节点中执行(在输入文件的数据库中)并在执行中执行 30 条染色体...此参数将在开始前由我指定我的代码。它们不是在我的算法中可以任意变大的参数。
你能给我更多关于 InputFormat 的细节来开始我的算法吗)
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/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html
从给定URL下载文件并立即将其上传到AmazonS3的更直接的方法是什么(+将有关文件的一些信息保存到数据库中,例如名称、大小等)?现在,我既不使用Paperclip,也不使用Carrierwave。谢谢 最佳答案 简单明了:require'open-uri'require's3'amazon=S3::Service.new(access_key_id:'KEY',secret_access_key:'KEY')bucket=amazon.buckets.find('image_storage')url='http://www.ex
我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳
我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的
CSV.open(name,"r").eachdo|row|putsrowend我得到以下错误:CSV::MalformedCSVErrorUnquotedfieldsdonotallow\ror\n文件名是一个.txt制表符分隔文件。我是专门做的。我有一个.csv文件,我转到excel,并将文件保存为.txt制表符分隔的文件。所以它是制表符分隔的。CSV.open不应该能够读取制表符分隔的文件吗? 最佳答案 尝试像这样指定字段分隔符:CSV.open("name","r",{:col_sep=>"\t"}).eachdo|row|
我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file
我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法