akka

ScalaMP ---- 模仿 OpenMp 的一个简单并行计算框架

て烟熏妆下的殇ゞ 提交于 2020-03-03 16:59:45
1、前言 这个项目是一次课程作业,老师要求写一个并行计算框架,本人本身对openmp比较熟,加上又是scala 的爱好者,所以想了许久,终于想到了用scala来实现一个类似openmp的一个简单的并行计算框架。 项目github地址: ScalaMp 2、框架简介 该并行计算框架是受 openmp 启发,以 scala 语言实现的一个模仿 openmp 基本功能的简单并行计算框架, 该框架的 设计目标是,让用户可以只需关心并行的操作的实现而无需考虑线程的创建和管理。本框架实现了最 基本的并行代码块和并行循环两个功能。 接下来会介绍框架的接口设计和具体的技术实现细节。然后会以 3 个具体的例子来演示框架的 使用方法, 和验证框架 的正确性,更多的例子详见github上的example.Main.scala文件。 3 个具体的并行计算问题包括: 1 、梯形积分法 2 、计算 pi 值 3 、多线程分段下载文件(图片、 mp3 ) 3、框架接口设计与技术实现 3.1、接口设计 该框架主要是模仿了 openmp 的“ omp parallel ”和“ omp parallel for ”两条并行命令, 以 scala 语言 实现了自己的 版本。 在介绍接口设计之前首先我们可以分析一下以上五个问题的做一下抽象,把相同的可并行的 部分抽象出 来。并行这 五个问题,抽象出来可以看成是给定一个任务

Flink整合Oozie Shell Action 提交任务带Kerberos认证

旧时模样 提交于 2020-02-26 13:57:57
最近这段时间一直在忙新集群迁移,上了最新的cdh6.3.0 于是Flink 提交遇到了许多的问题,还好有cloudera License 有了原厂的帮助和社区的伙伴,问题解决起来快了不少。 集群具体情况是 CDH6.3.0+Flink1.8.1,整个数据平台全部组件都上了kerberos和ldap因为要过认证,所以任务提交方法我们选择统一Oozie提交任务,并且因为kerberos认证,还需要Flink perjob 需要单独的keytab,才能细粒度的控制权限,因为我们现在部门之间计算资源的划分是通过yarn资源队列,但是现在Flink支持的不是很好,目前只能在配置文件中配置一个keytab,job启动都去这个拉这个keytab复制到自己的contain里面,但是Flink第一提交方式还是希望能够通过oozie提交job,由于oozie没有天生支持Flink提交,所以只能选择oozie shell action 的方式提交job。 在Flink搭建好以后开始提交任务,用oozie shell提交: #!/bin/bash flink run -m yarn-cluster flinktest.jar 马上 Duang ! flink command not find 改成命令绝对路径以后,还是 Duang! org.apache.flink.client.deployment

Spring WebFlux -01-Reactor 简介

巧了我就是萌 提交于 2020-02-26 04:37:29
Reactor是第四代Reactive库,基于Reactive Streams规范在JVM上构建非阻塞应用程序。Reactor侧重于服务器端响应式编程,是一个基于Java 8实现的响应式流规范(Reactive Streams specification)响应式库。 作为Reactive Engine/SPI,Reactor Core和IO模块都为重点使用场景提供了响应流构造,最终与Spring、RxJava、Akka Streams和Ratpack等框架结合使用,作为Reactive API,Reactor框架模块提供了丰富的消费功能,如组合和发布订阅事件。 本节对Reactor的介绍以基本的概念和简单使用为主,更多Reactor高级特性可参考Reactor官网: http://projectreactor.io/ 。 来源: oschina 链接: https://my.oschina.net/u/3777515/blog/3163492

《软件架构基础》- 分布式系统与计算

放肆的年华 提交于 2020-02-25 23:50:42
分布式系统与计算 什么是分布式系统 建立在网络和分散节点上的软件系统 网络和分布式的区别在于高层软件 每一个节点高度自治 分布式节点对用户透明,用户感知不到数据是分布的 为什么要使用分布式 单机容量有限 计算容量 存储容量 分布式模块高度自治,可以使用异构系统 每个模块关注自身业务,更适合大型团队开发 容错,高可用 分布式第一原则 不要使用分布式系统 ##分布式的类型 应用的分布式 系统模块的分布式 如:数据库 业务模块的分布式 负载均衡 计算的分布式 存储的分布式 Actor模型 可以收发消息的对象 消息通信是Actor唯一的通信手段 支持极高的并行 易于分布式 AKKa CAP原理 一致性(Consistency) 任何一个读操作总是能读取到之前完成的写操作结果 可用性(Availability) 每一个操作总是能够在确定的时间内返回 分区容忍性(Partition tolerance) 在出现网络分区的情况下,仍然能够满足一致性和可用性 一致性的理解角度 客户端:多并发访问时更新过的数据如何获取 服务端:是更新如何复制分布到整个系统,以保证数据最终一致 一致性的分类 强一致性 要求更新过的数据能被后续的访问都能看到 弱一致性 能容忍后续操作访问不到更新 最终一致性 经过一段时间后要求能访问到更新后的数据 来源: oschina 链接: https://my.oschina

