ip integrator_使用Oracle Data Integrator(和Kafka / MapR流)完善Lambda体系结构

ip integrator

“ Lambda体系结构是一种数据处理体系结构,旨在通过利用批处理和流处理方法来处理大量数据。 这种体系结构方法尝试通过使用批处理提供批处理数据的全面而准确的视图,同时使用实时流处理提供在线数据的视图来平衡延迟 , 吞吐量和容错 。 在演示之前,可以将两个视图输出合并。 lambda体系结构的兴起与大数据的增长,实时分析以及减轻地图缩减延迟的驱动力有关。” –维基百科

以前,我已经写了一些博客,涉及许多用例,这些用例是使用Oracle Data Integrator(ODI)在MapR分发之上进行批处理,以及使用Oracle GoldenGate(OGG)将事务数据流式传输到MapR Streams和其他Hadoop组件中。 最新的ODI(12.2.1.2.6)结合了这两种产品以完全适合lambda架构,同时具有许多新的强大功能,包括能够将Kafka流作为ODI本身的源和目标进行处理。 通过简化我们在一种产品下以相同逻辑设计处理和处理批处理和快速数据的方式,此功能对已经拥有或计划拥有lambda架构的任何人都具有巨大的优势。 现在,如果我们将OGG流传输功能和ODI批处理/流传输功能结合在一起,则可能性是无限的。

在本博客中,我将向您展示如何使用Spark Streaming在Oracle Data Integrator上配置MapR流(又名Kafka)以创建真正的lambda体系结构:补充批处理和服务层的快速层。

在本文中,我将跳过ODI的“赞扬和称赞”部分,但我只想强调一点:自从ODI首次发布以来,为该博客设计的映射就像您要设计的所有其他映射一样,都是您可以立即使用Hadoop / Spark集群上的本机代码运行100%的代码,无需编写零行代码,也不必担心如何以及在何处编码。

我已经在MapR上完成了此操作,因此我可以制作“两只鸟一块石头”。 向您展示MapR Streams步骤和Kafka。 由于两者在概念或API实现上并没有太大差异,因此如果您使用的是Kafka,则可以轻松地应用相同的步骤。

如果您不熟悉MapR Streams和/或Kafka概念,建议您花一些时间来阅读它们。 以下内容假定您知道什么是MapR Streams和Kafka(当然还有ODI)。 否则,您仍然会对可能的功能有个好主意。

准备工作

MapR Streams(aka Kafka)相关的准备工作

显然,我们需要创建MapR Streams路径和主题。 与Kafka不同,MapR通过“ maprcli”命令行实用程序使用自己的API来创建和定义主题。 因此,如果您使用商品Kafka,则此步骤将略有不同。 Web上有很多有关如何创建和配置Kafka主题和服务器的示例,因此您并不孤单。

为了进行此演示,我创建了一个路径和该路径下的两个主题。 我们将让ODI从其中一个主题(注册)进行消费,并生成另一个主题(registrations2)。 这样,您将看到它如何通过ODI起作用。

创建一个名为“ users-stream”的MapR Streams路径和一个名为“ registrations”的主题:

在我之前定义的相同路径上创建第二个主题“ registrations2”:

Hadoop相关准备

由于我正在使用已安装并正在运行MapR的个人预配置VM,因此此处的准备工作不多。 但是,需要一些步骤才能成功完成ODI映射。 如果您想知道我是如何使ODI从事MapR发行的,那么您可以参考此博客文章 。

  • Spark:我已经在Spark 1.6.1上进行了测试,您也应该这样做。 至少不要转到任何较低版本。 此外,您需要针对Spark构建具有特定的标签版本。 我从标签1605(这是MapR发布约定)开始测试,但是我的工作失败了。 究其原因,我发现PySpark库不是MapR Streams API的最新版本。 他们可以使用商品Kafka,但不能使用MapR。 这是我使用过的RPM的链接 。
  • Spark日志记录:在spark路径下,有一个“ config”文件夹,其中包含不同的配置文件。 如果需要的话,我们只对其中一项感兴趣。 文件名为“ log4j.properties”。 您需要确保将“ rootCategory”参数设置为INFO,否则,当您运行提交到Spark的任何ODI映射时,都会出现异常:

  • Hadoop凭证存储:在提交的任何作业中需要特定密码时,ODI将引用Hadoop凭证存储。 这样,我们就不会在参数/属性文件或代码本身中包含任何明确的密码。 在此演示中,我们将在某个时候使用MySQL,因此我需要创建一个存储并为MySQL密码添加别名。 首先,您需要确保core-site.xml中存在凭证存储的条目,然后实际上为密码值创建别名:

上一张图片是我的“ site-core.xml”的摘要,向您显示了我添加的凭据存储。 下一步将是验证商店是否存在,然后为密码值创建别名:

