Riak 在 MapReduce 查询中失败。使用哪种配置?

2024-05-16

我正在与 riak / riak-js 结合开发一个 nodejs 应用程序,并遇到以下问题:

运行此请求

db.mapreduce
  .add('logs')
  .run();

正确返回存储在存储桶日志中的所有 155.000 个项目及其 ID:

[ 'logs', '1GXtBX2LvXpcPeeR89IuipRUFmB' ],
[ 'logs', '63vL86NZ96JptsHifW8JDgRjiCv' ],
[ 'logs', 'NfseTamulBjwVOenbeWoMSNRZnr' ],
[ 'logs', 'VzNouzHc7B7bSzvNeI1xoQ5ih8J' ],
[ 'logs', 'UBM1IDcbZkMW4iRWdvo4W7zp6dc' ],
[ 'logs', 'FtNhPxaay4XI9qfh4Cf9LFO1Oai' ],
....

如果我指定一个映射函数并仅使用存储桶日志中的几个项目

db.mapreduce
  .add([['logs', 'SUgJ2fhfgyR2WE87n7IVHyBi4C9'], ['logs', 'EMtywD1UFnsq9rNRuINLzDsHdh2'], ['logs', 'ZXPh5ws8mOdASQFEtLDk8CBRn8t']])
  .map( function(v) {return ["asd"]; } )
  .run();

一切正常,并返回以下预期输出:

[ 'asd', 'asd', 'asd' ]

如果我现在希望 riak 映射存储桶“logs”中的所有项目(大约 155.000 个小型 json 文档)

db.mapreduce    
  .add('logs')  
  .map( function(v) {return ["asd"]; } )    
  .run();

我只收到错误:

{ [Error: [object Object]] message: '[object Object]', statusCode: 500 }

这里发生了什么?在错误对象中没有写入任何有用的内容。

更新: riak-console 多次显示以下内容:

[notice] JS call failed: All VMs are busy.

将 riaks app.config 中的 map_js_vm_count 增加到 36 后,消息变为:

[error] Pipe worker startup failed:fitting was gone before startup

Links: Basho Labs Riak 驱动程序 riak-js http://basho-labs.github.com/riak-js/


basho.com 的 Bryan 回答了我的问题:

嗨,科尼利厄斯。您能描述一下您的 Riak 配置吗? 具体来说,您的集群中有多少个节点,app.config 中的ring_creation_size 是多少?

例如,如果您在单节点开发集群上使用默认设置 {ring_creation_size, 64},则很可能出现这种情况。 155,000 个项目足以让所有 64 个虚拟节点正常工作。

在第一种情况下,在提高 map_js_vm_count 之前,这 64 个虚拟节点仅争夺 8 个 Javascript VM,因此有些虚拟节点可能会长时间处于饥饿状态而超时,这将导致“所有虚拟机都忙”日志消息。

在第二种情况下,在提高 map_js_vm_count 后,这 36 个 Javascript VM 可能无法在查询超时到来之前处理所有 155,000 个项目。 “启动前安装已消失”日志消息表示运行查询的管道已关闭,但仍有输入到达虚拟节​​点。

在没有映射函数的简单情况下,您不会看到这些行为,因为不需要与 Javascript VM 进行交互。 此外,在这种情况下,甚至不会从磁盘中读取对象,从而进一步缓解了资源争用。

我期望最有帮助的两个配置解决方案是降低ring_creation_size 和提高查询超时。将ring_creation_size降低到16,甚至在单节点集群上降低到8将减少Javascript虚拟机的争用,因为在映射函数处理中尝试并行性会减少。提高查询超时(应该是“运行”函数的参数,或类似的参数,但我不熟悉 riak-js 客户端),将为查询提供更多时间在关闭之前完成,这可能是必要的克服处理速度慢的问题。

在 Erlang 中重写映射函数也应该有所帮助,因为它会更快,并且不会出现相同类型的 VM 争用。但是,我知道,这在早期开发中并不那么容易使用。

