Oryx2 开发者文档

环境需求

  • git, 或者一个支持git的IDE
  • Apache Maven 3.2.1 或者更新版本
  • Java JDK (不能只有JRE) 7 或者更新版本

以上需要已经安装到了你的开发环境中。

Building

克隆代码到你本地,并且编译:

1
2
3
git clone https://github.com/OryxProject/oryx.git oryx
cd oryx
mvn -DskipTests package

会编译出如下的二进制的jar文件:

  • 批处理层: deploy/oryx-batch/target/oryx-batch-2.1.2.jar
  • 实时处理层: deploy/oryx-speed/target/oryx-speed-2.1.2.jar
  • 服务层: deploy/oryx-serving/target/oryx-serving-2.1.2.jar

友情提醒,如果你对开发Oryx感兴趣,可以根据这个分支克隆自己的分支,然后就可以提交修改了。

Java 8

如果使用Java8编译,需要添加参数-Pjava8 并且测试这里的指令。

Platform Only

默认的编译包括基于Spark MLlib和其他库的端到端的ML程序。如果只是编译lambda和ML层,需要通过参数-P!app-tier关闭其他的选项。注意,在bash中,!需要转义: -P!app-tier。

测试

mvn 测试会执行所有的但愿测试用例。也同时会执行所有的集成测试,这个可能会需要稍微长点的时间。

模型对应表

主要的模型和他们对应的层:

  Serving Speed Batch
Binary oryx-serving oryx-speed oryx-batch
App oryx-app-serving oryx-app-mllib oryx-app oryx-app-mllib oryx-app
ML   oryx-ml oryx-ml
Lambda oryx-lambda-serving oryx-lambda oryx-lambda

支持的模型,比如:oryx-common, oryx-app-common, oryx-api, and oryx-app-api 没有在这里列出了。

实现一个Oryx 程序

Oryx 中的“app 层”,是实现了推荐的真实的批处理,实时,服务层逻辑,集群和分类。然而,任何实现都需要使用到Oryx。他们也可以混合和匹配。举个例子,你可以重新实现ALS-related推荐的批处理层,但是仍然使用原来的ALS的服务层和实时计算层。

创建一个程序

在每个例子中,创建一个自定义的批处理层,实时计算层或者服务层的程序都需要实现com.cloudera.oryx.api中的几个关键的Java接口或者Scala的特性。这些接口/特性可以在项目的oryx-api模型中找到。

  Java Scala
Batch batch.BatchLayerUpdate batch.ScalaBatchLayerUpdate
Speed speed.SpeedModelManager speed.ScalaSpeedModelManager
Serving serving.ServingModelManager serving.ScalaServingModelManager

com.cloudera.oryx.api也包含大量的关键的类和接口,举个例子,serving.OryxResource 是一个入口,用来编译自定义的JAX-RS 端点,但是不需要使用。

编译程序

进入你的程序的这些接口/特性,添加一个com.cloudera.oryx:oryx-api的依赖,scope字段需要填写“provided”,在Maven中,需要添加如下依赖: In Maven, this would mean adding a dependency like:

1
2
3
4
5
6
7
8
<dependencies>
  <dependency>
    <groupId>com.cloudera.oryx</groupId>
    <artifactId>oryx-api</artifactId>
    <scope>provided</scope>
    <version>2.1.2</version>
  </dependency>
</dependencies>

这些artifacts被放在了Cloudera这个分支下,因此在编译的时候需要引用这个分支:

1
2
3
4
5
6
<repositories>
  <repository>
    <id>cloudera</id>
    <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
  </repository>
</repositories>

一个最小的实例可以访问example/ 这里。

”Word Count” 这个程序是按照空格将行分割成独立的单词,然后统计出排重后的单词出现的次数。

编译代码后生成一个JAR文件,包含了程序实现和所有第三方的diam,如果使用Maven,可以通过mvn package命令。

编译 Word Count 例子

举例:编译样例代码如下:

1
2
cd app/example
mvn package

生成的JAR包在target/example-2.1.2.jar。

自定义Oryx程序

当发布一个源自Oryx的预打包程序,在某些情况下,有可能会提供一个扩展的实现,从而可以自定义他们的行为。举例,ALS推荐程序暴露了com.cloudera.oryx.app.als.RescorerProvider接口。这些特定程序API类可以在模块oryx-app-api中找到。这些接口的实现也可以在独立模式下被编译,打包,部署。

1
2
3
4
5
6
7
8
9
<dependencies>
  <dependency>
    <groupId>com.cloudera.oryx</groupId>
    <artifactId>oryx-app-api</artifactId>
    <scope>provided</scope>
    <version>2.1.2</version>
  </dependency>
</dependencies>

发布程序

拷贝生成的JAR文件–myapp.jar,放到需要执行的Oryx 二进制JAR文件相同的目录下。

修改Oryx的配置文件,以便于引用自定义的批处理,实时计算和服务层的实现。 当执行批处理,实时计算和服务层时,需要添加–app-jar myapp.jar到oryx-run.sh命令行中。

发布 Word Count 例子

举例,如果已经编译好了上述的“word count”的程序,你可以执行这个程序,直接引用wordcount-example.conf这个配置文件:

1
./oryx-run.sh batch --conf wordcount-example.conf --app-jar example-2.1.2.jar

… 对于实时计算和服务层也是同样的。

1
2
3
4
curl -X POST http://.../add/foo%20bar%20baz
...
curl http://.../distinct
{"foo":2,"bar":2,"baz":2}

配置文件本身已经配置好了主机名称和Cloudera Quickstart VM的参数。事实上,这个例子可以作为一个集群配置的例子:Cloudera Quickstart VM Setup