Chinaunix首页 | 论坛 | 博客
  • 博客访问: 33343
  • 博文数量: 12
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-08 14:07
个人简介

从小白到大神需要多久????

文章分类
文章存档

2015年(12)

我的朋友

分类: 大数据

2015-03-17 00:03:40

第一章  创建Operator
一、概述:
Operator时Orchestrate应用中的基本功能单元,Operator从输入的数据节点中读取记录,对这些记录去执行操作,然后将结果信息写入到输出的数据节点上。一个Operator可能会执行一个类似从从输入数据中拷贝记录到输出数据的简单操作,或者也可以在操作中增加,删除,改变记录字段。
你可以在你的应用中使用已经定义好的Operator,Orchestrate提供了大量的类似于copy operator(APT_CopyOperator),sample operator(APT_SampleOperator)等等。
你也可以定义自己的operators,通过Orchestrate提供的步骤你可以包装定义一种包装了unix命令的operator,具体可以参看User Guide文档。
你也可以从Orchestrate提供的三种基本的类中派生出一个类,三种基本的类是:APT_Operator, APT_CompositeOperator, APT_SubProcessOperator.你能定义以下符合上述三种类型的operator:
1. Operators
2. 复合operators(composite operators),它能包含不止一个operator
3. 次级operators(Subprocess operators),它可以允许你包含一个第三方可执行程序到框架         中。
这一章描述了从APT_Operator中派生一个operator需要的步骤,你可以从第二章和第三章中了解到怎么从APT_CompositeOperator和APT_SubprocessOperator中派生一个operator,这些章节提供了例子去编写程序,例如使用schema变量或者动态的应用schema等。
二、派生的基本要求:
从基本类APT_Operator中派生一个operator需要注意以下内容:
1. 使用APT_Operator的公有和私有接口。
2. 包含运行时间类型信息(RTTI)和持久性的支持。
3. 通过在APT_DEFINE_OSH_NAME这个宏中描述使Orchestrate的命令行参数并时参数使能,重 写initializeFromArgs_()这个虚函数使你的operator获得这些参数,Orchestrate的参   数检查处理将在第5章描述。
4. 重写两个纯虚函数:describeOperator()和runLocally(),这两个函数里面包含一些 会在你的输入和输出以及记录处理中会用到的程序和指定schema的接口以及数据节点的类   型和数量。
  另外,你可以选择性的指定以下内容:
  - operator的执行模式:并行执行(parallel)或者顺序执行(sequential)
  - 并行operator(parallel operators)的分区方法
  - 串行operator(sequential operators)的汇总方法
  - cursor的使用,它定义的当前输入和输出记录的数据节点(data sets)
  - 字段accessors的使用,它提供对任何一个记录或者schame变量中字段的使用方法。它简             化了对整个输入或者输出记录的使用。
  - 数据转化(transfer)
5.包含给用户对发现和传递错误,警告的状况的支持。
6.编译你的代码,要包含它通过在环境变量OSH_PRELOAD_LIBS在库选项中提供的共享库。
7.运行你的operator
三、APT_Operator类的接口:
这个类的头文件在$APT_ORCHHOME/include/apt_framework/operator.h中,包含了对函数的定义,你也可以浏览Orchestrate提供的HTML文档。
下面的图展示了APT_Operator中的所有接口,你可以使用这些函数去连接一个数据节点或者也可以一个view和transfer adapters。


两个纯虚函数:describeOperator()和runLocally(),以及虚函数initializeFromArgs_()都包含在保护类型的接口中,你必须重写这三个函数。
runLocally函数被每一个并行的operator实例引用,在runLocally函数被调用之后,postFinalRunLocally函数将被每一个数据分区所引用,(The default implementation of both functions is a no op).?????
当一个单元的工作(unit-of-work??)执行结束,runLocally函数可能已经被调用很多次,在这情况下,postFinalRunLocally函数只会在runLocally函数最后一次被引用之后调用。在设置了检查点的情况下,postFinalRunLocally函数在每个分割的部分中只被调用一次,在每个分割部分的最后被调用。
阅读(2009) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~