BACHELOR S DEGREE PROJECT

Similar documents
YOUR APPLICATION S JOURNEY TO THE CLOUD. What s the best way to get cloud native capabilities for your existing applications?

Embedded Technosolutions

Big Data Technology Ecosystem. Mark Burnette Pentaho Director Sales Engineering, Hitachi Vantara

Containers, Serverless and Functions in a nutshell. Eugene Fedorenko

The SMACK Stack: Spark*, Mesos*, Akka, Cassandra*, Kafka* Elizabeth K. Dublin Apache Kafka Meetup, 30 August 2017.

Case Study: Aurea Software Goes Beyond the Limits of Amazon EBS to Run 200 Kubernetes Stateful Pods Per Host

8/24/2017 Week 1-B Instructor: Sangmi Lee Pallickara

WHITEPAPER. The Lambda Architecture Simplified

AZURE CONTAINER INSTANCES

Using the SDACK Architecture to Build a Big Data Product. Yu-hsin Yeh (Evans Ye) Apache Big Data NA 2016 Vancouver

Using DC/OS for Continuous Delivery

/ Cloud Computing. Recitation 5 February 14th, 2017

STATE OF MODERN APPLICATIONS IN THE CLOUD

Stages of Data Processing

Choosing the Right Container Infrastructure for Your Organization

Data Acquisition. The reference Big Data stack

Things Every Oracle DBA Needs to Know about the Hadoop Ecosystem. Zohar Elkayam

Running MarkLogic in Containers (Both Docker and Kubernetes)

Introduction to Big-Data

Apache Flink. Alessandro Margara

WHITEPAPER. MemSQL Enterprise Feature List

Hadoop, Yarn and Beyond

Data Analytics at Logitech Snowflake + Tableau = #Winning

Container 2.0. Container: check! But what about persistent data, big data or fast data?!

EASILY DEPLOY AND SCALE KUBERNETES WITH RANCHER

TÉCNICA DEL NORTE UNIVERSITY

Overview. Prerequisites. Course Outline. Course Outline :: Apache Spark Development::

Sunil Shah SECURE, FLEXIBLE CONTINUOUS DELIVERY PIPELINES WITH GITLAB AND DC/OS Mesosphere, Inc. All Rights Reserved.

Develop and test your Mobile App faster on AWS

Strategic Briefing Paper Big Data

Big Data Architect.

Abstract. The Challenges. ESG Lab Review InterSystems IRIS Data Platform: A Unified, Efficient Data Platform for Fast Business Insight

When, Where & Why to Use NoSQL?

Red Hat Atomic Details Dockah, Dockah, Dockah! Containerization as a shift of paradigm for the GNU/Linux OS

DOCS

Modern Data Warehouse The New Approach to Azure BI

Building Scalable and Extendable Data Pipeline for Call of Duty Games: Lessons Learned. Yaroslav Tkachenko Senior Data Engineer at Activision

Azure Certification BootCamp for Exam (Developer)

Important DevOps Technologies (3+2+3days) for Deployment

Advanced Continuous Delivery Strategies for Containerized Applications Using DC/OS

Creating a Recommender System. An Elasticsearch & Apache Spark approach

Pagely.com implements log analytics with AWS Glue and Amazon Athena using Beyondsoft s ConvergDB

Data Acquisition. The reference Big Data stack

Disclaimer This presentation may contain product features that are currently under development. This overview of new technology represents no commitme

Zero to Microservices in 5 minutes using Docker Containers. Mathew Lodge Weaveworks

CIS 612 Advanced Topics in Database Big Data Project Lawrence Ni, Priya Patil, James Tench

Azure Data Factory. Data Integration in the Cloud

Docker Live Hacking: From Raspberry Pi to Kubernetes

Continuous Integration and Delivery with Spinnaker

Overview of Data Services and Streaming Data Solution with Azure

Think Small to Scale Big

/ Cloud Computing. Recitation 5 September 26 th, 2017

Lambda Architecture for Batch and Real- Time Processing on AWS with Spark Streaming and Spark SQL. May 2015

An Introduction to Big Data Formats

Making Immutable Infrastructure simpler with LinuxKit. Justin Cormack

