lunes, 31 de diciembre de 2018

Feliz 2019

Minilibros gratuitos.

Quiero compartir estos 2 libros gratuitos de Java Code Geeks :

Download Minibooks!

Spring Data’s mission is to provide a familiar and consistent, Spring-based programming model for data access while still retaining the special traits of the underlying data store. It makes it easy to use data access technologies, relational and non-relational databases, map-reduce frameworks, and cloud-based data services. This is an umbrella project which contains many subprojects that are specific to a given database. The projects are developed by working together with many of the companies and developers that are behind these exciting technologies. In this ebook, we provide a compilation of Spring Data examples that will help you kick-start your own projects. We cover a wide range of topics, from setting up the environment and creating a basic project, to handling the various modules (e.g. JPA, MongoDB, Redis etc.). With our straightforward tutorials, you will be able to get your own projects up and running in minimum time.
Selenium is a portable software testing framework for web applications. Selenium provides a record/playback tool for authoring tests without learning a test scripting language (Selenium IDE). It also provides a test domain-specific language (Selenese) to write tests in a number of popular programming languages, including Java, C#, Groovy, Perl, PHP, Python and Ruby. The tests can then be run against most modern web browsers. Selenium deploys on Windows, Linux, and Macintosh platforms. It is open-source software, released under the Apache 2.0 license, and can be downloaded and used without charge. In this ebook, we provide a compilation of Selenium programming examples that will help you kick-start your own projects. We cover a wide range of topics, from Installation and JUnit integration, to Interview Questions and Standalone Server functionality. 

jueves, 27 de diciembre de 2018

The Hundred-Page Machine Learning Book

Podemos bajarnos el libro "The Hundred-Page Machine Learning Book" la versión draf hasta que sea publicado.

Sin más dejo el link:

lunes, 24 de diciembre de 2018

Feliz Navidad!!

Desde el blog queremos desearle una muy Feliz Navidad!!!


trap "tput reset; tput cnorm; exit" 2
tput civis
col=$(($(tput cols) / 2))
tput setaf 2; tput bold

# Tree
for ((i=1; i<20; i+=2))
    tput cup $lin $col
    for ((j=1; j<=i; j++))
        echo -n \*
    let lin++
    let col--

tput sgr0; tput setaf 3

# Trunk
for ((i=1; i<=2; i++))
    tput cup $((lin++)) $c
    echo 'mWm'
new_year=$(date +'%Y')
let new_year++
tput setaf 1; tput bold
tput cup $lin $((c - 6)); echo FELICES FIESTAS
tput cup $((lin + 1)) $((c - 9)); echo Y mucho CODIGO en $new_year
let c++

