Cloudera Operational Database experience (dbPaaS) available as Technical Preview

Cloudera Operational Database experience (dbPaaS) available as Technical Preview

The Cloudera Operational Database (COD) experience is a managed dbPaaS solution which abstracts the underlying cluster instance as a Database. It can auto-scale based on the workload utilization of the cluster and will be adding the ability to auto-tune (better performance within the existing infrastructure footprint) and auto-heal (resolve operational problems automatically) later this year. It offers multi-modal client access with NoSQL key-value using Apache HBase APIs and relational SQL with JDBC (via Apache Phoenix).  The latter makes COD accessible to developers who are used to building applications that use MySQL, Postgres, etc.

It is fully integrated with Cloudera SDX (Shared Data Experience) offering common security, auditing and lineage as any of the other CDP (Cloudera Data Platform) experiences. The database can be paused and resumed for R&D environments offering additional cost optimization.

With COD, Cloudera automates all of the complexity in order to ensure an easy developer experience.  This allows developers to focus on the applications they are authoring without having to wait on their DBA or Hadoop admin to spend weeks if not months procuring hardware, setting up the database, etc.  Similarly, it enables DBAs to quickly and easily setup a database for their development teams or even empower them to create their own databases. 

COD preserves the scalability of the underlying components enabling customers to deploy very large scale applications. It supports schema flexibility which ensures that customers can easily evolve their use cases and don’t need to worry about the underlying cluster infrastructure.

COD is available for both AWS & Azure cloud deployments and utilizes cloud object storage out of the box.

Here is a sneak peek at COD in action:

Creating a database requires two things: an environment (a logical entity with specified virtual network and region on a customer’s cloud provider account, associated with a DataLake for storage) and a database name:

Create Database

 

After a few minutes, the database will be available and you can see the status of your database along with selected database metrics

Database Charts

Developing applications against this database is easy.  The database instance provides client connectivity information and all you need to do is write the application using the connection strings

connect phoenix thin

It is possible to write your first app in a few minutes.

Minimal amount of code is required to setup the application and you can simply import “phoenixdb” to get the underlying drivers for Python.

Below is an example of a simple python based application created against a newly created database:

import phoenixdb
import configparser

class Database:

    def connect(self):
        REQUIRED_OPTS = ['Username', 'Password', 'Url']
        config = configparser.ConfigParser()
        config.read('config.ini')
        if not 'COD' in config:
            raise Exception("Could not find section for COD in config.ini")
        cod_config = config['COD']
        opts = {}

        # Validate the configuration
        for required_opt in REQUIRED_OPTS:
            if not required_opt in cod_config:
                raise Exception("Did not find %s in configuration" % (required_opt))    
  
      # Provide non-required options
        if 'Truststore' in cod_config:
            opts['verify'] = cod_config['Truststore']
        if 'Authentication' in cod_config:
            opts['authentication'] = cod_config['Authentication']
        else:
            opts['authentication'] = 'BASIC'

        # Read required options
        opts['avatica_user'] = cod_config['Username']
        opts['avatica_password'] = cod_config['Password']
        return phoenixdb.connect(cod_config['Url'], autocommit=True, **opts)

It is similarly straightforward to create a table, add data and query it:

import phoenixdb
from database import Database

def load():
    db = Database()
    conn = db.connect()

    cursor = conn.cursor()
    cursor.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, username VARCHAR)")
    cursor.execute("UPSERT INTO users VALUES (?, ?)", (1, 'admin'))
    cursor.execute("SELECT * FROM users")
    print(cursor.fetchall())
    conn.close()

if __name__ == '__main__':
    load()

If you are interested in seeing if Cloudera Operational Database could meet your needs, please reach out to your local Cloudera account team.

Krishna Maheshwari
Director of Product Management
More by this author
Josh Elser
More by this author
Amit Virmani
More by this author

Leave a comment

Your email address will not be published. Links are not permitted in comments.