Akka escalate supervision strategy stops children

我是研究僧i 提交于 2020-02-06 16:06:20
问题 I'm experimenting with OneForOneStrategy strategy, which escalates the failure. My structure of Actor is: Supervisor -> Slave , where Slave is child of Supervisor. Slave responds to 2 messages - " fail " (throws exception) and " work " (makes some logging) My first problem was that if Slave failed, then Supervisor got restarted (because of the escalation strategy, the "Guardian" have restarted it), however Slave was stopped and not restarted. I guess there is a reason to this default behavior

Akka escalate supervision strategy stops children

孤者浪人 提交于 2020-02-06 16:04:41
问题 I'm experimenting with OneForOneStrategy strategy, which escalates the failure. My structure of Actor is: Supervisor -> Slave , where Slave is child of Supervisor. Slave responds to 2 messages - " fail " (throws exception) and " work " (makes some logging) My first problem was that if Slave failed, then Supervisor got restarted (because of the escalation strategy, the "Guardian" have restarted it), however Slave was stopped and not restarted. I guess there is a reason to this default behavior

How to read only Successful values from a Seq of Futures

两盒软妹~` 提交于 2020-02-06 04:10:07
问题 I am learning akka/scala and am trying to read only those Future s that succeeded from a Seq[Future[Int]] but cant get anything to work. I simulated an array of 10 Future[Int] some of which fail depending on the value FailThreshold takes (all fail for 10 and none fail for 0). I then try to read them into an ArrayBuffer (could not find a way to return immutable structure with the values). Also, there isn't a filter on Success/Failure so had to run an onComplete on each future and update buffer

Akka Study - 白墨的博客

夙愿已清 提交于 2020-02-05 12:08:02
Akka 用于构建高并发、分布式且具有容错机制的事件驱动型的应用,本文是 Scala Cookbook 一书中 Akka 部分内容的总结。 Akka Guide Actor 模型与线程比较,是一种高层次的抽象。说 “高层次的抽象”这句话,就意味着这个东西简单易用,你不需要考虑太多底层的其他东西。所以如果理解了 Actor 模型的原理,就可以专注解决问题,而不需要把注意力放在像线程、锁和共享数据这样低层次的问题上。 优势 轻量级的事件驱动模型:对相应的消息事件做出异步回应,并且消息是不可变的,因为需要在不同线程之间共享。 容错性:Akka 可以用于构造 “自我修复型” 系统。 位置透明性:Akka actors 可以跨过多个 JVM 或者 服务器,其被设计为通过纯粹的消息在分布式系统中进行沟通。 在 Actor 模型中,消息是唯一的沟通方式,你要做任何事情都需要发送消息,不能直接更改 Actor 内部的状态或者使用其内部的资源。 Actor 模型简介 1、Actor 是 actor 系统中的最小单位,就类似对象是 OOP 系统中的最小单位一样。 2、也正如一个对象,一个 actor 的状态和行为也是被封装起来的。你不能直接去访问或执行一个 actor 的方法或者是成员对象(field),而只能是向这个 actor 发送一个要求访问其内部状态的消息

How to deal with long initialization of an Akka child actor?

元气小坏坏 提交于 2020-01-30 19:32:44
问题 I have an actor which creates a child actor to perform some lengthy computations. The problem is that the initialization of the child actor takes a few seconds and all messages that the parent actor sends to the child between it is created and gets fully initialized are dropped. This is the logic of the code that I am using: class ChildActor extends Actor { val tagger = IntializeTagger(...) // this takes a few seconds to complete def receive = { case Tag(text) => sender ! tagger.tag(text)

How to deal with long initialization of an Akka child actor?

﹥>﹥吖頭↗ 提交于 2020-01-30 19:29:39
问题 I have an actor which creates a child actor to perform some lengthy computations. The problem is that the initialization of the child actor takes a few seconds and all messages that the parent actor sends to the child between it is created and gets fully initialized are dropped. This is the logic of the code that I am using: class ChildActor extends Actor { val tagger = IntializeTagger(...) // this takes a few seconds to complete def receive = { case Tag(text) => sender ! tagger.tag(text)