# Lights and decorations
while true; do
    for ((i=1; i<=35; i++)) {
        # Turn off the lights
        [ $k -gt 1 ] && {
            tput setaf 2; tput bold
            tput cup ${line[$[k-1]$i]} {column[$[k-1]$i]}; echo \*
            unset line[$[k-1]$i]; unset column[$[k-1]$i]  # Array cleanup

        li=$((RANDOM % 9 + 3))
        co=$((RANDOM % (li-2) * 2 + 1 + start))
        tput setaf $color; tput bold   # Switch colors
        tput cup $li $co
        echo o
        # Flashing text
        for l in C O D I G O
            tput cup $((lin+1)) $((c-3+sh))
            echo $l
            let sh++
            sleep 0.01
    k=$((k % 2 + 1))

Y ahora ejecutamos:


domingo, 23 de diciembre de 2018

Operaciones comunes con collections en Kotlin

Vamos a revisar el conjunto de funciones que tiene kotlin para manejo de colecciones:

Vamos a empezar con 'filter'. Éste filtra el contenido de la lista y mantiene solo los elementos que satisfacen el predicado. Por ejemplo, aquí tenemos el predicado que comprueba que un número es par, y solo los números pares están presentes en la lista resultante.

val originalList = listOf(1, 2, 3, 4, 5, 6)
assertEquals(listOf(2, 4, 6), originalList.filter { it % 2 == 0 })

La función map() transforma una colección en una nueva, y transforma cada elemento en esta colección. Por ejemplo, aquí encontramos un cuadrado de cada número dado y la colección resultante es una colección de cuadrados. Tenga en cuenta que la colección resultante contiene tantos elementos como el primero.

 val nums = listOf(1, 2, 3, 4, 5, 6)
 val nums2 = { e -> e * 2 }

Hay varios predicados que verifican si los hechos dados son verdaderos para los elementos. Por ejemplo, 'any' comprueba que hay al menos un elemento que satisface el predicado dado. all verifica si todos los elementos satisfacen el predicado, y none comprueba que ninguno de los elementos satisface el predicado dado.

 val nums = listOf(4, 5, 3, 2, -1, 7, 6, 8, 9)
 val r = nums.any { e -> e > 10 }
 if (r) println("There is a value greater than ten")
    else println("There is no value greater than ten")

r = nums.all { e -> e > 0 }
if (r) println("nums list contains only positive values")
    else println("nums list does not contain only positive values")

r = nums.none { e -> e > 0 }
if (!r) println("nums list contains only positive values")
    else println("nums list does not contain only positive values")

find() encuentra un elemento que satisface el predicado dado y lo devuelve como resultado. Si no hay ningún elemento (obligatorio) que devuelve null.

firstOrNull() busca el primer elemento te devuelve un elemento o 'null' como resultado. Mientras que first() solo toma un predicado y lanza una excepción si no hay tal elemento

val originalList = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val result = originalList.firstOrNull { it > 4 }
assertEquals(result, 5)

count() cuenta el número de elementos que satisfacen el predicado dado. max retorna el máximo, min el mínimo:

val nums = listOf(11, 5, 3, 8, 1, 9, 6, 2)
val len = nums.count()
val max = nums.max()
val min = nums.min()
val msg = """
               max: $max, min: $min,
               count: $len

partition divide la colección en dos (colecciones) los que cumplen o no un predicado.

val nums = listOf(4, -5, 3, 2, -1, 7, -6, 8, 9)

val (nums2, nums3) = nums.partition { e -> e < 0 }

Si desea dividir la colección en varios grupos por clave dada, puede usar groupBy utilizando como argumento la forma de agrupar los elementos, cuál debería ser la clave. Por ejemplo

val nums = listOf(1, 2, 3, 4, 5, 6, 7, 8)
val res = nums.groupBy { if (it % 2 == 0) "even" else "odd" }

AssociateBy también realiza la agrupación, pero devuelve un elemento como el valor del mapa. AssociateBy debe usarse solo si la clave es única. Si no es así, se eliminan los duplicados. De esta forma nos quedamos con el ultimo.

val nums = listOf(1, 2, 3, 4, 5, 6, 7, 8)
nums.associate { (if (it % 2 == 0) "greatest_even" else "greatest_odd") to it }

Otra forma de organizar de alguna manera un par de colecciones es zip. El cual las une :

val names = listOf("Jon", "John", "Jane")
val ages = listOf(23, 32, 28)
// [(Jon, 23), (John, 32), (Jane, 28)]

Otra función útil es flatMap. Esta consta de dos operaciones, la primera es map y la segunda es flatten. map en este caso debería convertir cada elemento a una lista de elementos. y el flatten aplana las listas resultantes :

val customerMap = mapOf(Pair(Customer("Jack", 25), Address("NANTERRE CT", "77471")),
Pair(Customer("Mary", 37), Address("W NORMA ST", "77009")),
Pair(Customer("Peter", 18), Address("S NUGENT AVE", "77571")),
Pair(Customer("Amos", 23), Address("E NAVAHO TRL", "77449")),
Pair(Customer("Craig", 45), Address("AVE N", "77587")))

val customerList = customerMap.flatMap { (customer, _) -> listOf(customer) }
customerList.forEach{ println(it) }
Customer(name=Jack, age=25)
Customer(name=Mary, age=37)
Customer(name=Peter, age=18)
Customer(name=Amos, age=23)
Customer(name=Craig, age=45)

Y a veces tenemos una lista de solo elementos como resultado. Entonces, lo que hace la función flatten, toma una lista de listas de elementos y la aplana retorna una lista plana

val list = listOf(
listOf(1, 2, 3),
listOf("one", "two", "three"),
listOf(Customer("Jack", 25), Customer("Peter", 31), Customer("Mary", 18))

var flattenList = list.flatten()

[1, 2, 3, one, two, three, Customer(name=Jack, age=25), Customer(name=Peter, age=31), Customer(name=Mary, age=18)]

Dejo link:

jueves, 20 de diciembre de 2018

70 libros gratuitos de javascript.

Ya que estoy recomendado libros quiero recomendarle este sitio donde pueden bajar varios libros sobre tecnologías que se utilizan en el front-end.

Dejo link:

Libro gratuito de CouchDb, HTML 5, JAXB y JavaFx

Quiero recomendar estos Libros gratuitos:

Download Dev Guides!

CouchDB, is an open source database that focuses on ease of use and on being “a database that completely embraces the web”. It is a NoSQL database that uses JSON to store data, JavaScript as its query language using MapReduce, and HTTP for an API. One of its distinguishing features is multi-master replication. This is a hands-on course on CouchDB. You will learn how to install and configure CouchDB and how to perform common operations with it. Additionally, you will build an example application from scratch and then finish the course with more advanced topics like scaling, replication and load balancing.

HTML5 is a core technology markup language of the Internet used for structuring and presenting content for the World Wide Web. As of October 2014 this is the final and complete fifth revision of the HTML standard of the World Wide Web Consortium (W3C). The previous version, HTML 4, was standardised in 1997. Its core aims have been to improve the language with support for the latest multimedia while keeping it easily readable by humans and consistently understood by computers and devices (web browsers, parsers, etc.). HTML5 is intended to subsume not only HTML 4, but also XHTML 1 and DOM Level 2 HTML. 

Java offers several options for handling XML structures and files. One of the most common and used ones is JAXB. JAXB stands for Java Architecture for XML Binding. It offers the possibility to convert Java objects into XML structures and the other way around. JAXB comes with the JRE standard bundle since the first versions of the JRE 1.6. The first specification of JAXB was done in March 2003 and the work process is tracked in the Java Specification Request 31. In this specification request you can find a lot of information regarding the long life of JAXB and all the improvements that have been made. As already mentioned, JAXB is included in the JRE bundle since the update 1.6. Before that it was necessary to include their libraries in the specific Java project in order to be able to use it. Before JAXB was available (long time ago), the way Java had to handle XML documents was the DOM. This was not a very good approach because there was almost not abstraction from XML nodes into Java objects and all value types were inferred as Strings. JAXB provides several benefits like Object oriented approach related to XML nodes and attributes, typed values, annotations and may others. 

JavaFX is a software platform for creating and delivering desktop applications, as well as rich internet applications (RIAs) that can run across a wide variety of devices. JavaFX is intended to replace Swing as the standard GUI library for Java SE, but both will be included for the foreseeable future. JavaFX has support for desktop computers and web browsers on Microsoft Windows, Linux, and Mac OS X. JavaFX 2.0 and later is implemented as a native Java library, and applications using JavaFX are written in native Java code. JavaFX Script has been scrapped by Oracle, but development is being continued in the Visage project. JavaFX 2.x does not support the Solaris operating system or mobile phones; however, Oracle plans to integrate JavaFX to Java SE Embedded 8, and Java FX for ARM processors is in developer preview phase. In this ebook, we provide a compilation of JavaFX programming examples that will help you kick-start your own web projects. We cover a wide range of topics, from Concurrency and Media, to Animation and FXML.With our straightforward tutorials, you will be able to get your own projects up and running in minimum time.

miércoles, 19 de diciembre de 2018

Herramientas Open Source front-end para Apache HBase.

 Las herramientas open source que se pueden utilizar como clientes de Apache HBase son :

Hbaseexplorer: Es una herramienta gráfica para el acceso a datos almacenados en HBase que permite:
  • Visualización de datos.
  • Creación, eliminación y modificación de tablas y filas.
  • Tablas estaticas
  • Scans

Toad for Cloud Databases: Es una herramienta muy versátil para diferentes productos entre los que se encuentra hbase.

HareDB HBase Client: Es un cliente de Hbase que tiene una interfaz amigable.

Hrider: Es una aplicación super amigable que permite consultar y manipular datos de hbase.

Hannibal: Es una herramienta para monitoreo de regiones.

Performance Monitoring & Alerting (SPM): SPM es una herramienta de monitoreo, muy completa, tiene la filosofia de detección temprana de los problemas. A la vez permite monitorear una amplia gama de productos en los que podemos nombrar : Solr, Elasticsearch, Hadoop, HBase, ZooKeeper, Kafka, Storm, Redis, JVM, etc.

Apache Phoenix: Es un cliente embebido que permite consultas como si fuera un driver JDBC. Apache Phoenix permite OLTP y el análisis operativo en Hadoop para aplicaciones de baja latencia combinando lo mejor de ambos mundos: el poder de las API de SQL y JDBC estándar con capacidades de transacción ACID completa y
la flexibilidad de las capacidades de lectura y escritura de los últimos tiempos del mundo NoSQL aprovechando HBase como su tienda de respaldo; Apache Phoenix está totalmente integrado con otros productos de Hadoop como Spark, Hive, Pig, Flume y Map Reduce.

Apache Impala: Antes una herramienta de Cloudera, pero la han liberado en el marco de la organización apache. Impala es una herramienta de procesamiento de consultas en paralelo, utiliza map-reduce y se pueden hacer consultas a hbase o a archivos hdfs (como hive)

Apache Zeppelin: Notebook basado en la web que permite a los datos,
Análisis de datos interactivos y documentos de colaboración con SQL, Scala y más.

viernes, 14 de diciembre de 2018

Introducing the AI Transformation Playbook

Me llego este mail de Andrew Ng que es el profesor de un curso en coursera sobre machine learning y quiero compartirlo con ustedes ya que me resulto por demás interesante :

Introducing the AI Transformation Playbook

Dear friends,

I'm excited to share with you the new AI Transformation Playbook. Drawn from my experience leading Google Brain, Baidu's AI Group, and Landing AI, this 5-step Playbook provides a roadmap for your company to transform into a great AI company.

You might already realize from Machine Learning Yearning that AI teams need to develop new workflows to build successful AI projects. The Playbook will teach you how to build upon single AI projects to help a whole company use AI. I hope that this Playbook will help you usher your company into the AI era.

Andrew Ng
Download a free copy of the AI Transformation Playbook

jueves, 13 de diciembre de 2018

Libro gratuitos sobre Linux, postgresql, jetty, jdbc

Download Dev Guides!

Bash is a Unix shell and command language written by Brian Fox for the GNU Project as a free software replacement for the Bourne shell. First released in 1989, it has been distributed widely as it is a default shell on the major Linux distributions and OS X. Bash is a command processor that typically runs in a text window, where the user types commands that cause actions. Bash can also read commands from a file, called a script. Like all Unix shells, it supports filename globbing (wildcard matching), piping, here documents, command substitution, variables and control structures for condition-testing and iteration. The keywords, syntax and other basic features of the language were all copied from sh. Other features, e.g., history, were copied from csh and ksh. Bash is a POSIX shell, but with a number of extensions. In this ebook, we provide a compilation of BASH programming examples that will help you kick-start your own projects. We cover a wide range of topics, from user management and permissions setting, to specific commands like sed, tar, etc. 
PostgreSQL, often simply Postgres, is an object-relational database management system (ORDBMS) with an emphasis on extensibility and standards-compliance. As a database server, its primary function is to store data securely, and to allow for retrieval at the request of other software applications. It can handle workloads ranging from small single-machine applications to large Internet-facing applications with many concurrent users. PostgreSQL is developed by the PostgreSQL Global Development Group, a diverse group of many companies and individual contributors. It is free and open-source software, released under the terms of the PostgreSQL License, a permissive free-software license. In this ebook, we provide a compilation of PostgreSQL tutorials that will help you set up and run your own database management system. We cover a wide range of topics, from installation and configuration, to custom commands and datatypes. With our straightforward tutorials, you will be able to get your own projects up and running in minimum time.
Jetty is a Java HTTP (Web) server and Java Servlet container. While Web Servers are usually associated with serving documents to people, Jetty is now often used for machine to machine communications, usually within larger software frameworks. Jetty is developed as a free and open source project as part of the Eclipse Foundation. The web server is used in products such as Apache ActiveMQ, Alfresco, Apache Geronimo, Apache Maven, Apache Spark, Google App Engine, Eclipse, FUSE, iDempiere, Twitter’s Streaming API and Zimbra. Jetty is also the server in open source projects such as Lift, Eucalyptus, Red5, Hadoop and I2P. Jetty supports the latest Java Servlet API (with JSP support) as well as protocols HTTP/2 and WebSocket. In this ebook, we provide a compilation of Jetty examples that will help you kick-start your own projects. We cover a wide range of topics, from installation and configuration, to JMX and OSGi. With our straightforward tutorials, you will be able to get your own projects up and running in minimum time.
This tutorial is about JDBC (Java Database Connectivity), an API provided by Oracle that allows programmers to handle different databases from Java applications: it allows developers to establish connections to databases, defines how a specific client can access a given database, provides mechanisms for reading, inserting, updating and deleting entries of data in a database and takes care of transactions composed of different SQL statements. In this article we will explain the main JDBC components like Statements, Result Sets or Stored Procedures. JDBC needs drivers for the different databases that programmers may want to work with; we will explain this in detail and we will provide some examples. JDBC comes together with Java since the beginning of times; the first release came with the JDK 1.1 on February 1997 and since then, JDBC has been an important part of Java. The main packages where JDBC is contained are Package java.sql and Package javax.sql. All the information about the last JDBC release (4.2) and its development and maintenance can be found in the JSR 221. 

martes, 11 de diciembre de 2018

¿Como esta compuesto Apache HBase? Parte 4

En la ultima parte hablaremos de 2 componentes: Client y Catalog Table :

El Client es responsable de encontrar el RegionServer, que alberga la fila particular (datos). Se realiza consultando las tablas del catálogo. Una vez que se encuentra la región, el cliente se pone en contacto directamente con RegionServers y realiza la operación de datos. Una vez que se obtiene esta información, el cliente la almacena en caché para una recuperación más rápida. El cliente puede escribirse en Java o en cualquier otro lenguaje mediante API externas.

Las catalog tables son dos tablas que mantienen la información sobre todos los RegionServers y las regiones. Estas son un tipo de metadatos para el clúster HBase. Las siguientes son las dos tablas de catálogo que existen en HBase:

  • -ROOT-: Esto incluye información sobre la ubicación de la tabla .META. 
  • .META. : Esta tabla contiene todas las regiones y sus ubicaciones.

Al comienzo del proceso de inicio, la ubicación .META se establece en la raíz desde donde se leen los metadatos reales de las tablas y la lectura / escritura continúa. Por lo tanto, cada vez que un cliente desea conectarse a HBase y leer o escribir en la tabla, estas dos tablas se remiten y la información se devuelve al cliente para lectura directa y escritura en los RegionServers y las regiones de la tabla específica.

¿Como esta compuesto Apache HBase? Parte 3

Ahora hablaremos del RegionServer que con ese nombre suena importante.

De la misma manera que en clúster de Hadoop, un NameNode administra los metadatos y un DataNode mantiene los datos sin procesar. Del mismo modo, en HBase, un maestro HBase contiene los metadatos y los RegionServers los datos. Estos son los servidores que contienen los datos de HBase, ya que es posible que sepamos que en el clúster Hadoop, NameNode administra los metadatos y DataNode contiene los datos reales. Del mismo modo, en el clúster HBase, RegionServers almacena los datos reales sin procesar. Como puede suponer, un RegionServer se ejecuta o se aloja sobre un DataNode, que utiliza los DataNodes subyacentes en el sistema de archivos subyacente, es decir, HDFS.

RegionServer realiza las siguientes tareas:
• sirve las tablas asignadas a él
• Manejo de solicitudes de lectura / escritura del cliente
• Vaciar caché a HDFS
• Mantener HLogs
• Realizar compacciones.

Los siguientes son los componentes de RegionServers:

  • Registros de escritura anticipada o Write-Ahead logs (WAL):  Cuando los datos se leen / modifican a HBase, no se escriben directamente en el disco, sino que se guardan en la memoria durante un tiempo (umbral, que podemos configurar según el tamaño y el tiempo). Mantener estos datos en la memoria puede ocasionar una pérdida de datos si la máquina se apaga repentinamente. Entonces, para resolver esto, los datos se escriben primero en un archivo intermedio, que se denomina archivo de registro de escritura anticipada y luego en la memoria. Entonces, en el caso de una falla del sistema, los datos se pueden reconstruir usando este archivo de registro.
  • HFile: estos son los archivos reales donde los datos sin procesar se almacenan físicamente en el disco. Este es el archivo de la tienda real.
  • Store: Aquí se almacena el HFile. Corresponde a una familia de columnas para una tabla de HBase.
  • MemStore: este componente está en el almacén de datos de memoria; esto reside en la memoria principal y registra la operación de datos actual. Por lo tanto, cuando los datos se almacenan en WAL, RegionServers almacena el valor clave en el almacén de memoria.
  • Región: Estas son las divisiones de la tabla HBase; la tabla se divide en regiones según la clave y están alojados por RegionServers. Puede haber diferentes regiones en un RegionServer

Bajar libros gratis desde Bookboon

Quiero compartir esta pagina de libros gratis. Si bien no tiene tantos libros técnicos, esta buena, tiene muchos libros soft, de metodología, Ingles, y tambien hay técnicos.

Dejo link:

domingo, 9 de diciembre de 2018

¿Que novedades nos trae Linux Mint 19.1 Tessa?

Muchos sabrán que soy bastante fanático de Mint, pero no hago un post por cada versión pero esta versión me resulto por demás interesante por pequeños cambios en la interfaz que son un gran paso a la usabilidad:

El gestor de archivos Nemo es ahora tres veces más rápido
Se incluye un nuevo diseño del escritorio mucho más simple, claro y moderno respecto a su predecesor. En la parte de abajo encontramos una barra de iconos más grande incluyendo el botón de inicio (Menú).

Iconos de las aplicaciones ahora se compactarán

Mint 19.1 se viene con todo, si bien no tenemos la versión estable todavía podemos bajar la versión beta. 

Dejo link para bajar:

viernes, 7 de diciembre de 2018

¿Como esta compuesto Apache HBase? Parte 2

Ahora hablaremos del HMaster. Pero antes les tengo que recordar que un cluster Hadoop y Hbase, esta concebido sobre el paradigma maestro y esclavo. Es decir hay un maestro que es el encargado de coordinar las tareas de los nodos esclavos.

HMaster es el componente del cluster HBase que se puede considerar como el nodo maestro a la vez, actúa como un maestro para los Servidores de Región que se ejecutan en diferentes máquinas. Es responsable de monitorear todos los RegionServers en un cluster HBase y también proporciona una interfaz para todos los metadatos de HBase para las operaciones cliente.

También maneja el failover de RegionServer y las divisiones de región. Puede haber más de una instancia de HMaster en un clúster HBase esto lo configuraremos así para tener alta disponibilidad. Si tenemos más de un maestro, solo un maestro está activo a la vez; en el momento de la puesta en marcha, todos los maestros compiten para convertirse en el maestro activo en el cluster. Un nodo maestro ganara y todas las demás instancias maestras permanecen pasivas hasta que el maestro activo se bloquea, se apage o ZooKeeper lo decida. En resumen, HMaster es un componente de coordinación en un cluster HBase, que también administra y nos permite realizar una tarea administrativa en el cluster.

Discutamos ahora que pasa cuando inicia el servidor HMaster:

  1. Se bloquea (no atiende solicitudes) hasta que se active HMaster.
  2. Finaliza la inicialización.
  3. Atiende peticiones.
  4. Limpia los registros al finalizar.
En HBase, hay una tabla llamada .META. (nombre de la tabla en el sistema de archivos), que conserva toda la información sobre las regiones a las que HMaster hace referencia para obtener información sobre los datos. De forma predeterminada, HMaster se ejecuta en el número de puerto 60000 y su interfaz de usuario web HTTP está disponible en el puerto 60010, que siempre se puede cambiar por medio de configuración. 

Resumiendo, HMaster es encargado de : 

  • Supervisa los servidores regionales
  • Maneja el failover de los servidores de región.
  • Maneja los cambios de metadatos.
  • Asignación / desasignación de regiones
  • Interfaces todos los cambios de metadatos
  • Realiza balanceo de recarga en tiempo de inactividad
  • Publica su ubicación al cliente utilizando ZooKeeper.
  • La interfaz de usuario web de HMaster proporciona toda la información sobre el clúster HBase (tabla, regiones, RegionServers y así sucesivamente)

¿Como esta compuesto Apache HBase?

Bueno, Apache HBase esta compuesto por :
  • ZooKeeper
  • Hmaster
  • RegionServer
  • Client
  • Catalog Table

Empecemos con ZooKeeper:
ZooKeeper es un sistema de coordinación para aplicaciones distribuidas. El cual provee una sincronización de recursos distribuidos y un grupo de servicios para HBase.

Esto permite centrarnos en la lógica del nuestro negocio y no en la coordinación de los clusters. Este tambien provee un conjunto de APIS que permiten entre otras cosas desarrollar tareas de coordinación.

En HBase, ZooKeeper es usado para elegir el master de un cluster para mantener que servidor esta disponible y meta-informcación del cluster.

ZooKeeper provee Apis para :

  • Consistencia, orden y durabilidad
  • Sincronización
  • Concurrencia para clusters distribuidos. 

Zookeeper fue desarrollado por yahoo research y su nombre esta relacionado con que se encuadra en el marco del proyecto Hadoop, el cual sus subproyectos son todos animales. Es decir ZooKeeper es el encargado de cuidar estos animales.
ZooKeeper no solo simplifica el desarrollo sino que también es una capa de abstracción que facilita la mejor accesibilidad a los componentes del sistema.
ZooKeeper mantiene un árbol con datos llamados internamente znode. Esto puede ser de dos tipos:

  • Efímero, que es bueno para las aplicaciones que necesitan entender si un recurso distribuido específico está disponible o no.
  • El persistente se almacenará hasta que un cliente no lo elimine explícitamente y también almacene algunos datos de la aplicación.
ZooKeepers se basan en un principio de mayoría (quorum); requiere que tengamos un quórum de servidores para estar activo, donde el quórum es  (n / 2) + 1, para un conjunto de tres nodos significa que dos nodos deben estar funcionando en cualquier momento, y para un conjunto de cinco nodos, un mínimo de tres nodos debe estar arriba. También es importante para la elección del maestro ZooKeeper. 


martes, 4 de diciembre de 2018

Arquitectura de Apache HBase y los árboles LSM

Apache HBase almacena el archivo utilizando el árbol LSM, pero que es un árbol LSM?

En ciencias de la computación, el árbol de combinación estructurado de registro (o árbol LSM) es una estructura de datos con características de rendimiento que lo hacen atractivo para proporcionar acceso indexado a archivos con un alto volumen de inserción, como los datos de registro transaccional. Los árboles LSM, al igual que otros árboles de búsqueda, mantienen pares clave-valor. Los árboles LSM mantienen los datos en dos o más estructuras separadas, cada una de las cuales está optimizada para su respectivo medio de almacenamiento subyacente; los datos se sincronizan entre las dos estructuras de manera eficiente, en lotes.

Una versión simple del árbol LSM es un árbol LSM de dos niveles. Como lo describe Patrick O'Neil, un árbol LSM de dos niveles comprende dos estructuras en forma de árbol, llamadas C0 y C1. C0 es más pequeño y reside totalmente en la memoria, mientras que C1 reside en el disco. Los nuevos registros se insertan en el componente C0 residente en la memoria. Si la inserción hace que el componente C0 exceda un cierto umbral de tamaño, un segmento contiguo de entradas se elimina de C0 y se combina en C1 en el disco. Las características de rendimiento de los árboles LSM se derivan del hecho de que cada componente está sintonizado con las características de su medio de almacenamiento subyacente, y de que los datos se migran eficientemente a través de medios en lotes sucesivos, utilizando un algoritmo que recuerda el ordenamiento de fusión.

La mayoría de los árboles LSM utilizados en la práctica emplean múltiples niveles. El nivel 0 se mantiene en la memoria principal y puede representarse mediante un árbol. Los datos en el disco se organizan en series ordenadas de datos. Cada ejecución contiene datos ordenados por la clave de índice. Una ejecución se puede representar en el disco como un solo archivo, o como una colección de archivos con rangos de claves que no se superponen. Para realizar una consulta en una clave en particular para obtener su valor asociado, se debe buscar en el árbol de nivel 0 y cada ejecución.

Una clave en particular puede aparecer en varias ejecuciones, y lo que eso significa para una consulta depende de la aplicación. Algunas aplicaciones simplemente quieren el par más reciente de clave-valor con una clave dada. Algunas aplicaciones deben combinar los valores de alguna manera para obtener el valor agregado adecuado para devolver. Por ejemplo, en Apache Cassandra, cada valor representa una fila en una base de datos, y las diferentes versiones de la fila pueden tener diferentes conjuntos de columnas.

Para mantener bajo el costo de las consultas, el sistema debe evitar una situación en la que haya demasiadas ejecuciones.

Volviendo a Hbase, Apache HBase almacena el archivo utilizando el árbol LSM, que mantiene los datos en dos partes separadas que están optimizadas para el almacenamiento subyacente. Este tipo de estructura de datos depende de dos estructuras, una actual y una más pequeña en la memoria y una más grande en el disco persistente, y una vez que la parte en la memoria se vuelve más grande que un cierto límite, se fusiona con la estructura más grande que se almacena en el disco que utiliza un algoritmo de clasificación de mezcla y un nuevo árbol en memoria se crea para las solicitudes de inserción más nuevas. Transforma el acceso aleatorio a los datos en un acceso secuencial a los datos, lo que mejora el rendimiento de lectura, y la fusión es un proceso en segundo plano, que no afecta el procesamiento en primer plano.

Ventajas y desventajas de una base de datos orientada a columnas

Cassandra y HBase son las base de datos orientadas a columnas más utilizadas en el software libre, para saber si aplican a mi proyecto debemos saber las ventajas y desventajas de las base de datos orientada a columnas:

Entre las ventajas tenemos:

  • Tiene tiene soporte incorporado para la compresión eficiente de datos.
  • Es compatible con la recuperación rápida de datos.
  • La administración y configuración simplificada. Es fácil escalar horizontalmente.
  • Es buena para hacer consultas con agreegación (SUM, COUNT, AVG, MIN, etc)
  • Es buena para particionar datos, se puede contar con varios datacenter distribuidos
Como desventajas tenemos:
  • No soporta joins o no esta optimizadas para esto. 
  • Puede ser difícil diseñar modelos eficientes, ya que no aplica el modelo relacional al que estamos acostumbrados. 
  • Registra y elimina muchas actualizaciones y tiene que realizar compactaciones frecuentes y también se divide. Esto reduce su eficiencia de almacenamiento.

Apache ActiveMQ Cookbook y Amazon AWS Tutorial

Download Minibooks!

AWS Lambda is an event-driven, serverless computing platform provided by Amazon as a part of the Amazon Web Services. It is a computing service that runs code in response to events and automatically manages the computing resources required by that code. The purpose of Lambda, as compared to AWS EC2, is to simplify building smaller, on-demand applications that are responsive to events and new information. AWS targets starting a Lambda instance within milliseconds of an event. Node.js, Python, Java, Go and C# through .NET Core are all officially supported as of 2016, and other languages can be supported via call-outs. However, some runtimes, such as the Java Virtual Machine, may be slower than others to start. AWS Lambda was designed for use cases such as image or objects uploads to Amazon S3, updates to DynamoDB tables, responding to website clicks or reacting to sensor readings from an IoT connected device. AWS Lambda can also be used to automatically provision back-end services triggered by custom HTTP requests, and “spin down” such services when not in use, to save resources.Now, we provide a comprehensive guide so that you can develop your own Amazon Lambda based applications. We cover a wide range of topics to be able to get your own projects up and running in minimum time. Enjoy!
Apache ActiveMQ is an open source message broker written in Java together with a full Java Message Service (JMS) client. It provides “Enterprise Features” which in this case means fostering the communication from more than one client or server. Supported clients include Java via JMS 1.1 as well as several other “cross language” clients. The communication is managed with features such as computer clustering and ability to use any database as a JMS persistence provider besides virtual memory, cache, and journal persistency. The ActiveMQ project was originally created by its founders from LogicBlaze in 2004, as an open source message broker, hosted by CodeHaus. The code and ActiveMQ trademark were donated to the Apache Software Foundation in 2007, where the founders continued to develop the codebase with the extended Apache community. ActiveMQ employs several modes for high availability, including both file-system and database row-level locking mechanisms, sharing of the persistence store via a shared filesystem, or true replication using Apache ZooKeeper. A robust horizontal scaling mechanism called a Network of Brokers, is also supported out of the box. In the enterprise, ActiveMQ is celebrated for its flexibility in configuration, and its support for a relatively large number of transport protocols.