An Introduction to Kubernetes

BUILDING MICROSERVICES ON AZURE. ~ Vaibhav

Data in the Cloud and Analytics in the Lake

Big Data Integration Patterns. Michael Häusler Jun 12, 2017

Rok: Data Management for Data Science

Next Paradigm for Decentralized Apps. Table of Contents 1. Introduction 1. Color Spectrum Overview 3. Two-tier Architecture of Color Spectrum 4

Architectural challenges for building a low latency, scalable multi-tenant data warehouse

Fluentd + MongoDB + Spark = Awesome Sauce

Getting Started With Serverless: Key Use Cases & Design Patterns

EXTRACT DATA IN LARGE DATABASE WITH HADOOP

CLOUD COMPUTING ARTICLE. Submitted by: M. Rehan Asghar BSSE Faizan Ali Khan BSSE Ahmed Sharafat BSSE

Databases 2 (VU) ( / )

StreamSets Control Hub Installation Guide

Big Data Infrastructure at Spotify

A BIG DATA STREAMING RECIPE WHAT TO CONSIDER WHEN BUILDING A REAL TIME BIG DATA APPLICATION

FIVE REASONS YOU SHOULD RUN CONTAINERS ON BARE METAL, NOT VMS

Enable Spark SQL on NoSQL Hbase tables with HSpark IBM Code Tech Talk. February 13, 2018

Case study on PhoneGap / Apache Cordova

Cloud I - Introduction

The Hadoop Ecosystem. EECS 4415 Big Data Systems. Tilemachos Pechlivanoglou

The age of Big Data Big Data for Oracle Database Professionals

Data Science and Open Source Software. Iraklis Varlamis Assistant Professor Harokopio University of Athens

Oracle GoldenGate for Big Data

