hpcc_使用Java将数据流式传输到HPCC

hpcc

高性能计算集群(HPCC)是类似于Hadoop的分布式处理框架,除了它运行以自己的称为企业控制语言(ECL)的特定领域语言(DSL)编写的程序外。 ECL很棒,但是偶尔您会想用其他语言来执行繁重的任务。 例如,您可能想利用Java编写的NLP库。

此外,HPCC通常对类似于HDFS的文件系统上的数据进行操作。 就像HDFS一样,一旦超越了日志文件处理和静态数据快照的范围,您就会很快对数据库后端产生需求。

实际上,我想说这是一个普遍的行业趋势:HDFS-> HBase,S3-> Redshift等。最终,您希望减少分析的延迟(接近零)。 为此,您需要设置某种分布式数据库,该数据库能够支持批处理以及数据流/微分批处理。 而且,您采用了一种不变的/增量的数据存储方法,使您可以折叠基础结构,并在分析数据时将数据流传输到系统中(简化了处理过程)

但是我离题了,作为朝这个方向迈出的一步……

我们可以利用HPCC中的Java集成功能来支持Java中的用户定义函数。 同样,我们可以利用相同的功能来添加其他后端存储机制(例如Cassandra)。 更具体地说,让我们看一下HPCC / Java集成的功能,以从外部源获取数据。

让我们首先看一下原始Java集成。

如果您具有HPCC环境设置,则Java集成将从/ opt / HPCCSystems / classes路径开始。 您可以将类和jar文件拖放到该位置,并且可以从ECL中使用这些功能。 请按照此页面上的说明进行操作 。

如果遇到问题,请参阅该页面上的故障排除指南。 最困难的部分是让HPCC查找您的班级。 对我来说,我遇到了一个讨厌的JDK版本问题。 默认情况下,HPCC在我的Ubuntu计算机上选择了旧的JDK版本。 由于它使用的是旧版本,因此HPCC找不到使用“新” JDK(1.7)编译的类,这导致了一条模糊的消息:“无法解析类名”。 如果遇到此问题,请拉出我提交的针对Ubuntu修复的补丁 。

完成该工作后,您将可以使用以下语法从ECL调用Java:

IMPORT java;
integer add1(integer val) := IMPORT(java, 'JavaCat.add1:(I)I');
output(add1(10));

这非常整洁,并且如文档所建议,如果数据复杂,则可以从Java方法返回XML。 但是,如果您拥有大量的数据,而不是驻留在内存中,该怎么办? 好吧,那么您需要将Java流传输到HPCC。 ;)

返回一个Java迭代器,而不是从导入的方法返回实际数据。 然后,HPCC使用Iterator构造数据集。 以下是一个示例Iterator。

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class DataStream implements Iterator {private int position = 0;private int size = 5;public static Iterator stream(String foo, String bar){return new DataStream();}@Overridepublic boolean hasNext() {position++;return (position < size);}@Overridepublic Row next() {return new Row("row");}@Overridepublic void remove() {}}

这是一个标准的Iterator,但请注意它返回一个Row对象,其定义如下:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class Row {private String value;public Row(String value){this.value = value;}
}

该对象是一个Java bean。 HPCC将在映射到DATASET时设置成员变量的值。 要确切了解这种情况,让我们看一下ECL代码:

IMPORT java;rowrec := recordstring value;
end;DATASET(rowrec) stream() := IMPORT(java, 'DataStream.stream:(Ljava/lang/String;Ljava/lang/String;)Ljava/util/Iterator;');output(stream());

在import语句之后,我们定义了一种称为rowrec的记录类型。 在下面的行中,我们导入UDF,并将结果键入为包含rowrecs的DATASET。 rowrec中的字段名称必须与java bean上成员变量的名称匹配。 HPCC将使用迭代器,并使用next()方法的返回值填充数据集。 ECL的最后一行输出返回的结果。

我已将以上所有代码提交给github存储库 ,其中包含一些有关使其运行的说明。 玩得开心。

敬请期待更多…

想象一下,将这里概述的Java流功能与将数据流出Cassandra的能力结合在一起,就像我之前的文章中所详细描述的那样 。 结果是一种强大的方法,可以使用Thor使用批量分析对存储在Cassandra中的数据(具有数据局部性!)…(可能针对通过实时实时事件流获取的数据启用ECL作业!=)

