我正在为我的应用程序实现过滤器功能,并且在编写CouchDB上的视图方面遇到麻烦.在SQL中,这将是多个加入的声明.如何替换couchdb中的多个加入.本文涵盖单个Join: http://www.cmlenz.net/archives/archives/20077/10/couchdb-joins .但是,对我来说,如何将这种方法扩展到多个加入并不明显. 想象我的对象具有十几个属性,并且每个属性都可以具有单独的过滤器.为简单起见,让我们假设它只有两个属性.如果我们可以解决这个问题,我们可能可以将其扩展到任意数量的属性. 我的应用程序需要支持大量和过滤器.例如.在("西雅图","纽约")和Start-epoch> = 1336608413中找到所有位置. 在SQL中,我有两个表:会话和过滤器.然后,我在会话和过滤表之间的每个过滤条件上有一个加入,以获取所有过滤的会话. Session Table location start-epoch Seattle
以下是关于 mapreduce 的编程技术问答
最近,我在业余时间与Couch DB一起工作了很多,并且真的很喜欢使用它.我发现它比使用关系数据库更灵活,但这并非没有缺点. 一个很大的缺点是缺乏动态查询/视图一代...因此,您必须在计划和证明自己的观点方面做很多工作,因为您不能尽可能地将该逻辑放入应用程序代码中使用SQL. 例如,我编写了一个基于JSON文档模板的登录方案,该模板看起来有点像这样: { "_id": "blah", "type": "user", "name": "Bob", "email": "bob@theaquarium.com", "password": "blah", } 为了防止创建重复帐户,我写了一个非常基本的视图,以生成一个用户名列表以查找键: emit(doc.name, null) 对我来说这似乎很有效.我认为这比删除整个文档列表(甚至只是每个文档的字段数量减少)要好.因此,我做了完全相同的事情来生成电子邮件地址列表: emit
我有两个看起来有点像这样的文档: Doc { _id: AAA, creator_id: ..., data: ... } DataKey { _id: ..., credits_left: 500, times_used: 0, data_id: AAA } 我要做的是创建一个视图,该视图可以使我通过数据级ID(key = datakey _id)并获得datakey的信息和doc. . 我的尝试: 我首先尝试将datakey嵌入文档中,并使用地图函数这样: function (doc) { if (doc.type == "Doc") { var ids = []; for (var i in doc.keys) ids.push(doc.keys[i]._id); emit(ids, doc); } } ,但我遇到了两个问题: 可以有多个datakey的per doc
如何在couchdb中选择子选择,或者如何使用group_level 将超级键与子集匹配 我有一个非常复杂的问题,希望对不仅仅是学习地图/减少和首次couchdb的人有一个不太复杂的答案. 我正在处理一个为客户端提供JSON表现的系统,以每天更新的内容配置自己.首先运行客户端注册自己的一些描述性标签(例如:屏幕尺寸,OS,位置),服务器返回group_id.客户使用该ID每天请求其清单.在后端,我们任意将共享某些标签的客户分组在一起,以减少我们需要存储/服务的唯一清单数量. 我们的销售/管理人员有一个WebApp,他可以在其中设置受众,以针对特定组的特定内容.观众可以重叠多个组.诀窍是,当客户报告以获取新清单时,我们需要弄清楚哪个受众最适合该客户群.最好的匹配观众将是第一个标签的观众是提交组标签的子集,例如: audience1: tagA, tagB, tagC, tagD audience2: tagA, tagC group1: tagA, tagB, ta
基于对我的上一个问题,我已经部分解决了,我对CouchdB遇到的问题. 这导致了新视图. 现在,我需要做的下一个事情是从此视图中删除重复项而按日期订购. 例如,这是我可以查询该视图的方式: GET http://scoates-test.couchone.com/follow/_design/asset/_view/by_userid_following?endkey=[%22c988a29740241c7d20fc7974be05ec54%22]&startkey=[%22c988a29740241c7d20fc7974be05ec54%22,{}]&descending=true&limit=3 导致这样做: HTTP 200 http://scoates-test.couchone.com/follow/_design/asset/_view/by_userid_following http://scoates-test.couchone.com
我有文件,每个元组跨越多行,例如: START name: Jim phone: 2128789283 address: 56 2nd street, New York, USA END START name: Tom phone: 6308789283 address: 56 5th street, Chicago, 13611, USA END . . . 上面是我文件中的2个元组.我写了定义getNext()函数的UDF,该功能检查它是否启动,然后我将初始化元组;如果结束,我将返回元组(从字符串缓冲区);否则,我只会将字符串添加到字符串缓冲区中. 它可以很好地工作,因为文件大小小于HDFS块大小,即64 MB(在Amazon EMR上),而对于大小的大小将失败.我尝试搜索谷歌,找到此博客文章. Raja的解释很容易理解,他提供了示例代码.但是该代码正在实现RecordReader部分,而不是LoadFunc的getNext().只是想知道是否有人有经验来处理多衬的猪
作为问题,如何在Hive UDF中获取TaskID或MapperID(Spark中的PartitionId)? 解决方案 我独自找到了正确的答案,我们可以将任务构成以下方式: : public class TestUDF extends GenericUDF { private Text result = new Text(); private String tmpStr = ""; @Override public void configure(MapredContext context) { //get the number of tasks 获取task总数量 int numTasks = context.getJobConf().getNumMapTasks(); //get the current taskID 获取当前taskID String taskID =
Mongo有办法创建用户定义的JavaScript函数.我想在其他MR功能中使用的客户端上有几个映射/减少功能. 例如,几个MR函数计算各种平均值.我希望能够这样使用它们: function reduce(k,v) { if (val > myDatabaseAverage()) // ..do something } 解决方案 使用 db.system.js.save( { _id : "myDatabaseAverage" , value : function(){ // ..do something } } ); 将将JS功能存储在服务器上,并且可以通过M/R访问. 有关进一步的示例,请参见:其他解决方案 @Remon Van Vliet提到, 您必须使用 db.system.js.save( { _id : "myDatabaseAverage" , value :
我的目的 - 启动Namenode的恶魔.我有必要使用HDFS的文件系统,从本地文件系统复制那里的文件,以在HDFS中创建文件夹,并且需要在配置/CONF/CORD/CORE SITE中指定的端口上的Namenode的Demon启动Namenode的Demon .xml文件. 我启动了脚本 ./hadoop namenode 我收到了以下消息 2013-02-17 12:29:37,493 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = one/192.168.1.8 STARTUP_MSG: args = [] STARTUP_MSG: versio
今天,我发现ASF退休了MRUNIT(请参阅 https:/https://blogs.apace.orgace.org/foundation/entry/the_apache_news_round_up85 和 >和主页本身).除了"不活动"以外,没有理由,所以我想还有另一种选择吗? 将来应该使用什么代替mrunit来测试MapReduce工作? 解决方案 我相信,退休的原因是,莫科托(Mockito)已经可以处理单元测试映射器/还原器所需的内容.您需要的只是模拟您的上下文,计数器和HBase KeyValue,然后您可以将行(以结果对象的形式)传递给映射器,并检查发出的键/值是否正确. fyi-实际上,我在没有Mrunit和PowerMock的任何帮助的情况下使用这种方法可以完美地工作. 其他解决方案 并不是完全的继任者,但是我尝试了一些研究并测试了一个工作.它实际上基于 hadoop的模块. 要了解如何使用它,可以找到详细信息在此链接中.和一个Gi
我已经开发了一个地图还原程序.我已经写了自定义RecordReader和InputFormat类. 我正在使用MR Unit和Mockito进行映射器和还原器的单元测试. 我想知道如何单元测试自定义RecordReader和InputFormat类?测试这些类的最喜欢的方法是什么? 解决方案 感谢 user7610 从 import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.mapreduce.InputFormat; import org.apache.hadoop.mapreduce.RecordReader; import org.apache.hadoop.mapreduce.TaskAttemptContext; import org.apache.hadoop.mapreduce.TaskAttemp
我刚刚设置了一个新的Ubuntu 12.04 VM(VirtualBox),并希望在其上测试Hadoop.我正在遵循本指南: .20.2/quickstart.html 我认为我在Java安装和Java_home路径上做错了什么... 现在,bin/hadoop总是只返回"找不到命令" 我必须在哪里提取hadoop文件夹? 我之前需要设置SSH吗?那SSHD呢? 安装正确的Java版本的命令是什么? 我必须输入什么? 我必须输入什么? 谢谢! 解决方案 我使用了这个很棒的教程. 唯一的更改是我安装了默认的java6 ... 其他解决方案 运行Hadoop时"未找到"错误与Java_home不应相关.我相信您不是从Hadoop Home Directory运行此命令(其他选择是将完整路径添加到Hadoop/bin中). 您可以在您喜欢 的任何地方提取Hadoop文件夹 对于Hadoop-env.sh,您应该将Java_
我最近安装/配置了Hadoop,并试图运行一些测试.我的问题是将本地数据复制到HDFS: 当我尝试运行 时 hdfs dfs -copyFromLocal /home/develop/test/ test 或任何类似命令,我得到的只是: copyFromLocal: `test': No such file or directory 如果我运行ls,我会得到相同的输出: develop@ubuntu:~$ hdfs dfs -ls ls: `.': No such file or directory 我还尝试使用hdfs dfs -mkdir创建目录test,但不成功,我到底缺少什么? 解决方案 在HDFS路径中添加斜线. 例如, hdfs dfs -mkdir /test hdfs dfs -copyFromLocal /home/develop/test/ /test 其他解决方案 如果要将文件从本地文件系统复制到HDFS,
我的配置是 hduser@worker1:/usr/local/hadoop/conf$ jps The program 'jps' can be found in the following packages: * openjdk-6-jdk * openjdk-7-jdk Ask your administrator to install one of them 我安装了java hduser@worker1:/usr/local/hadoop/conf$ java -version java version "1.6.0_23" OpenJDK Runtime Environment (IcedTea6 1.11pre) (6b23~pre10-0ubuntu5) OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode) hduser@worker1:/usr/local/hadoop/conf$ echo $
在Cassandra从0.8.2升级到0.8.4之后,出现了此错误 我已经重新启动了卡桑德拉,删除了数据等.没有任何帮助 在云的工作正常之前,我在云中有6架相同的机器. 如果我制作netstat,则显示端口9160侦听 Nodetool ...戒指 - 响应6台机器. 有什么问题? :( 线程" main" java.io.ioexception中的例外:无法获得输入拆分 atrg.apache.cassandra.hadoop.columnfamilyinputformat.getsplits(columnfamilyInputformat.java:157) atrg.apache.hadoop.mapred.jobclient.writenewsplits(jobclient.java:885) atorg.apache.hadoop.mapred.jobclient.submitjobinternal(Jobclient.java:779) atrg.apache.h
因此,这是一个特定数据集上的redable()代码 public static class ReduceEmployee extends Reducer { public void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } context.write(key, new IntWritable(sum)); } } 如果我正确理解的是,这有
我的Hadoop版本是1.0.2.现在,我最多希望同时运行10个地图任务.我发现了2个与此问题有关的变量. a)mapred.job.map.capacity 但是在我的hadoop版本中,此参数似乎被放弃了. b)mapred.jobtracker.taskscheduler.maxrunningtaskssperjob(http://grepcode.com/file/file/repo1.maven.org/maven.org/maven2/com.ning/com.ning/com.ning/metrics.collector.collector/1.0.0.0.0.0.0.0.0.0.2/mmapred-default.cmll) 我设置此变量如下: Configuration conf = new Configuration(); conf.set("date", date); conf.set("mapred.job.queue.name", "h
设置 mapred.job.map.map.memory.mb and mapred.child.child.child.java.java.java.java.opts 控制映射器使用的最大内存并减少任务?哪一个优先? 解决方案 -Xmx指定分配的JVM的最大堆空间.这是由垃圾收集器.另一方面,mapred.job.map.memory.mb指定最大 JVM可能使用比最大堆大小更多的内存,因为它还需要空间来存储对象定义(PERMGEN空间)和堆栈.如果该过程使用的虚拟内存比mapred.job.map.memory.mb被Hadoop杀死. 因此,一个不优先于另一个(它们测量内存使用的不同方面),但是-Xmx是JVM的参数,而mapred.job.map.memory.mb是虚拟内存的硬上限可以使用Hadoop强制执行的尝试. 希望这很有帮助,记忆很复杂!目前,我对为什么我的JVM流程在中使用JVM流程在虚拟内存中使用最大堆大小的几个倍数感到困惑.我的帖子.
我正在使用库存事务日志文件.每行表示具有20个选项卡分离值的贸易交易.我正在使用Hadoop处理此文件,并进行一些对交易的基准测试.目前,对于每行,我必须执行单独的基准计算,因此无需降低MAP-REDUCE的功能.为了执行每行的基准计算,我必须查询一个Sybase数据库以获取与该行相对应的一些标准值.该数据库对每行的两个值[交易ID和库存ID]进行了索引.现在我的问题是我应该将tradeid和stockid用作我的MapReduce程序中的关键,还是应该为密钥选择其他值/[值的组合]. 解决方案 因此,对于每条输入行,您将要查询数据库,然后分别对每行进行基准计算.完成基准计算后,您将使用基准值输出每条线. 在这种情况下,您可以根本无法使用还原器,也不能使用降低器. 因此,您的地图函数将在一条行中读取,然后将查询向SYBASE数据库发出标准值,然后执行基准计算.由于您想用基准值输出每条线,因此您可以将MAP函数作为键和基准值作为值输出,即
下午好. 我正在尝试获取一个用户事件脚本来调用或使用MAP RELAD脚本.我真的很陌生地图减少脚本的概念,并且没有太多运气寻找资源.从本质上讲,我要做的是调用MAP RESID脚本,该脚本找到具有相同项目名称的开放交易,并将该项目的类设置为用户设置的新项目.地图缩小脚本需要从当前记录中的项目名称和类. 这是我的用户活动: /** * @NApiVersion 2.0 * @NScriptType UserEventScript */ define(['N/record', 'N/log'], function (record, log) { function setFieldInRecord (scriptContext) { log.debug({ 'title': 'TESTING', 'details': 'WE ARE IN THE FUNCTIO