How to Create a Killer Resources Page (That's Crazy Profitable)

Microsoft Azure Databricks for data engineering. Building production data pipelines with Apache Spark in the cloud

BIG DATA. Using the Lambda Architecture on a Big Data Platform to Improve Mobile Campaign Management. Author: Sandesh Deshmane

Big Data. Big Data Analyst. Big Data Engineer. Big Data Architect

A Review Paper on Big data & Hadoop

Introduction to the Active Everywhere Database

Deploying Applications on DC/OS

Esper EQC. Horizontal Scale-Out for Complex Event Processing

How to Leverage Containers to Bolster Security and Performance While Moving to Google Cloud

Simple custom Linux distributions with LinuxKit. Justin Cormack

Before proceeding with this tutorial, you must have a good understanding of Core Java and any of the Linux flavors.

ANX-PR/CL/ LEARNING GUIDE

Topics. Big Data Analytics What is and Why Hadoop? Comparison to other technologies Hadoop architecture Hadoop ecosystem Hadoop usage examples

Microservices at Netflix Scale. First Principles, Tradeoffs, Lessons Learned Ruslan

9 Reasons To Use a Binary Repository for Front-End Development with Bower

Micro Focus Desktop Containers

Cloud Computing 2. CSCI 4850/5850 High-Performance Computing Spring 2018

Cassandra, MongoDB, and HBase. Cassandra, MongoDB, and HBase. I have chosen these three due to their recent

Cloud & container monitoring , Lars Michelsen Check_MK Conference #4

MQ High Availability and Disaster Recovery Implementation scenarios

Data Movement & Tiering with DMF 7

Disclaimer This presentation may contain product features that are currently under development. This overview of new technology represents no commitme

Transcription:

Graduated in Computer Engineering Universidad Politécnica de Madrid Escuela Técnica Superior de Ingenieros Informáticos BACHELOR S DEGREE PROJECT Development of an autoscaling Big Data system with Docker and Kubernetes Author: Luis Ballestín Carrasco Directors: Luis M. Gómez Henríquez Rubén Casado Tejedor MADRID, JULY 2017

A los profesores que han cambiado mi forma de pensar. En especial a Fernando y a Santos. A mis amigos de siempre y en especial a Carlos, porque hemos llegado hasta aquí juntos. A mis compañeros de paellas y molletes. A Cris, por apoyarme todo este tiempo. A mi familia, por hacer todo esto posible. A mi abuela. iii

Index Index... iv Figure Index... vi Resumen... 1 Abstract... 2 1. INTRODUCTION... 3 1.1. Aims and goals... 3 1.2. Chapters summary... 4 2. STATE OF THE ART... 5 2.1. Big Data... 5 2.2. Big Data architecture... 5 2.2.1. Lambda Architecture... 6 2.2.2. Kappa Architecture... 6 2.3. Software containers... 7 3. TECHNOLOGIES INVOLVED... 9 3.1. Docker... 9 3.2. Docker Compose... 10 3.3. Kubernetes... 11 3.4. Apache Kafka... 12 3.5. Apache Zookeeper... 12 3.6. Apache Flink... 13 3.7. Couchbase... 14 4. ARCHITECTURE DEVELOPMENT... 16 4.1. Designing the Docker images... 17 iv

4.1.1. Baseimg... 17 4.1.2. Kafka... 17 4.1.3. Zookeeper... 18 4.1.4. Flink... 18 4.1.5. Couchbase... 18 4.2. Integration tests with Docker Compose... 19 4.3. Kubernetes implementation... 20 4.3.1. Horizontal Pod autoscaling... 22 5. CONCLUSIONS AND RESULTS... 23 6. BIBLIOGRAPHY AND REFERENCES... 24 v

Figure Index Figure 1: Lambda architecture [4]... 6 Figure 2: Kappa Architecture [5]... 7 Figure 3: Containers vs VMs [6]... 8 Figure 4: Docker logo... 9 Figure 5: Docker Compose logo... 10 Figure 6: Kubernetes logo... 11 Figure 7: Kafka logo... 12 Figure 8: Zookeeper logo... 12 Figure 9: Flink logo... 13 Figure 10: Couchbase logo... 14 Figure 11: Couchbase cluster example... 14 Figure 12: Architecture overview... 16 Figure 13: Example of a Compose service definition... 19 Figure 14: Pod example [23]... 20 Figure 15: Kubernetes service definition example... 21 vi

Resumen El objetivo principal de este Proyecto consistía en el desarrollo de una arquitectura Big Data autoescalable utilizando para ésto Docker y Kubernetes. Para obtener dicho resultado, el Proyecto se ha dividido en 3 etapas principales: En la primera etapa había que primero, definir qué herramientas y aplicaciones utilizaríamos para componer la arquitectura y, segundo, conseguir empaquetar dichas aplicaciones en contenedores software con Docker. La segunda etapa del Proyecto, consistió en la elaboración de los tests de integración del Sistema necesarios para poder asegurar el correcto funcionamiento de los componentes del mismo antes de proceder con la tercera etapa. Finalmente, se implementó el Sistema utilizando Kubernetes para conseguir que éste fuera capàz de reconocer, automáticamente, las cargas de proceso a las que está sometido en cada momento y poder así ajustar sus características en función de las necesidades de cada momento. 1

Abstract The main objective of this project consisted on the development of an autoscaling Big Data architecture with Docker and Kubernetes. To obtain this, the project was divided into 3 different stages: During the first stage, It was necessary to first, study the different options to conclude which were the best possible tools and applications to use in the architecture, and second, to package the chosen applications as software containers using Docker. At the second stage, we created the system integration tests necessary to ensure the correct functioning of the system and each of its parts before we could proceed with the third stage. Finally, the system was implemented using Kubernetes with the purpose of enabling the system to recognize by itself the amount of resources each of its parts is consuming and to auto scale consequently to adjust to every moment needs. 2

1. INTRODUCTION 1.1. Aims and goals Over the last few years, individuals and organizations have become more and more dependent on the data they generate. More than 2.5 exabytes of data are produced and distributed online every day. We can see that nowadays this is affecting not only big enterprises like Amazon or Google, but also medium level companies or governments are leading with enormously large and complex datasets. This is what we call Big Data. For an organization or company, to be prepared for analyzing Big Data may be something completely unaffordable, not so much because of the money but the time and human resources it needs. First they need the infrastructure to store this massive quantity of data. Second they need the technical capabilities to create a distributed software architecture able to process this data. And finally, if they manage to get their big data architecture working, maybe in a cloud environment, they need to keep watching over it making sure the system does not fail. The main goal of this project is to avoid this steps creating a big data architecture that can be deployed in minutes and watches over itself auto scaling the number of servers for data processing in order to fit perfectly the demand. Wrapping up all the applications in software containers using Docker and orchestrating the full system with Kubernetes we can make an easy and fast to deploy Big Data architecture. 3

1.2. Chapters summary On the following chapters of this Project we will first try to explain some necessary concepts to understand the project. Then, we will take a look at the main technologies involved on the architecture, discussing why are they important to the project. The 4 th chapter will expose how the project was developed in three different stages. Finally we will show the results and conclusions of the project and also how it could be improved in the future.. 4

2. STATE OF THE ART In this chapter I will try to introduce some basic concepts for a complete understanding of this project. 2.1. Big Data Big Data is usually defined as a collection of data sets enormously large and complex, which can be structured, semi-structured and/or unstructured, and therefore cannot be processed using traditional databases. The main characteristics of Big Data are known as the 3Vs: volume, velocity and variety. [1] Volume: the volume of data to process goes beyond terabytes of data. Velocity: the velocity concerns at the same time to the speed the data is generated and the need to process this data quickly (in real time). Variety: the variety refers to the different sources of information and the different ways the data is stored and obtained. For example data collected from twitter and from open data webs. Big Data is taking a really important role for more and more companies since the beginning of this decade (although some of the biggest companies, like Google, have been dealing with it since far long ago). In the following years we are going to see how it appears in various domains, such as healthcare or research, but also for social purposes. 2.2. Big Data architecture A Big Data architecture is essentially a set of processing tools and data pipelines which convert raw data into business insight. Of course, it goes beyond and it involves since the proper physical machines to the highest level layer of software in the cluster. [2] 5

As the years went by some standard architecture designs appeared: 2.2.1. Lambda Architecture The first one was conceived as Lambda Architecture by Nathan Marz by the end of 2011. The Lambda Architecture is a design standard for a hybrid Big Data architecture. It consists of three layers, each one fulfilling a different and necessary purpose: [3] Batch layer: this layer is the one in charge of storing all the volume of data and processing the whole set cyclically. Serving layer: The serving layer takes the processed data from the batch layer and indexes it. This job is usually done by a non-sql database. Speed layer: Because the job of the batch layer takes (by definition) a lot of time, we need an extra layer to perform a real time processing for the new income data that is being generated on the fly while the batch layer is processing the old data. Figure 1: Lambda architecture [4] 2.2.2. Kappa Architecture Although the Lambda Architecture was the best approach between 2011 and 2013, its design was based on a statement that couldn t last long: that stream processing tools could not handle too much throughput. As the time went by, 6

technologies advanced allowing to increase the weight that could be handled by the last layer (the speed layer) in the system. [3] In 2014, Jay Kreps described a new solution to deal with the same problem the Lambda Architecture dealed with, but simplified; it received the name of Kappa Architecture. This new design can be seen as a simplification of the Lambda Architecture, where the batch layer has been eliminated. Now the data is stored directly in the HDFS and sent via Kafka (or a similar tool) to the different processing queues. A single streaming processing application is needed to carry all the throughput via different functions (one for the old data and another for the real-time income, for instance). Figure 2: Kappa Architecture [5] 2.3. Software containers Software containers are a method of system virtualization that allows you to run a full application inside a completely isolated package. This package will contain everything this application needs (such as libraries, settings, system tools ). Containers make your applications easy to deploy quickly and consistently without considering the deployment environment. [4] 7

Figure 3: Containers vs VMs [6] Because a container encapsulates everything the application needs to run, they can be deployed independently of the environment, regardless of the operating system or hardware configurations. As one of the main goals of this project is to develop an architecture which can be deployed in different systems quickly and efficiently the use of software containers was mandatory. Each container will run us an independent process on the operative system. This allows the user to run multiple instances of the same software container creating a cluster alike environment. Because of the fast boot and terminating times, containers are also a perfect way to enable the scale of applications up and down. Remember that each container will run completely isolated from the others as if it was placed in a different node of the system. 8

3. TECHNOLOGIES INVOLVED In this chapter we will describe the main technologies involved in the development of this project. Including what they serve for and why were they chosen above other similar tools. 3.1. Docker Docker is an open source platform for software container deployment. Although it was released open source in 2013, In only one year it had exceeded every other container platform. Nowadays it s supported by some of the largest software organizations including Google, Microsoft and Red Hat. [7] Figure 4: Docker logo Docker is one of the most important pillars of this project as it is the tool we are using to create and deploy our software containers. The first thing we need to do is to learn how the Docker language works and how to take advantage of all it s capabilities. In this project, we are going to create and use five different Docker images: Baseimg Kafka Zookeeper Flink Couchbase 9

3.2. Docker Compose Since the Docker platform has been growing so much during the last four years, a whole ecosystem has been built around it. One of the tools generated as a result of this expansion is Docker Compose. [8] Figure 5: Docker Compose logo Compose is a tool for defining and running multi-container Docker applications. Once each of the Docker images has been correctly defined in its own Dockerfile, Docker Compose allows us to configure all our services together in a single file named docker-compose.yml and then start them all at the same time with a single command: docker-compose up. In this project, Compose is going to serve as a way to test that each of our Docker images is working correctly and at the same time that they can work correctly as a whole. 10

3.3. Kubernetes Kubernetes is an open source project for automating deployment and management of containerized applications. It was designed by Google and later open sourced. Although its version 1.0 was released on 2015, we have to take into account that it had been developed for more than a decade by google engineers before it was released open source. This is why it has grown so much in popularity in so little time. [9] Figure 6: Kubernetes logo Kubernetes is going to serve us as an orchestrator. When it s well configured, it can keep track of how much throughput is handling each container so, if needed, it can scale up or down the number of containers attending a single service. Let s say that our Big Data architecture is functioning nonstop. Kubernetes may find, for example, that we do not need 6 Flink taskmanagers functioning at 4 a.m. when our data income is way lower than during the day. In that case Kubernetes would automatically decrease the number of containers and adjust to the real need we have, saving resources and, therefore, money. Of course it would also be useful in the other way round. If we experience an unpredicted high demand at some point, it will scale automatically the number of containers to fulfill our need. 11

3.4. Apache Kafka Apache kafka is an open source project for handling real-time data feeds. It was originally developed by LinkedIn and then donated to the apache project in 2011. It basically provides a publisher/subscriber architecture for streaming data delivery and it connects to external systems enabling the user to process this data with almost every tool available. [10] Some of the biggest companies that rely on data streaming support Apache Kafka, like Spotify or Netflix. Figure 7: Kafka logo 3.5. Apache Zookeeper Apache Zookeeper is an open source project from the Apache Software Foundation. It is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services. Zookeeper was created to provide highly reliable coordination in distributed applications of any kind. [11] Figure 8: Zookeeper logo 12

3.6. Apache Flink Apache Flink is an open source framework for distributed stream processing from the Apache Software Foundation. Flink provides a high-throughput, low-latency streaming engine written in Java and Scala. It also provides connectors to many other tools such us Kafka. [12] Figure 9: Flink logo Unlike its greater competitor Spark, which is developed for Batch processing and has adapted to stream using what they call microbatch, Flink was developed from the core for stream processing. This makes the difference when your system requires your data to be processed as soon as it arrives. In our architecture, Apache Flink has a great demanding role as the unique processing engine we are counting on. Therefore, our flink containers need to be capable of processing every single piece of data that we receive as income. 13

3.7. Couchbase Couchbase Server is a distributed, open source NoSQL document-oriented database. It was developed to offer great performance when dealing with large quantities of data and it provides a query engine for SQL-alike queries. [13] Figure 10: Couchbase logo For the development of this project, the reason I have decided to select couchbase among other solutions such as MongoDB is because how well prepared it is for scaling, which is the most important thing I was looking for in this project. Figure 11: Couchbase cluster example 14

One of the main characteristics of Couchbase Server is how it works with a single type of node. This is what makes this application so convenient for this kind of project. 15

4. ARCHITECTURE DEVELOPMENT The main purpose of this project was to develop, as a proof of concept, a Kappa Architecture with the tools described in the previous chapter. We used Kafka to create the data queues and carry them to Flink, our streaming processing service. Finally the processed data is stored in couchbase. Figure 12: Architecture overview The project has been developed in 3 stages: designing the Docker images, testing them together with Docker compose and finally implementing the Kubernetes pods. 16

4.1. Designing the Docker images A Docker image is defined by a text file called Dockerfile. This definition must include every step needed to obtain a reliable, self-contained and well packaged application. [14] Notice that in other case it would have been easier and more practical to use predefined images for the applications we want to use. In fact, some of the applications have even an official docker image built by the team in charge of it but, since this project was developed mostly with learning purposes, we found quite more interesting to create our own images. The docker images described below can be found online in my own repository at Docker Hub. [15] 4.1.1. Baseimg The first step to follow was to create a solid base image that could be used as a floor, above which every other application image was going to be built: To define this baseimg and keep the weight of all the images low, we used a shrunken version of a Debian image and installed Java 1.8 above it. This Debian image is bitnami/minideb. [16] Every Docker image following is based on this image. 4.1.2. Kafka To create a Kafka image, we first needed to install Apache Kafka above the baseimg and then add three scripts for making it easier and faster to operate with. [17] 17

4.1.3. Zookeeper As we did with the Kafka image, to define a correct image for Zookeeper it was necessary to download and install the application, set some config values, expose the ports we need and finally add one script to start the server easier. [18] 4.1.4. Flink Making the Flink image was less complicated than expected at first. Contrary to what I was trying to do, only one Docker image is needed to serve as both Jobmanager and Taskmanager, so you need to specify while deploying the service whether you are deploying it as any of both. In the image definition, we download and install Flink and expose its ports. [19] 4.1.5. Couchbase To make the Dockerfile of Couchbase took more time because it needs some little configurations to be taken care of to work correctly. Like with the other images, we downloaded and installed Couchbase Server, made some configuration arrangements and expose the needed ports. [20] [21] 18

4.2. Integration tests with Docker Compose A top priority for me while I was planning how to approach the development of this project was to find a way of testing my Docker Images before I started developing the Kubernetes pods. I knew that I could save a lot of time preventing to start over and over again with the translation process from the docker images to the deployment in Kubernetes. I found Docker Compose shortly after and I couldn t believe how well it fit with what I was searching for. After creating all the docker images and after trying a few times with some tutorials I could easily build my own docker-compose.yml files and start testing how the images worked out together. Figure 13: Example of a Compose service definition 19

To prove if the architecture was really working, testing Flink-jobs were developed to make sure every single piece of the system was doing its part. For this jobs, I took as input data JSON files with outdated information about number of clicks on usa.gov webpages. [22] To simulate the input was a stream of real-time generated data I added a short delay in the Kafka sending loop. This way I could finally confirm that the system was working correctly in stage 2. 4.3. Kubernetes implementation Once the docker images were completely tested with Docker Compose in the second stage of the project, it was time to begin with the deployment of the images in the Kubernetes environment. At this point a really important matter was to know how to translate from Docker language into Kubernetes language. One of the main difficulties in this process of translation is the difference between a Docker Image and a Kubernetes Pod. While they are both treated as the basic unit in each ecosystem, the truth is a pod can be formed by one or more Docker Images. Figure 14: Pod example [23] 20

After thinking about this differences, I decided to translate each Service to a Pod (having more than one Container per pod), and so each service needed to be described again with a new *.yaml file [24] Figure 15: Kubernetes service definition example 21

4.3.1. Horizontal Pod autoscaling The main difficulty of this project was not to develop a Big Data architecture, but to develop an autoscaling one. And that is exactly what the horizontal pod autoscaling function of kubernetes is in charge of doing. This function has to be set with the kubernetes command line interface (kubectl) and is implemented as a loop. In each loop, the controller seeks for the resources that are being used by the service and compares it with the max/min resources utilization which was set in the controller definition. If the numbers are off limits, it will automatically scale up or down to keep between this fixed numbers. [25] 22

5. CONCLUSIONS AND RESULTS In this chapter I will compare the results obtained with the goals expected and I will express my final conclusions concerning this project. The result obtained in this project was a fully functional and autoscaling Big Data Kappa architecture. Since this was the main goal of this project, I can proudly say that I did in fact fulfill the goals I could expect to cover taking into account the duration of the project and my limited resources. That said, I would have liked to test the project in more realistic conditions, since my laptop obviously can t be considered a production alike environment. This is why I consider that this project could receive lots of improvements with some further future work. With all this in mind, I have to say that I have enjoyed a lot the challenges this project has supposed to me. Almost every step further in the development of the project supposed learning something completely new to me and that was exactly what I was looking for when I started studying Computer Science. 23

6. BIBLIOGRAPHY AND REFERENCES [1] Rubén Casado (University of Oviedo) and Muhammad Younas (Oxford Brookes University). (2014). Emerging trends and technologies in big data processing. [Online] Available: https://www.researchgate.net [2] Lars George. (2014). Getting Started with Big Data Architecture. [Online] Available: http://blog.cloudera.com/ [3] Rubén Casado (Kschool). Arquitecturas híbridas para el análisis de Big Data en tiempo real: Lambda y Kappa. [Online] Available: http://studylib.es [4] Christian Prokopp. (2014). Lambda architecture explained. [Online] Available: http://www.semantikoz.com/ [5] Taras Matyashovskyy. (2016). Lambda Architecture with Apache Spark. [Online] Available: https://dzone.com [6] Amazon AWS. (2017). What are Containers? [Online]. Available: https://aws.amazon.com/containers/ [7] Docker Team. (2017). What is Docker [Online]. Available: https://www.docker.com/what-docker [8] Docker Team. (2017). Overview of Docker Compose [Online]. Available: https://docs.docker.com/compose/overview/ [9] Kubernetes Team. (2017). Kubernetes overview [Online]. Available: https://kubernetes.io/ [10] Kafka Team. (2016). Introduction to Kafka [Online]. Available: https://kafka.apache.org/intro [11] Zookeeper Team. (2016). What is Zookeeper? [Online]. Available: https://zookeeper.apache.org/ [12] Flink Team. (2016). Introduction to Apache Flink [Online]. Available: https://flink.apache.org [13] Couchbase Team. (2017). Why Couchbase? [Online] Available: https://developer.couchbase.com [14] Docker Team. (2017). Define a container with a Dockerfile [Online] Available: https://docs.docker.com 24

[15] Luis Ballestín. (2017). Docker Hub repository. [Online] Available: https://hub.docker.com/u/lballestin/ [16] Bitnami Team (2017). Bitnami/minideb repository. [Online] Available: https://github.com/bitnami/minideb [17] Kafka Team. (2016). Quickstart [Online]. Available: https://kafka.apache.org/quickstart [18] Zookeeper Team. (2016). Zookeeper getting started guide [Online]. Available: https://zookeeper.apache.org/ [19] Flink Team. (2016). Quickstart [Online]. Available: https://ci.apache.org/projects/flink [20] Couchbase Team. (2017). Ubuntu/Debian Installation. [Online] Available: https://developer.couchbase.com/ [21] Couchbase Team. (2017). Couchbase/server repository on Docker Hub. [Online] Available: https://hub.docker.com/r/couchbase/server/ [22] Measured Voice. 1.USA.gov Data Archives. [Online] Available: http://1usagov.measuredvoice.com/ [23] Kubernetes Team. (2017). What is a pod? [Online] Available: https://kubernetes.io [24] Kubernetes Team. (2017). Kubernetes overview [Online] Available: https://kubernetes.io/ [25] Kubernetes Team. (2017). Horizontal Pod Autoscaling [Online] Available: https://kubernetes.io/ 25

Este documento esta firmado por Firmante CN=tfgm.fi.upm.es, OU=CCFI, O=Facultad de Informatica - UPM, C=ES Fecha/Hora Fri Jul 07 23:03:41 CEST 2017 Emisor del Certificado EMAILADDRESS=camanager@fi.upm.es, CN=CA Facultad de Informatica, O=Facultad de Informatica - UPM, C=ES Numero de Serie 630 Metodo urn:adobe.com:adobe.ppklite:adbe.pkcs7.sha1 (Adobe Signature)