翻译自: https://www.javacodegeeks.com/2015/05/streaming-data-into-hpcc-using-java.html

hpcc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337958.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

提高mysql insert速度_让你的insert操作速度增加1000倍的方法

大家平时都会使用insert语句,特别是有时候需要一个大批量的数据来做测试,一条一条insert将会是非常慢的,那么我们如何让我们的inser更快呢。很多时候方法选对了对于我们做事将会是事半功倍。大家平时都会使用insert语句,特别是有时候需要一个大批量的数据来做测试,一条一条inse…

C语言中同名变量,作用域怎么确定?

点击上方蓝字关注我&#xff0c;了解更多咨询C中通常会声明很多变量&#xff0c;变量有不同的作用域。如果出现同名变量&#xff0c;作用域怎么确定&#xff1f;这里先看结论&#xff1a;块中的变量作用域不同&#xff0c;内层块会隐藏外层块中的定义。但离开内层块后&#xff…

jdk 1.8 jdk8_JDK 8 SummaryStatistics类

jdk 1.8 jdk8JDK 8中引入的三个新类是java.util包的DoubleSummaryStatistics &#xff0c; IntSummaryStatistics和LongSummaryStatistics 。 这些类使计算元素总数&#xff0c;元素的最小值&#xff0c;元素的最大值&#xff0c;元素的平均值以及双精度&#xff0c;整数或long…

mysql哪些xss要转译查询_转义字符的妙用不用引号的字符注入和XSS脚本安全 -电脑资料...

声明&#xff1a;本文纯属YY,如有扯淡之处&#xff0c;请告诉小菜俺 THX在字符型填字游戏中&#xff0c;和&#xff02;往往是决定能否跳出约束进行攻击的关键&#xff0c;于是出现鸟转义字符 \&#xff0c;可以把 &#xff02;变成残废....这恰恰帮助我们改变了字符内部结构…

C语言基础知识干货收藏

点击上方蓝字关注我&#xff0c;了解更多咨询算法结构&#xff1a;一、顺序结构、选择结构、循环结构&#xff1b;二、循环结构又分为while型、until型、for循环结构&#xff1b;程序流程图&#xff1b;结构化程序设计方法&#xff1a;&#xff08;1&#xff09;自顶向下&#…

hazelcast入门教程_Hazelcast入门指南第7部分

hazelcast入门教程这是解释如何使用Hazelcast的系列文章的续篇。 如果一个人没有阅读其他六个帖子&#xff0c;请转到目录并阅读其他帖子。 不同的地图种类 Hazelcast的MultiMap打破了以前使用java.util.Collection接口的常规方式。 实际上&#xff0c;我认为MultiMap的概念完…

python xlrd读取文件报错_python中xlrd库如何实现文件读取?

俗话说得好&#xff0c;技多不压身&#xff0c;虽然我们已经掌握了多种可以实现读取文件的方式&#xff0c;但是丝毫不影响我们要学会精益求精&#xff0c;他说学习文件读取的奥秘&#xff0c;况且&#xff0c;数据分析是十分重要的&#xff0c;一切的代码运行&#xff0c;总归…

c语言 %x,%d,%c,%s,%x各代表什么

点击上方蓝字关注我&#xff0c;了解更多咨询转换说明符%a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99)%c 字符%d 有符号十进制整数%f 浮点数(包括float和doulbe)%e(%E) 浮点数指数输出[e-(E-)记数法]%g(%G) 浮点数不显无意义的零”0″%i 有符号十进制整数(与%d相同)%u 无符号…

apache mesos_Apache Mesos + Marathon和Java EE

apache mesosApache Mesos是一个开放源代码群集管理器&#xff0c;可在分布式应用程序或框架之间提供有效的资源隔离和共享。 Apache Mesos从计算机&#xff08;物理或虚拟&#xff09;中提取CPU&#xff0c;内存&#xff0c;存储和其他计算资源&#xff0c;从而使容错和弹性的…

C语言表达式用法快来看看

点击上方蓝字关注我&#xff0c;了解更多咨询表达式是C语言的主体。在C语言中&#xff0c;表达式由操作符和操作数组成。最简单的表达式可以只含有一个操作数。根据表达式所含操作符的个数&#xff0c;可以把表达式分为简单表达式和复杂表达式两种&#xff0c;简单表达式是只含…