更改之后,即使在编辑core-site.xml之后,也无需重新启动任何hadoop组件。

注意:如果遇到“操作系统异常”(例如137),请确保有足够的可用内存。

ODI相关准备

您将在ODI中进行的常规准备工作。 我将在此博客中显示相关内容。

Hadoop数据服务器

以下配置特定于MapR。 如果使用其他发行版,则需要输入相关的端口号和路径:

Spark-Python数据服务器

在此ODI版本12.2.1.2.6中,如果要使用Spark Streaming和常规Spark服务器/群集,则需要创建多个Spark数据服务器。 在此演示中,我仅创建了Spark Streaming服务器,并将其称为Spark-Async。

您需要将“主群集”值更改为实际使用的值:yarn-client或yarn-cluster,然后选择我们之前创建的Hadoop DataServer。

现在,这里配置的有趣部分是Spark-Async数据服务器的属性:

我已经强调了您需要注意的最重要的部分。 之所以使用ASYNC,是因为我们将使用Spark Streaming。 其余属性与性能有关。

卡夫卡数据服务器

在这里,我们将定义MapR Streams数据服务器:

元数据代理具有一个“虚拟”地址,仅符合Kafka API。 MapR Streams客户端将为您提供连接到MapR Streams所需的服务。 您不能在此处测试数据服务器,因为在MapR上没有运行这样的Kafka服务器。 因此,请安全地忽略此处的测试连接,因为它将失败(这样就可以了)。

对于属性,您需要定义以下内容:

您需要手动定义“ key.deserializer”和“ value.deserializer”。 MapR Streams都需要两者,如果未定义作业,作业将失败。

ODI映射设计

我已经在这里进行了测试,涵盖了五个用例。 但是,我将仅介绍一个完整的内容,并突出显示其他内容,以免您阅读多余和常识性的步骤。

1)MapR Streams(Kafka)=> Spark Streaming => MapR Streams(Kafka):

在此映射中,我们将从先前创建的主题之一中读取流数据,应用一些函数(简单的函数),然后将结果生成到另一个主题。 这是映射的逻辑设计:

我通过复制已经为MySQL反向工程设计的模型之一(结构相同)定义了MapR_Streams_Registrations1模型,但是在这种情况下,当然选择的技术是Kafka。 您将能够选择流数据的格式:Avro,JSON,Parquet或Delimited:

物理设计如下所示:

  • SOURCE_GROUP:这是我们的MapR Streams主题“注册”
  • TRANS_GROUP:这是我们的Spark异步服务器
  • TARGET_GROUP:这是我们的MapR Streams主题“ registrations2”

物理实现的属性为:

您需要选择暂存位置作为Spark Async并启用“流式传输”。

要将主题(注册)中的流数据加载到Spark Streaming,我们需要选择合适的LKM,即LKM Kafka到Spark:

然后从Spark Streaming加载到MapR Stream目标主题registrations2,我们需要选择LKM Spark到Kafka:

2)MapR-FS(HDFS)=> Spark Streaming => MapR Streams(Kafka):

除了使用的知识模块之外,我在这里不会向您展示太多。 要将MapR-FS(HDFS)加载到Spark Streaming,我使用了LKM File来Spark:

为了从Spark Streaming加载到MapR Streams,我像以前的映射一样使用LKM Spark到Kafka。

注意:LKM File to Spark将充当一个流,一个文件流(显然)。 ODI将仅接收任何更新/新文件,而不是静态文件。

3)MapR Streams(Kafka)=> Spark Streaming => MySQL:

要将MapR Streams(Kafka)加载到Spark Streaming,就像在第一个映射中一样,我使用了LKM Kafka到Spark。 然后从Spark Streaming加载到MySQL,我使用了LKM Spark到SQL:

4)MapR流(Kafka)=> Spark流=> MapR-FS(HDFS)

为了从MapR流加载到Spark流,我像以前一样使用LKM Kafka到Spark,然后从Spark流加载到MapR-FS(HDFS),我已经使用LKM Spark到File:

5)MapR Streams(Kafka)和Oracle DB => Spark Streaming => MySQL

这是另一个有趣的用例,您实际上可以在现场将Kafka流与SQL源一起加入。 这仅(当前)适用于查找组件:

请注意,驱动程序源必须是Kafka(在我们的示例中为MapR流),而查找源必须是SQL数据库。 我使用了与以前的映射几乎相同的LKM:从LKM SQL到Spark,从LKM Kafka到Spark和从LKM Spark到SQL。

行刑

我将仅向您展示第一个用例的执行步骤,即MapR Streams(Kafka)=> Spark Streaming => MapR Streams(Kafka)。 为了模拟这种情况,我创建了一个Kafka生产者控制台和另一个Kafka消费者控制台,以便可以监视结果。 查看下面的生产者,我粘贴了一些记录:

