All Projects → izeigerman → Akkeeper

izeigerman / Akkeeper

Licence: apache-2.0
An easy way to deploy your Akka services to a distributed environment.

Programming Languages

scala
5932 projects

Projects that are alternatives of or similar to Akkeeper

wasp
WASP is a framework to build complex real time big data applications. It relies on a kind of Kappa/Lambda architecture mainly leveraging Kafka and Spark. If you need to ingest huge amount of heterogeneous data and analyze them through complex pipelines, this is the framework for you.
Stars: ✭ 19 (-36.67%)
Mutual labels:  akka, yarn, hadoop
fastdata-cluster
Fast Data Cluster (Apache Cassandra, Kafka, Spark, Flink, YARN and HDFS with Vagrant and VirtualBox)
Stars: ✭ 20 (-33.33%)
Mutual labels:  yarn, hadoop
protoactor-go
Proto Actor - Ultra fast distributed actors for Go, C# and Java/Kotlin
Stars: ✭ 4,138 (+13693.33%)
Mutual labels:  distributed-systems, akka
knit
Deprecated, please use https://github.com/jcrist/skein or https://github.com/dask/dask-yarn instead
Stars: ✭ 53 (+76.67%)
Mutual labels:  yarn, hadoop
skein
A tool and library for easily deploying applications on Apache YARN
Stars: ✭ 128 (+326.67%)
Mutual labels:  hadoop, deployment
nact
nact ⇒ node.js + actors ⇒ your services have never been so µ
Stars: ✭ 1,003 (+3243.33%)
Mutual labels:  distributed-systems, akka
elixir cluster
Distributed Elixir Cluster on Render with libcluster and Mix Releases
Stars: ✭ 15 (-50%)
Mutual labels:  distributed-systems, deployment
docker-hadoop
Docker image for main Apache Hadoop components (Yarn/Hdfs)
Stars: ✭ 59 (+96.67%)
Mutual labels:  yarn, hadoop
Cloudbreak
A tool for provisioning and managing Apache Hadoop clusters in the cloud. Cloudbreak, as part of the Hortonworks Data Platform, makes it easy to provision, configure and elastically grow HDP clusters on cloud infrastructure. Cloudbreak can be used to provision Hadoop across cloud infrastructure providers including AWS, Azure, GCP and OpenStack.
Stars: ✭ 301 (+903.33%)
Mutual labels:  hadoop, deployment
Gaia
Build powerful pipelines in any programming language.
Stars: ✭ 4,534 (+15013.33%)
Mutual labels:  deployment, distributed-systems
Pixie
Instant Kubernetes-Native Application Observability
Stars: ✭ 589 (+1863.33%)
Mutual labels:  monitoring, distributed-systems
Data-pipeline-project
Data pipeline project
Stars: ✭ 18 (-40%)
Mutual labels:  hadoop, deployment
yarn-prometheus-exporter
Export Hadoop YARN (resource-manager) metrics in prometheus format
Stars: ✭ 44 (+46.67%)
Mutual labels:  yarn, hadoop
beanszoo
Distributed Java micro-services using ZooKeeper
Stars: ✭ 12 (-60%)
Mutual labels:  yarn, hadoop
Nact
nact ⇒ node.js + actors ⇒ your services have never been so µ
Stars: ✭ 848 (+2726.67%)
Mutual labels:  akka, distributed-systems
XLearning-GPU
qihoo360 xlearning with GPU support; AI on Hadoop
Stars: ✭ 22 (-26.67%)
Mutual labels:  distributed-systems, hadoop
Parquet4s
Read and write Parquet in Scala. Use Scala classes as schema. No need to start a cluster.
Stars: ✭ 125 (+316.67%)
Mutual labels:  hadoop, akka
Xlearning
AI on Hadoop
Stars: ✭ 1,709 (+5596.67%)
Mutual labels:  hadoop, yarn
Trino
Official repository of Trino, the distributed SQL query engine for big data, formerly known as PrestoSQL (https://trino.io)
Stars: ✭ 4,581 (+15170%)
Mutual labels:  hadoop, distributed-systems
Sensu Go
Simple. Scalable. Multi-cloud monitoring.
Stars: ✭ 625 (+1983.33%)
Mutual labels:  monitoring, distributed-systems

Akkeeper

Build Status Coverage Status License

Akkeeper (Akka Keeper or Actor Kernel Keeper) - is an easy way to deploy your Akka application to a distributed environment. Akka is a widely used Actor framework, but there are still no good practices and approaches of deploying applications that are based on this framework. Akkeeper provides a powerful set of capabilities to maintain your cluster. You can easily deploy, terminate and monitor your services at runtime. Akkeeper was built keeping Hadoop as a primary use case, that's why it currently supports only YARN as a resource manager. But this doesn't mean that other environments won't appear in future. Apache Spark and Apache Flink are good examples of Akka applications on Hadoop. Although both of them are data processing frameworks, I realised that YARN is not only MapReduce and can be used to distribute any kind of application. As a result your application acquires elasticity and resilience out of the box.

Some of the features provided by Akkeeper:

  • Builds the Akka Cluster and automatically discovers all cluster participants.
  • Allows to launch and terminate instances at runtime.
  • Application Master fault tolerance. Rejoins the existing cluster after restart.

Here are several ways of how Akkeeper can be useful for your project:

  • Distribute your microservices using Akkeeper.
  • Keep your master service(s) separately and use Akkeeper to launch new workers/executors on demand.

The project documentation is under construction.

How to build

Requirements:

Java 8
SBT version >= 1.0.0

To build a bundle for Scala 2.11:

// ZIP
sbt ++2.11.11 universal:packageBin
// TGZ
sbt ++2.11.11 universal:packageZipTarball

Scala 2.12:

// ZIP
sbt ++2.12.6 universal:packageBin
// TGZ
sbt ++2.12.6 universal:packageZipTarball

To build examples:

sbt package

Basic concepts

To understand how Akkeeper works you have to be aware of only two concepts: containers and instances.

Container

Container defines an environment where the instance is running. Container determines how many resources should be allocated for the instance and what actors should be launched as part of this instance. Containers can be added, removed and modified dynamically at runtime.

Instance

Instance is an execution unit in Akkeeper. Instance is just a running process with capabilities and properties of its container. "Deploy container" or "launch instance of container container_name" means the same - launching a process on some node in a cluster using the specified container's definition. Instances can be launched, monitored and terminated dynamically at runtime.

How to use

Download and unpack the latest Akkeeper package:

In order to use the Scala API the following dependency must be added to build.sbt:

libraryDependencies += "com.github.izeigerman" %% "akkeeper-api" % "0.4.11"

In case if you need to launch Akkeeper from your code the following dependency must be introduced:

libraryDependencies += "com.github.izeigerman" %% "akkeeper-launcher" % "0.4.11"

The easiest way to start using Akkeeper is through the configuration file. Here is a quick start configuration file example:

akkeeper {
  # The list of container definitions.
  containers = [
    {
      # The unique name of the container.
      name = "myContainer"
      # The list of actors that will be launched in scope of this container.
      actors = [
        {
          # The actor's name.
          name = "myActor"
          # The fully qualified name of the Actor implementation.
          fqn = "com.test.MyActor"
        }
      ]
      # The number of CPUs that has to be allocated.
      cpus = 1
      # The amount of RAM in MB that has to be allocated.
      memory = 1024
      # Additional JVM arguments that will be passed to instances of this container.
      jvm-args = [ "-Xmx2G" ]
      # Custom Java properties. Can be used to override the configuration values.
      properties {
        myapp.myservice.property = "value"
        akka.cluster.roles.0 = "myRole1"
        akka.cluster.roles.1 = "myRole2"
      }
    }
  ]
}

Make sure your HADOOP_CONF_DIR and YARN_CONF_DIR environment variables point to the directory where the Hadoop configuration files are stored. Also ZK_QUORUM variable should contain a comma-separated list of ZooKeeper servers. Now just pass this file together with your JAR archive which contains actor com.test.MyActor to Akkeeper:

./bin/akkeeper-submit --config ./config.conf /path/to/my.jar

How to deploy and monitor instances at runtime

REST API

REST API documentation

Akkeeper Actor services

This approach is applicable only when you're managing an Akkeeper cluster from the application or service which is part of the same Akka cluster.

Deploy API

Use this API to launch new instances on a cluster.

import akkeeper.api._
import akkeeper.master.service.DeployService
...
val actorSystem = ActorSystem("AkkeeperSystem")
// Create a remote Deploy Service actor reference.
val deployService = DeployService.createRemote(actorSystem)
// Launch 1 instance of container "myContainer".
(deployService ? DeployContainer("myContainer", 1)).onSuccess {
  case SubmittedInstances(requestId, containerName, instanceIds) => // submitted successfully.
  case OperationFailed(requestId, reason) => // deploy failed.
}

Monitoring API

Use this API to track instance status or terminate a running instance.

import akkeeper.api._
import akkeeper.master.service.MonitoringService
...
val actorSystem = ActorSystem("AkkeeperSystem")
// Create a remote Monitoring Service actor reference.
val monitoringService = MonitoringService.createRemote(actorSystem)
// Fetch the list of running instances.
(monitoringService ? GetInstances()).onSuccess {
  case InstancesList(requestId, instanceIds) => // a list of running instances.
  case OperationFailed(requestId, reason) => // fetching process failed.
}

Here is the list of all messages supported by the Monitoring Service.

Container API

Use this API to fetch, create, update or delete container definitions.

import akkeeper.api._
import akkeeper.master.service.ContainerService
...
val actorSystem = ActorSystem("AkkeeperSystem")
// Create a remote Container Service actor reference.
val containerService = ContainerService.createRemote(actorSystem)
// Fetch the list of existing containers.
(containerService ? GetContainers()).onSuccess {
  case ContainersList(requestId, containerNames) => // a list of available containers.
  case OperationFailed(requestId, reason) => // fetching process failed.
}

Here is the list of all messages supported by the Container Service.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].