虚拟机间延迟测量_简单的类来测量延迟

虚拟机间延迟测量这是我编写的用于测量延迟的非常简单的类。 HDRHistogram不是劳斯莱斯解决方案&#xff0c;但是如果您只想在项目中添加一个类&#xff0c;那么效果就很好。 这是一个简单的测试程序&#xff0c;向您展示其用法&#xff1a; package util;public class Laten…

python导入模块报错_Python 导入上层目录模块报错

背景&#xff1a;当前demo.py 文件&#xff0c;所处目录 D:\py\test\TestCase&#xff0c;需要调用test 目录下的模块&#xff0c;尝试了 新建__init__.py 文件 import test.模块名的方法&#xff0c;无效.报错信息&#xff1a;D:\py\test\TestCase>python demo.pyTraceback…

java int 传引用吗_Java的参数传递是「值传递」还是「引用传递」?

关于Java传参时是引用传递还是值传递&#xff0c;一直是一个讨论比较多的话题。有人说Java中只有值传递&#xff0c;也有人说值传递和引用传递都是存在的&#xff0c;比较容易让人产生疑问。关于值传递和引用传递其实需要分情况看待。一、Java数据类型我们都知道&#xff0c;Ja…

rest接口自动化测试_REST服务的自动化测试

rest接口自动化测试尽管我是Java和Scala开发人员&#xff0c;但我仍然对软件测试充满热情。 如果更精确-Web应用程序。 开发Web应用程序并确保应用程序具有良好的质量真的很有趣。 当我开始职业生涯时&#xff0c;最流行的Web架构是MVC&#xff08;模型视图控件&#xff09;&a…

C语言中变量的存储类别

点击上方蓝字关注我&#xff0c;了解更多咨询在程序中经常会使用到变量&#xff0c;在C程序中可以选择变量的不同存储形式&#xff0c;其存储类别分为静态存储和动态存储。可以通过存储类修饰符来告诉编译器要处理什么样的类型变量&#xff0c;具体主要有自动&#xff08;auto&…

javafx 项目_JavaFX,Jigsaw项目和JEP 253

javafx 项目因此&#xff0c; Java 9可能会破坏您的代码 …… 如果您的项目使用JavaFX&#xff0c;则这尤其可能&#xff0c;因为许多自定义和自制控件都需要使用内部API。 借助Project Jigsaw&#xff0c;这些内容将无法在Java 9中访问。幸运的是&#xff0c; Oracle在几天前…

C语言结构体用法很多,坑也很多

点击上方蓝字关注我&#xff0c;了解更多咨询还在使用89年版C语言的Linux内核&#xff0c;现在终于要做出改变了。今天&#xff0c;Linux开源社区宣布&#xff0c;未来会把内核C语言版本升级到C11&#xff0c;预计5.18版之后生效&#xff0c;也就是今年5月。这个决定很突然&…

java 消息队列服务_ActiveMQ 消息队列服务

1 ActiveMQ简介1.1 ActiveMQ是什么ActiveMQ是一个消息队列应用服务器(推送服务器)。支持JMS规范。1.1.1 JMS概述全称&#xff1a;Java Message Service &#xff0c;即为Java消息服务&#xff0c;是一套java消息服务的API标准。(标准即接口)实现了JMS标准的系统&#xff0c;称之…

第一个C语言编译器是怎样编写的?

点击上方蓝字关注我&#xff0c;了解更多咨询以我们嵌入式开发中经常使用的C语言为例&#xff0c;我们来介绍一下第一个C语言编译器的来源。还是让我们回顾一下C语言历史&#xff1a;1970年Tomphson和Ritchie在BCPL&#xff08;一种解释型语言&#xff09;的基础上开发了B语言&…

java循坏_Java的坏功能是什么

java循坏总览 当您第一次学习开发时&#xff0c;您会看到关于不同功能的过分笼统的陈述&#xff0c;它们对于设计&#xff0c;性能&#xff0c;清晰度&#xff0c;可维护性都是不好的&#xff0c;感觉就像是黑客&#xff0c;或者他们只是不喜欢它。 这可能会得到现实世界经验的…