哈特哈, 布莱恩

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Riak 在 MapReduce 查询中失败。使用哪种配置? 的相关文章

  • 单值或常量值时在 x 轴上绘制的样条图 - highchart

    while using the older version of highchart 2 1 6 if a plot had only one value or a series of same values it would plot a
  • JavaScript 对象引用缓存

    我们的代码库中有很多对象 它们的名称空间是为了避免冲突 Example App local view MyView 在我在代码库中看到的大多数地方 我们使用完整路径来获取对对象的引用 并且这在同一函数中重复多次 Example functi
  • 如何在光标下的所有元素上调用 mouseover?

    我有一个网络应用程序 每次单击时都会创建一个点 见下文 当我将鼠标悬停在一堆点上时 我希望光标下的每个点都会触发 mouseover 或 mouseenter 事件 然而 只有一个事件被触发 即堆栈 顶部 的点的事件 当鼠标移动到一堆多个点
  • 如何使用 LinkedIn javascript sdk 检索包括所有字段的职位列表?

    我想要获取 LinkedIn 会员在其个人资料中输入的每个职位的 ID 头衔 摘要 开始日期 结束日期 当前状态和公司名称 我测试了一个查询休息控制台 https apigee com console linkedin我得到了想要的结果 查
  • 检查 DOM 元素是否为复选框

    如何检查给定的 DOM 元素是否为复选框 设想 我有一组文本框和复选框 其中的值是动态分配的 我没有办法识别 DOM 元素是复选框还是文本框 只使用普通的 javascript 你就可以做到 if el type el type check
  • 通知用户消息仍在输入中

    我正在使用 Laravel 5 6 7 Socket IO 和 vue js 我没有使用 Pusher 和 redis 下面是我的代码 用于向与我一对一聊天的用户发送消息 var url http localhost 6001 apps M
  • 来自 DataURL 的 Blob?

    Using FileReader s readAsDataURL 我可以将任意数据转换为数据 URL 有没有办法将数据 URL 转换回Blob使用内置浏览器 API 的实例 用户 Matt 一年前提出了以下代码 如何在javascript中
  • 如何获取 RxJSSubject 或 Observable 的当前值?

    我有 Angular 2 服务 import Storage from storage import Injectable from angular2 core import Subject from rxjs Subject Inject
  • 是否可以将反应组件导出为非反应项目中的函数

    有没有办法在非 React 项目中将 React 组件导出为函数并传入 props 作为函数的参数 我最近用 create react app 完成了一个 React 项目 现在我想将它用于其他非 React 项目 纯 Javascript
  • jQuery Blur() 在 Chrome 上不起作用

    我在 MacOSX 上运行这个http jsfiddle net q84wv http jsfiddle net q84wv on Chrome最新版本 它不会工作 在 Firefox 上运行时它工作得很好 有什么线索吗 假设您想要aler
  • 如何从 Python 中指定运行程序的输入文件?

    我正在编写一个外部脚本 以通过笔记本电脑上的 Python mrjob 模块 而不是在 Amazon Elastic Compute Cloud 或任何大型集群上 运行 mapreduce 作业 我读自mrjob文档 http packag
  • ReactJS:从没有 onChange 事件的 props 中选择默认值?

    所以 我只是想知道我是否绝对需要在 React 中的选择组件上有一个 onChange 事件处理程序 我有一个道具传递我想要选择的选项的默认值 如果我有的话 它就没有问题
  • Chrome Javascript 调试器暂停时不会重新加载页面

    有时 当我在 Chrome 中调试某些 javascript 并且暂停了 javascript 时 如果我尝试重新加载页面 chrome 只会 继续 调试器 单步执行到下一个断点 似乎没有任何方法可以强制 javascript 完全停止运行
  • 使用Promise而不拒绝它会导致内存泄漏吗? [复制]

    这个问题在这里已经有答案了 代码如下 function test value return new Promise function fulfill reject try fulfill true catch e throw e 我担心的是
  • 如何在粘贴时获取文本区域输入字段的新值?

    我发现当我尝试从文本区域字段读取值时onpaste调用函数时 我得到字段的旧值 粘贴操作之前的值 而不是新值 粘贴操作之后的值 以下是此行为的演示 http jsfiddle net qsDnr http jsfiddle net qsDn
  • 使用 jQuery Tablesorter 操作后如何恢复当前页面?

    我正在使用 tablesorter 但无法找到有关插件 tablesorter 寻呼机的任何文档 问题是我有一个显示一些数据的表 并且在每一行中都有一个删除链接 该链接附加了要删除的元素的唯一标识符 显然 是否可以保存我正在删除的页面 然后
  • 在 Google Apps 脚本中的文本前插入换行符

    我需要在 Google 文档中的某些文本之前插入一些换行符 尝试过这种方法但出现错误 var body DocumentApp getActiveDocument getBody var pattern WORD 1 var found b
  • 如何根据所需表单输入的值更改 CSS 样式

    我想知道如何编写 javascript 来改变所需的表单元素的样式 如果它们有价值的话就改变它们 我想要做的是当所需的文本字段为空时 在它们周围有一个彩色边框 并在它们有值时删除边框样式 我想做的是编写一个 javascript 函数来检查
  • Serviceworker Bug event.respondWith

    我的 serviceworker 的逻辑是 当发生获取事件时 它首先获取包含一些布尔值 而不是 event request url 的端点 并根据我正在调用的值检查该值event respondWith 对于当前的获取事件 我正在提供来自缓
  • 发布Oracle和SQL Server性能测试是否违反许可? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想对Oracle和SQL Server中的空间索引进行性能测试 我想将其纳入我的理学硕士工作中 发布此类结果是否违反 dbms 的许可 也许有人已经

随机推荐