Oryx Speed 层解析
来源:互联网 发布:数据库程序设计题表 编辑:程序博客网 时间:2024/06/08 05:31
1、程序入口 com.cloudera.oryx.speed.Main
public static void main(String[] args) throws Exception {
try (SpeedLayer<?,?,?> speedLayer = new SpeedLayer<>(ConfigUtils.getDefault())) {
HadoopUtils.closeAtShutdown(speedLayer);
speedLayer.start();
speedLayer.await();
}
}
try (SpeedLayer<?,?,?> speedLayer = new SpeedLayer<>(ConfigUtils.getDefault())) {
HadoopUtils.closeAtShutdown(speedLayer);
speedLayer.start();
speedLayer.await();
}
}
调用Lambda层的com.cloudera.oryx.lambda.speed.SpeedLayer.start()
属性的配置文件有2个:
1)oryx-common下面的reference.conf
2)运行项目时提供的oryx.conf
BatchLayer.start()主要做的事情按顺序如下:
1、构建SparkStreamingContext, 默认批次间隔10秒
generation-interval-sec = 10
2、设置SparkStreaming Checkpoint
3、构建KafkaDStream (从kafka input-topic)
构建kafka Consumer (从kafka update-topic)
4、实现SpeedModelManager或者ScalaSpeedModelManager。
由SpeedModelManager的子类来处理kafka input-topic和update-topic的数据。
SpeedModelManager有2个接口:
void consume(Iterator<KeyMessage<String,U>> updateIterator, Configuration hadoopConf) throws IOException;
和
Iterable<U> buildUpdates(JavaPairRDD<K,M> newData) throws IOException;
SpeedModelManager有2个子类:
AbstractSpeedModelManager和ScalaSpeedModelManagerAdapter
Java版本继承AbstractSpeedModelManager
ScalaSpeedModelManager有1个子类:
AbstractScalaServingModelManager
scala版本继承AbstractScalaServingModelManager
以ALS模型为例
ALSSpeedModelManager继承 AbstractSpeedModelManager
ALSSpeedModelManager里面主要做2件事情:
1) 由SpeedLayerUpdate消费input-topic里的数据,调用ALSSpeedModelManager的buildUpdate()方法来产生更新后的X和Y信息,然后发送到update-topic
try (TopicProducer<String, U> producer = new TopicProducerImpl<>(updateBroker, updateTopic, true)) {
updates.forEach(update -> producer.send("UP", update));
}
ALSSpeedModelManager的buildUpdate()主要是处理增量数据
2) 调用ALSSpeedModelManager的consume()来消费update-topic的数据
如果消息的key是UP, 则该消息是由Speed层自己在SpeedLayerUpdate里发送的(见上面第一步)
更新ALSSpeedModel。
如果消息的key是MODEL或者MODEL_REF, 则该消息是由Batch层MLUpdate.runUpdate()里发送的.是全量数据
Batch发送数据的周期比较长,key为MODEL或者MODEL_REF的次数会比较少,新数据进来以后一般都是走UP,只有第一次进来的数据走MODEL或MODEL_REF,以后间隔一段时间
..1. 它会按消息里指明的信息先加载模型PMML pmml(直接从消息本身加载或者从消息指定的model在hdfs上的路径加载)
..2. 从PMML读取features, implicit, logStrength, epsilon。
..3. 由features, implicit, logStrength, epsilon构建ALSSpeedModel
5、更新Kafka Offsets
总结:
SpeedLayer --> AbstractSpeedModelManager.consume() -->
|--> SpeedLayerUpdate --> SpeedModelManager.buildUpdates()
SpeedLayerUpdate.call(newData) 会把SpeedModelManager.buildUpdates()的结果updates发送到Kafka Update Topic
producer.send("UP", update)
AbstractSpeedModelManager 实现了SpeedModelManager
阅读全文
0 0
- Oryx Speed 层解析
- Oryx-Batch层解析
- Oryx Serving 层解析
- Oryx
- speed
- oryx 推荐系统的使用
- Photoshop图层解析
- H264 NAL层解析
- Android_framework层Service解析
- 解析Core Services 层
- STKFramework层源码解析
- H264 NAL层解析
- 解析Core Services 层
- Android HAL层解析
- ROI Pooling层解析
- Softmax层解析
- Caffe每一层解析
- 应用层访问硬件层解析
- 【Spring启动过程分析】(1)启动流程简介
- Python 读取写入 json 格式的文件
- Android开发环境搭建-Window系统
- 移动学习 AndroidStudio内存优化分析—alloc文件分析
- logcat 命令
- Oryx Speed 层解析
- 说说ios原生和H5交互
- Python中使用 futures 处理并发
- 给textview设置选中的状态(特殊)
- FileInputStream、FileDescriptor源码学习
- Python小练习
- C++容器总结
- DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解
- POJ 2342Anniversary party(树形dp)