手机站:/m

谷歌云_数据库应中国物联网-用课程_免费6个月

时间:2021-09-08 15:11编辑:淘客樊里来源:淘客樊里当前位置:主页 > CDN >

在这篇博文中,我想分享一些想法和经验,使用sapjavaconnector实现一个组件,以方便地访问数据,并将大数据集群中的数据管道等非SAP流程与sapnetweaver应用服务器集成。这最终导致了我们的解决方案称为i-OhJa.

大约两年前,我们开始为金融领域的一些客户开发一个项目。主要任务是建立一个Hadoop栈,作为新的公司范围的大数据和流媒体BI平台。迁移阶段的一个需求是将数据从sapbw(在Oracle上)装载到Kafka,另一个需求是以流模式将数据从Kafka装载到BW。在此期间,Kafka流超出了范围,所以我们决定在Spark流中实现我们的数据流。这是第一个在Spark集群中在客户端运行i-OhJa的项目。

在该项目之前,我们已经开始评估SAP JCo作为一个库,不仅为SAP Netweaver系统中的数据库提供JDBC驱动程序,而且能够以灵活的方式紧密集成SAP和非SAP应用程序。我们对i-OhJa的目标是在高度监管的金融机构部门中实现满足上述要求的精简库,而无需引入新的复杂基础设施或集群。JCo是一个强大但也是基本的Java库,大数据培训班哪个好,能够使用SAP Cryptolib提供的SNC和SSO建立到SAP Netweaver系统的可信和加密连接,最适合这种情况。

老实说,我上一次使用Eclipse IDE在Java和J2EE中实现软件是在2008年。在基于sapnetweaver的系统中使用ABAP很长一段时间之后,我很高兴使用更现代的IDE和Scala这样的功能和类型安全语言作为我们开发I-OhJa的选择。在上述场景中,我们选择使用sapbw开放集线器和sapnetweaver事件从BW获取数据。相反,我们使用Webservice数据源以流式实时方式将数据加载到BW中。所有这些接口都基于支持RFC的功能模块,并紧密集成到SAP BW的监控和调度环境中。

由于已经有一堆ETL工具,并且我们希望尽可能地精简i-OhJa,因此我们决定只涵盖ELT的提取和加载。这也遵循了现代微服务架构的一些基本思想。在上述场景中,这意味着Kafka中保存的数据是通过OpenHub或Webservice数据源传输的数据的紧密复制。

除了Scala的功能风格之外,我们最喜欢的一点是保持代码类型的安全。在开始实现i-OhJa后不久,我们决定将所有必要的JCo类封装在Scala类中,以便能够在模式匹配和收集函数中本地使用它们,并提供类型安全性和不变性。我们为函数模板、函数请求、函数响应、表、记录/结构、记录字段、JCo 3.1中可用的所有基本类型、参数列表、JCo的相应元数据类、DDIC类型、消息类型、选择范围、聚合函数、ABAP异常、JCo目的地、,BAPI返回消息、JCo上下文中的BAPI事务提交和回滚等等。

在我们的一位客户那里,我们看到了用Scala编写的客户特定ELT框架,数据分析怎么做,使用类似JSON的配置文件来定义各个数据管道。遵循这种动态原则的概念有一些缺点:

每次执行批处理或流式处理管道时都需要解析配置文件除了语法正确性之外,配置文件中的问题还会导致运行时异常,因为它们会绕过编译器的类型检查。ELT框架的实现大量使用asInstanceOf和isInstanceOf等方法来处理大量不同的接口数据结构和类型。由于所有ELT逻辑都保存在配置文件中,因此在管道运行时,只要解析这些文件,就可以知道各个数据类型。使用配置文件来定义管道使它们更加灵活。它们可以更改和维护,而无需更改底层代码。因此,不需要重新编译更改,也不必遵循客户的构建和发布周期。我们认为这是一个缺点。对配置文件的更改可与绕过所有代码检查和在持续集成过程中实现的质量门的代码更改相比较。

作为静态类型安全的支持者,我们决定采用不同的方法来处理不同数据结构的挑战。我们实现了Scala代码生成器,云服务器主机,生成表示各个RFC函数模块结构的case类。为简单的BAPI(如BAPI\u ODSO\u GETLIST)生成的类的一个示例,提供了sapbw系统中可用dso的列表,如下所示:

JCo由两种类型的库组件组成:JCo server和JCo client。目前,只要知道JCo服务器将用于sapnetweaverabap发起通信的情况就足够了(这里是OpenHub场景)。如果非SAP应用程序调用RFC(这里是:Webservice数据源推送),则使用JCo客户端。

BW和ODP特定的客户端库

对于比只调用一个RFC功能模块更复杂的接口、协议和函数库,提供特定的客户端库模块是有意义的。

我们已经为良好的老BW OpenHub连接、BW bapi和操作数据供应。正如人们可能期望的那样,所有这些接口都基于普通的RFC函数,甚至ODPs都是基于ALE/IDoc的业务内容数据源的继承者。

当通过OpenHubs、BW BAPI或ODPs等提供不同类型数据结构的通用接口查询数据时,您将面临的一个挑战是数据序列化为文本编码字符串,记录是单个字符串中不同数据类型的串联。重构数据结构的一个明显的选择是将这些字符串直接解析为本机Java或Scala对象。我们采用了另一种方法,返利平台,将字符串解析为基于从相应功能模块获得的元信息动态创建的包装JCo结构。通过这种方式,我们使用JCo将字符串转换为适当的数据类型,然后我们可以使用i-OhJa为各个包装类提供的所有方法。

上一篇全站加速_文件存物联网大赛-储在哪里_哪家好

下一篇美国服务器_国内便宜企业开发软件-的云主机有哪些_代金券

云市场知识本月排行

云市场知识精选