我已经突出显示了其中一个URL,以确保您注意到它是小写的。 等待几秒钟,Spark将处理这些消息并将其发送到目标MapR Streams主题:

请注意,所有URL均大写。 成功!

通过映射,结果与预期的一样。 我不会为他们展示测试步骤,因为它们很简单。 这里的想法是向您展示如何使用MapR Streams(Kafka)配置ODI。

最后的话

值得一提的是,在执行任何映射时,您都可以深入查看日志并查看正在发生的事情(生成的代码等)。 此外,您将获得指向工作历史URL的链接,以在Spark UI上进行访问:

打开链接将带我们到Spark UI:

如果要控制流作业可以生存多长时间,则需要增加Spark-Async数据服务器的“ spark.streaming.timeout”属性,或从映射配置本身覆盖它。 您可能还需要创建一个ODI程序包,该程序包具有一个循环和其他有用的组件来满足您的业务需求。

结论

ODI可以处理lambda架构中的两个层:批处理层和快速层。 这不仅是ODI在其非常长的综合功能列表中添加的一项重要功能,而且还将提高从一个统一,易于使用的界面设计数据管道的生产率和效率。 显然,ODI可以像使用商品Kafka一样轻松地与MapR Streams一起使用,这要感谢MapR的二进制文件与Kafka API兼容,以及ODI不需要依赖于一个框架。 这向您保证ODI是与众不同的真正开放和模块化的E-LT工具。

其他一些相关职位:

  • Oracle Data Integrator和MapR融合数据平台:请检查!
  • 使用Oracle GoldenGate将事务数据流式传输到MapR流中
  • 使用Oracle GoldenGate进行MapR-FS实时事务数据提取
  • 带有ODI的逆向工程师MapR-DB

免责声明

这里表达的思想,实践和观点仅是作者的观点,不一定反映Oracle的观点。

翻译自: https://www.javacodegeeks.com/2017/02/perfecting-lambda-architecture-oracle-data-integrator-kafka-mapr-streams.html

ip integrator

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

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

相关文章

php 如何获取函数类型,PHP如何使用gettype()函数判断变量的类型?

gettype()函数是PHP中的一个内置函数,用于获取变量的类型;它可用于检查现有变量的类型。下面本篇文章就来给大家介绍一下gettype()函数,希望对大家有所帮助。【视频教程推荐:PHP教程】基本语法string gettype ( $var )参数&#x…

qfile 创建文件_Qt之二进制文件读写

点击上方“Qt学视觉”,选择“星标”公众号重磅干货,第一时间送达想要学习的同学们还请认真阅读每篇文章,相信你一定会有所收获除了文本文件之外,其他需要按照一定的格式定义读写的文件都称为二进制文件,每种格式的二进…

cloud foundry_实际的Reactor操作–检索Cloud Foundry应用程序的详细信息

cloud foundryCF-Java-Client是一个库,可通过程序访问Cloud Foundry Cloud Controller API 。 它建立在Project Reactor之上,它是Reactive Streams规范的实现,并且使用此库在Cloud Foundry环境中做一些实际的事情是一个有趣的练习。 考虑一个…

iis开启php验证码,php结合GD库实现中文验证码的简单方法

前言上一次写了一个常见的验证码,现在玩一下中文的验证码,顺便升级一下写的代码流程基本差不多先看GD库开启了没生成中文5位验证码开始画图画干扰素生成图形完事生成中文验证码//小小心机$hanzi "如果觉得写得还可以的话互相关注报团取暖交流经验来…

Linux 系统关于应该把程序安装在目录 /usr 还是目录 /usr/local 下的思考

对于一个以 LFS(Linux From Scratch 大意:自己做出来的 Linux) 为基础的系统来说,这是一个没有明确答案的问题。什么是 LFS? 在传统的 Unix 系统中,/usr 通常只包含系统发行时自带的程序,而 /usr/local 则是本地系统管…

数据结构设计_合并多种疾病,如何设计数据结构?

如果一个患者合并多种疾病或应用多种药物,如何设计数据结构?例如病史,建议设计成多选题。如果未患病,只需点一次“全无”,操作简单。如果选了全无,其他选框系统自动关闭,就不能再后面的选项了&a…

java ee的小程序_用微服务和容器替换旧版Java EE应用程序服务器

java ee的小程序Lightbend最近对2000多个JVM开发人员进行了一项调查,结果刚刚发布。 开展该调查的目的是发现:发展趋势与IT基础架构趋势之间的相关性,处于数字化转型前沿的组织如何使他们的应用程序现代化以及当今对新兴开发人员技术最为关注…

Linux系统下如何安装JDK?

