热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

maprfs架构_将MapR与Ruby集成:JRuby上的MapRDB和MapR流入门

mapr-fs架构MapRStreams和MapR-DB都是MapR融合数据平台中非常激动人心的开发。在这篇博客文章中,我将向您展示如何获取Ruby代码以与MapR-

mapr-fs 架构

MapR Streams和MapR-DB都是MapR融合数据平台中非常激动人心的开发。 在这篇博客文章中,我将向您展示如何获取Ruby代码以与MapR-DB和MapR Streams进行本机交互。 我是Ruby开发人员,并且HBase和Kafka的现有Ruby客户端/库在MapR等效项下无法正常工作。 因此,我着手寻找一种方法来使Ruby代码与这两种MapR技术进行本地对话。 我决定探索将Java示例移植到JRuby的方法,效果很好。 这篇文章中包含几个Java示例,因此我还将引导您逐步了解如何将Java代码移植到JRuby(Ruby的全线程Java实现)。 让我们开始吧!

这篇文章的源代码可以在https://github.com/rvictory/MapR-JRuby-Demos中找到,并且受https://github.com/mapr-demos/maprdb-ojai-101和https的影响很大: //github.com/mapr-demos/mapr-streams-sample-programs

基础知识–加载MapR客户端库

JRuby尽最大努力保持Ruby约定,同时允许您与Java代码和库进行接口。 但是,为了使其“查找” Java类,您需要像加载Gem或另一个Ruby源文件一样加载它们的JAR。 为了加载所有内容,我采取了非常笨拙的方法(据我所知,这不会影响性能)。 基本上,我准备了脚本,以能够引用任何MapR JAR,并且在每个Ruby脚本的顶部都包含以下几行:

包含Java

Dir["/opt/mapr/lib/\*.jar"].each { |jar| require jar }

显然,这仅在MapR安装在/ opt / mapr中时才有效; 但是,如果您不在该默认配置下运行,那么更改就足够容易了。

在JRuby中使用MapR-DB

既然我们已经引用了适当的JAR,现在就可以将代码从Java移植到Ruby了。 在大多数情况下,这是一项无缝的任务-只需采用Java中使用的结构并将其制成“ Ruby”即可。 例如,这是MapR-DB演示中的以下代码:

Table table;
if (!MapRDB.tableExists(tableName)) { table = MapRDB.createTable(tableName); // Create the table if not already present } else { table = MapRDB.getTable(tableName); // get the table
}

成为:

table = nil
if !MapRDB.tableExists(tableName)table = MapRDB.createTable(tableName)
elsetable = MapRDB.getTable(tableName)
end

需要注意的一件事是,您需要调用构造函数的实例将按照您可能期望的方式进行处理,即以下Java代码:

Test test = new Test("arguments");

成为以下Ruby代码:

test = Test.new("arguments")

另外,Java泛型在JRuby中也不是“物”(因为无论如何都会推断类型),因此在大多数情况下(至少我发现的情况),您可以简单地忽略它们。 在某些情况下,JRuby编译器/解释器无法确定类型-我还没有遇到过这种情况,但是我敢肯定有一种解决方法。

至于使用MapR-DB,我们可以简单地使用与Java中相同的API:

( http://maprdocs.mapr.com/apidocs/maprdb_json/51/com/mapr/db/MapRDB.html )。 要创建新文档,我们可以采用以下两种方法之一:

document = MapRDB.newDocument().set("_id", "jdoe").set("first_name", "John").set("last_name", "Doe").set("dob", ODate.parse("1970-06-23"))
table.insertOrReplace(document)

或者我们可以使用JSON格式而不是API:

document = MapRDB.newDocument('{"_id" : "test", "first_name" : "John", "last_name" : "Doe", "dob" : "1970-06-23"}')
table.insertOrReplace(document)

对于使用JRuby的MapR-DB的基础知识来说,这差不多了。 请查看源代码文件“ maprdb.rb”以获取完整示例。 值得一提的是,默认情况下,针对当前用户,创建的表存储在MapR-FS的用户目录中。 如果您以不是mapr的用户身份运行,请确保在MapR-FS中为用户创建目录/users/ ,并且您的用户有权读写该目录。

在JRuby中使用MapR流

现在,我们已经为将Java代码移植到Ruby奠定了基础,Streams代码与MapR-DB代码一样简单。 唯一的区别是原始Java Streams示例使用“属性”文件存储配置,因此我们将这些文件放到与Ruby脚本相同的目录中,它们就会被代码拾取。

除了轻微的更改(使用props文件)之外,该代码还是Java示例中非常简单的端口。 在我的Github页面上查看实际代码,以查看生产者和消费者。 确保使用以下MapR命令创建流(并对执行代码的用户具有适当的权限):

maprcli stream create -path /sample-stream

并使用以下命令创建主题:

maprcli stream topic create -path /sample-stream -topic fast-messages

要允许所有用户与流进行交互,请使用以下命令:

maprcli stream edit -path /sample-stream -produceperm p -consumeperm p -topicperm p

就是这样-示例代码应该可以正常运行。 生产者创建100条消息并将其写到流中,而消费者则选择所看到的任何消息。 Stream的其余操作与Java API的文档相同。 我建议在Stream上移动JSON消息,它允许任何使用者/语言使用数据。

下一步是什么

现在您知道了如何让Ruby与MapR-DB和MapR Streams交互。 我对在未来的项目中使用融合数据平台的前景感到非常兴奋。 可能性是无限的。 展望未来,我打算将Streams和MapR-DB API包装到一个更具“ Ruby风格”的程序包中,并将其作为一般消费的Gem提供。 我还打算编写一个模仿MongoDB使用的查询语法的MapR-DB查询API(基于JSON的查询,而不是基于API的查询)。 完成后,Gem的来源将发布到我的GitHub。 如果您有任何问题,疑问或投诉,请随时与我联系。

谢谢阅读!

翻译自: https://www.javacodegeeks.com/2016/07/integrating-mapr-ruby-getting-started-mapr-db-mapr-streams-jruby.html

mapr-fs 架构



推荐阅读
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
  • 本文最初发表在Thorben Janssen的Java EE博客上,每周都会分享最新的Java新闻和动态。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
  • 在PHP中实现腾讯云接口签名,以完成人脸核身功能的对接与签名配置时,需要注意将文档中的POST请求改为GET请求。具体步骤包括:使用你的`secretKey`生成签名字符串`$srcStr`,格式为`GET faceid.tencentcloudapi.com?`,确保参数正确拼接,避免因请求方法错误导致的签名问题。此外,还需关注API的其他参数要求,确保请求的完整性和安全性。 ... [详细]
author-avatar
月满西楼2502890155
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有