一、首先下载linux版本jdk 点击进入jdk官网 根据自己的需求,下载不同版本的jdk 2.将下载好的jdk压缩包,通过ftp上传到linux系统的当前用户下,我当前登录的用户为root用户 3.将上传后的jdk,解压到/usr/local/目录下&#xff0c…

php网站模板怎么修改,网站后台模板修改

方法1、首先制作网站背景图片,这个建议找一些大尺寸的图片。(本图仅限测试使用)2、通过FTp工具链接到网站的空间,找到dedecms网站的模版文件templets。找到模版目录下的模版样式文件。如果使用的是默认模版,文件在templets/default/style/ded…

python练手经典100例微盘_Python练手项目实例汇总(附源码下载)

1 #_*_ coding:utf-8 _*_ 2 from tkinter import * 3 importrandom4 importtime5 importtkinter.messagebox6 7 8 #俄罗斯方块界面的高度 9 HEIGHT 20 10 11 #俄罗斯方块界面的宽度 12 WIDTH 10 13 14 ACTIVE 1 15 PASSIVE 016 TRUE 1 17 FALSE 018 19 style [20 [[(0,0),(…

Linux 环境变量设置及查看

文章目录一、设置变量的四种方法(一)在 /etc/profile 文件中添加变量(二)在用户目录下的 .bash_profile 文件中添加变量(三)使用命令 export 声明定义变量(四)使用命令 declare 声明…

docker 部署java_使用Docker堆栈部署的微服务-WildFly,Java EE和Couchbase

docker 部署java关于微服务的资料很多,只是用谷歌搜索就可以了 ! 几年前,我在比利时的Devoxx上发表了有关将单片重构为微服务的演讲,它获得了很好的评价: 该博客将展示Docker如何简化微服务的创建和关闭。 该博客中使…

django settings 定义的变量不存在_使用Django部署机器学习模型(1)

介绍机器学习(ML)应用的需求正在不断增长。许多资料显示了如何训练ML算法。然而,ML算法分为两个阶段:训练阶段——在这个阶段,基于历史数据训练ML算法,推理阶段——ML算法被用于计算对未知结果的新数据的预测。商业利益就处于推理阶段&#x…

php系统函数区分大小写,php函数名区分大小写吗?

PHP对大小写敏感问题的处理比较乱,写代码时可能偶尔出问题,所以下面本篇文章就来总结一下。有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。但我不是鼓励大家去用这些规则。推荐大家始终坚持“大小写敏感”&#x…

提取javadoc_使用JavaParser从源文件中提取JavaDoc文档

提取javadoc很多人正在使用JavaParser实现最不同的目标。 其中之一是提取文档。 在这篇简短的文章中,我们将看到如何打印与类或接口关联的所有JavaDoc注释。 可以在GitHub上找到代码: https : //github.com/ftomassetti/javadoc-extractor 获取类的所有…

python条形堆积图_python – 使用DataFrame.plot显示堆积条形图中...

您可以使用plt.text根据数据将信息放在位置. 但是,如果你有非常小的条形,可能需要一些调整才能看起来很完美. df_total df[Total Cost] df df.iloc[:, 0:4] df.plot(x Airport, kindbarh,stacked True, title Breakdown of Costs, mark_right True) df_rel df[df.column…

dmc matlab程序,matlab编的DMC程序.doc

matlab编的DMC程序clear all;% close all;%系统模型建立num[0.8];den[225 1];[a,b,c,d]tf2ss(num,den);% step(num,den);Ts30;lambda60;[ad,bd,cd,dd]c2dt(a,b,c,Ts,lambda);[numd,dend]ss2tf(ad,bd,cd,dd);[a,x]dstep(ad,bd,cd,dd);P10;M5;N50;%动态矩阵Afor i1:Pfor j1:Mif j…

mega2560单片机开发_[MEGA DEAL] Ultimate Java开发和认证指南(59%折扣)

mega2560单片机开发通过介绍世界上最受欢迎的编程语言之一掌握Java编程概念 嘿,怪胎, 本周,在我们的JCG Deals商店中 ,我们提供了一个极端的报价 。 我们提供的《 Ultimate Java Development and Certification Guide 》 仅售2…

MySQL使用规范_心得总结

文章目录命名规范数据库基本设计规范数据库字段设计规范索引设计规范常见索引列建议数据库开发规范数据库操作行为规范命名规范 1.所有数据库对象名称必须使用小写字母并用下划线分割 2.禁止使用 MySQL 保留关键字,如果表名中包含关键字查询时,需要使用…

java界面 文件选择器_掌握java技术 必备java工具应用知识

在现如今的互联网时代里,Java无疑是一种极为流行的开发语言,无论是程序界还是整个互联网行业势必带来很大的影响。不管是人才需求还是薪资水平上,Java的发展前景都是很乐观的。关于Java的一些常用的工具,也是需要我们不断去掌握和…