Translate
jueves, 27 de junio de 2019
martes, 25 de junio de 2019
Primer proyecto con Haskell y cabal.
Antes que nada vamos a instalar cabal, como uso linux (derivado de debian) lo puedo instalar con apt :
sudo add-apt-repository -y ppa:hvr/ghc
sudo apt-get update
sudo apt-get install -y cabal-install ghc
Probamos cabal :
$ cabal --version
Hacemos un Proyecto:
$ cabal init
Este comando nos preguntará datos de forma interactiva, como nombre de proyecto, versión, autor, etc ...
Si deseamos hacer un proyecto haskell ejecutable:
$ cabal init -n --is-executable
$ cabal run
Dejo link: https://www.haskell.org/cabal/
INFRAESTRUCTURA DEFINIDA POR SOFTWARE PARA DUMMIES
Con la aceleración de la transformación digital en todos los sectores, prácticamente toda iniciativa empresarial moderna se ha convertido en un proyecto de TI, y la TI es ahora más crucial que nunca para el éxito de la empresa. Las empresas deben sacar al mercado productos y servicios innovadores con mayor rapidez que la competencia, lo que a su vez significa que la TI debe proporcionar, de forma rápida y continuada, aplicaciones y servicios que fomenten la productividad y la eficiencia.
Dejo link: https://www.vmware.com/es/learn/48842_DCMA-0468_REG.html?src=sp_5cd9beaede079&cid=7012H000001dBV2QAM&fbclid=IwAR18r3jzCVFvX64Q8YpFPk6P8tPiXT_HwJAXIrsesrAmAD6cl7ujSqdLKZs
domingo, 23 de junio de 2019
Tipos en Cassandra
Veamos los distintos tipos que tenemos disponibles para nuestros valores. Como hemos visto en nuestra exploración hasta ahora, cada columna de nuestra tabla es de un tipo específico.
CQL admite un conjunto flexible de tipos de datos, incluidos tipos de caracteres y numéricos simples, colecciones y tipos definidos por el usuario. Describiremos estos tipos de datos y proporcionaremos algunos ejemplos de cómo podrían usarse para aprender a tomar la decisión correcta para los diferentes modelos de datos.
int: 32-bit entero con signo como java.
bigint: 64-bit entero grande con signo equivalente a long de Java
smallint: 16-bit entero con signo equivalente a short de Java
tinyint: 8-bit entero con signo
varint: A variable precision signed integer (equivalent to java.math.BigInteger )
float: 32-bit IEEE-754 equivalente a float de java
double: 64-bit IEEE-754 equivalente a double de Java
decimal: equivalente a java.math.BigDecimal
Si bien los tipos enumerados son comunes en muchos lenguajes, no hay un equivalente directo en CQL. Una práctica común es almacenar valores enumerados como cadenas. Por ejemplo, usando el método Enum.name() para convertir un valor enumerado en una Cadena para escribir en Cassandra como texto, y el método Enum.valueOf() para volver a convertir el texto al valor enumerado.
CQL proporciona dos tipos de datos para representar texto, uno de los cuales ya hemos utilizado bastante :
text , varchar : cadena de caracteres UTF-8
ascii : una cadena de ascii
UTF-8 es el estándar de texto más reciente y más utilizado y es compatible con la internacionalización, por lo que recomendamos utilizar texto sobre ascii al crear tablas para nuevos datos. El tipo de ascii es más útil si está tratando con datos heredados que están en formato ASCII.
Cassandra nos provee tipos para representar el tiempo :
timestamp : Si bien señalamos anteriormente que cada columna tiene una marca de tiempo que indica cuándo se modificó por última vez, también puede usar una marca de tiempo como el valor de una columna en sí. El tiempo se puede codificar como un entero con signo de 64 bits, pero normalmente es mucho más útil ingresar una marca de tiempo utilizando uno de los varios formatos de fecha ISO 8601 compatibles.
date, time : hasta Cassandra 2.1 solo tenían el tipo timestamp para representar los tiempos, que incluía tanto una fecha como una hora del día. La versión 2.2 introdujo los tipos de fecha y hora que permitieron que estos se representaran de forma independiente; es decir, una fecha sin una hora y una hora del día sin referencia a una fecha específica. Al igual que con ltimestamp, estos tipos admiten formatos ISO 8601.
Aunque hay nuevos tipos de java.time disponibles en Java 8, el tipo de fecha se asigna a un tipo personalizado en Cassandra para preservar la compatibilidad con JDK más antiguos. El tipo de tiempo se asigna a una Java long que representa el número de nanosegundos desde la medianoche.
Veamos el tipo de datos para las claves:
uuid : El identificador único universal (UUID) de RA es un valor de 128 bits en el que los bits se ajustan a uno de varios tipos, de los cuales los más utilizados comúnmente se conocen como Tipo 1 y Tipo 4. El tipo de uuid CQL es un UUID de Tipo 4, que se basa enteramente en números aleatorios. Los UUID se representan normalmente como secuencias separadas por guiones de dígitos hexadecimales. El tipo uuid se usa a menudo como una clave sustituta, ya sea por sí misma o en combinación con otros valores. Debido a que los UUID son de una longitud finita, no están absolutamente garantizados para ser únicos. Sin embargo, la mayoría de los sistemas operativos y lenguajes de programación proporcionan utilidades para generar ID que proporcionan una singularidad adecuada, y cqlsh también lo hace. Puede obtener un valor UUID de Tipo 4 a través de la función uuid () y usar este valor en INSERT o UPDATE.
timeuuid : Este es un UUID de Tipo 1, que se basa en la dirección MAC de la computadora, la hora del sistema y un número de secuencia utilizado para evitar duplicados. Este tipo se usa frecuentemente como una marca de tiempo libre de conflictos. cqlsh proporciona varias funciones convenientes para interactuar con el tipo de timeuuid: now (), dateOf () y unixTimestampOf (). La disponibilidad de estas funciones de conveniencia es una de las razones por las que timeuuid tiende a usarse con más frecuencia que uuid.
Para terminar veamos otros tipos que no se donde agruparlos :
boolean : Este es un simple valor verdadero / falso. El cqlsh no distingue entre mayúsculas y minúsculas en la aceptación de estos valores, pero da como resultado True o False.
blob : Un objeto grande binario (blob) es un término informático coloquial para una matriz arbitraria de bytes. El tipo de blob CQL es útil para almacenar medios u otros tipos de archivos binarios. Cassandra no valida ni examina los bytes en un blob. CQL representa los datos como dígitos hexadecimales, por ejemplo, 0x00000ab83cf0. Si desea codificar datos textuales arbitrarios en el blob, puede usar la función textAsBlob() para especificar valores para la entrada.
inet : Este tipo representa las direcciones de Internet IPv4 o IPv6. cqlsh acepta cualquier formato legal para definir direcciones IPv4, incluidas representaciones con puntos o sin puntos que contengan valores decimales, octales o hexadecimales. Sin embargo, los valores se representan utilizando el formato decimal punteado en la salida cqlsh, por ejemplo, 192.0.2.235.
Las direcciones IPv6 se representan como ocho grupos de cuatro dígitos hexadecimales, separados por dos puntos, por ejemplo, 2001: 0db8: 85a3: 0000: 0000: 8a2e: 0370: 7334. La especificación de IPv6 permite el colapso de valores hexadecimales cero consecutivos, por lo que el valor anterior se representa de la siguiente manera cuando se lee con SELECT: 2001: db8: 85a3: a :: 8a2e: 370: 7334.
counter : El tipo de datos de contador proporciona un entero con signo de 64 bits, cuyo valor no se puede establecer directamente, sino que solo se puede incrementar o disminuir. Los contadores se utilizan con frecuencia para el seguimiento de estadísticas, como el número de páginas vistas, tweets, mensajes de registro, etc. El tipo de contador tiene algunas restricciones especiales. No se puede utilizar como parte de una clave principal. Si se usa un contador, todas las columnas que no sean columnas de clave primaria deben ser contadores.
En proximos post hablaremos de tipos de datos compuestos como las colecciones y en la capacidad de crear nuestros propios tipos de datos.
jueves, 20 de junio de 2019
C# 8 mejoras en Pattern Matching
Con C# 7 tuvimos Pattern Matching y con C# 8 tenemos mejoras!!!
Todo el mundo esta hablando de C# 8 y porque va salir C# 8, pues claro! Entre otras mejoras, han mejorado el Pattern Matching:
Ajuste posicional
En C# 7 hacíamos :
case Rectangle r when r.Length == 10 && r.Width == 10: return "Found 10x10 rectangle"
Y ahora :
case Rectangle (10, 10): return "Found 10x10 rectangle";
Propiedades
Con ajuste posicional el pattern matching es conciso, pero solo funciona si tiene un método Deconstruct adecuado. Cuando no lo tienes puedes usar un patrón de propiedad en su lugar.
case Rectangle {Width : 10 }: return "Found a rectangle with a width of 10"
Mejoras del deconstructor
Otra idea que se está considerando en el tema Abrir LDM en el ticket de coincidencia de patrones es permitir múltiples métodos Deconstruct con el mismo número de parámetros. Además de tener diferentes tipos, los parámetros deben tener un nombre diferente.
ITuple
La interfaz de ITuple, introducida en .NET 4.7.1 y .NET Core 2.0, plantea varias preguntas en C# 8. La idea básica es que si un objeto implementa esta interfaz, entonces puede participar en la comparación de patrones. Se están considerando tres escenarios con respecto a cuándo entrará en vigencia.
if (x is ITuple(3, 4)) // (1) permitted?
if (x is object(3, 4)) // (2) permitted?
if (x is SomeTypeThatImplementsITuple(3, 4)) // (3) permitted?
Una pregunta relacionada es si una clase implementa ITuple y hay un método de extensión Deconstruct, ¿cuál tiene prioridad? Idealmente, devolverían los mismos valores, pero se necesita un desempate si ese no es el caso.
martes, 18 de junio de 2019
Probando Linux Deepin
Este es mi primer post con Deepin y en lineas generales estoy muy contento, tuve algunos problemas.
Sobretodo con algunas instalaciones. Me sorprendio que el market no traiga algunas aplicaciones que son historicas de linux.
Y por lo demás todo muy bien samba se configuro casi solo.
La interfaz es muy cuidada y las aplicaciones que trae son muy utilies.
En fin, muy bueno...
Dejo link : https://www.deepin.org/es/
Sobretodo con algunas instalaciones. Me sorprendio que el market no traiga algunas aplicaciones que son historicas de linux.
Y por lo demás todo muy bien samba se configuro casi solo.
La interfaz es muy cuidada y las aplicaciones que trae son muy utilies.
En fin, muy bueno...
Dejo link : https://www.deepin.org/es/
domingo, 16 de junio de 2019
Tiempo de vida en las columnas en Apache Cassandra
Una característica muy poderosa que tiene apache Cassandra es la capacidad de expirar datos que no necesita por mucho tiempo. Esta característica es muy flexible y trabaja a nivel individual de cada valor de una columna. El tiempo de vida (TTL) es el tiempo que Cassandra persiste un campo y se indica a nivel de columna.
El TTL por defecto es null y esto significa que el dato escrito no espira. Con la funcion TTL() podemos ver el tiempo de vida de un campo determinado :
cqlsh:my_keyspace> SELECT first_name, last_name, TTL(last_name) FROM user WHERE first_name = 'Mary';
first_name | last_name | ttl(last_name)
-------------+-------------+----------------
Mary | Boateng | null
(1 rows)
Ahora vamos a modificar esto:
cqlsh:my_keyspace> UPDATE user USING TTL 3600 SET last_name ='McDonald' WHERE first_name = 'Mary' ;
cqlsh:my_keyspace> SELECT first_name, last_name, TTL(last_name) FROM user WHERE first_name = 'Mary';
first_name | last_name | ttl(last_name)
-------------+-------------+---------------
Mary | McDonald | 3588
(1 rows)
En este caso modificamos el TTL con update pero también podemos utilizar insert con el comando USING TTL.
El TTL es por columnas, no tenemos un mecanismo para settear el TTL a nivel de fila directamente. Y esto es setteado cuando proveemos un valor a una columna. Si queremos settear el TTL a nivel de fila, debemos proveer un valor para la primary key en el update o insert.
sábado, 15 de junio de 2019
Apache Ambari parte 2
Continuamos descubriendo Apache Ambari.
Se puede integrar fácilmente las capacidades de aprovisionamiento, gestión y supervisión de Hadoop en sus propias aplicaciones con las API REST de Ambari.
Ambari simplifica la administración de Hadoop al proporcionar una plataforma consistente y segura para el control operativo. Ambari proporciona una interfaz de usuario web intuitiva, así como una API REST robusta, que es particularmente útil para automatizar las operaciones de clúster. Con Ambari, los operadores de Hadoop obtienen los siguientes beneficios principales:
Ambari permite a los administradores de sistemas:
Se puede integrar fácilmente las capacidades de aprovisionamiento, gestión y supervisión de Hadoop en sus propias aplicaciones con las API REST de Ambari.
Ambari simplifica la administración de Hadoop al proporcionar una plataforma consistente y segura para el control operativo. Ambari proporciona una interfaz de usuario web intuitiva, así como una API REST robusta, que es particularmente útil para automatizar las operaciones de clúster. Con Ambari, los operadores de Hadoop obtienen los siguientes beneficios principales:
- Instalación, configuración y gestión simplificadas. Se puede crear, administrar y supervisar los clusters de forma fácil y eficiente a escala. Elimina las conjeturas de la configuración con Smart Configs y las recomendaciones de cluster. Permite la creación repetida y automatizada de clústeres con Ambari Blueprints.
- Configuración de seguridad centralizada. Reduce la complejidad para administrar y configurar la seguridad del clúster en toda la plataforma. Ayuda a automatizar la configuración y configuración de las capacidades avanzadas de seguridad de clúster, como Kerberos y Apache Ranger.
- Visibilidad completa en la salud del clúster. Asegurará de que su grupo sea saludable y esté disponible con un enfoque holístico para el monitoreo. Se puede configurar alertas predefinidas, basadas en las mejores prácticas operativas, para la supervisión de clústeres. Captura y visualiza métricas operacionales críticas, utilizando Grafana, para el análisis y la resolución de problemas. Integrado con Hortonworks SmartSense para la prevención y resolución proactiva de problemas.
- Altamente extensible y personalizable. Ajuste Hadoop a la perfección en su entorno empresarial. Altamente extensible con Ambari Stacks para administrar servicios personalizados bajo administración, y con Ambari Views para personalizar la interfaz de usuario web de Ambari.
Ambari permite a los administradores de sistemas:
- Aprovisionar un clúster de Hadoop
- Ambari proporciona un asistente paso a paso para instalar los servicios de Hadoop en cualquier número de hosts.
- Ambari maneja la configuración de los servicios de Hadoop para el cluster.
- Administrar un clúster de Hadoop
- Ambari proporciona administración central para iniciar, detener y reconfigurar los servicios de Hadoop en todo el clúster.
- Monitorear un clúster de Hadoop
- Ambari proporciona un panel de control para monitorear la salud y el estado del clúster de Hadoop.
- Ambari aprovecha el sistema de métricas de Ambari para la recopilación de métricas.
- Ambari aprovecha Ambari Alert Framework para alertar al sistema y le notificará cuando necesite atención (por ejemplo, un nodo se apaga, el espacio restante en el disco es bajo, etc.).
miércoles, 12 de junio de 2019
Libro Java Code Geeks
Apache Dumbo
Apache Software Foundation anunció recientemente que Apache Dubbo es un proyecto Top level. Apache Dubbo es framework RPC de código abierto basado en Java. Originalmente fue desarrollado en Alibaba, fue de código abierto en 2011 e ingresó a la Incubadora de Apache en febrero de 2018. Dubbo trae funcionalidades clave como llamadas remotas basadas en interfaz, tolerancia a fallas y balanceo de carga, y registro y descubrimiento automáticos de servicios.
Veamos como funciona:
- Container es responsable de iniciar, cargar y ejecutar el proveedor de servicios
- Provider registra sus servicios en el Register durante su inicialización.
- Consumer suscribe los servicios que necesita en el Register cuando comienza
- Register devuelve la lista de Providers a los Consumer y, cuando se produce un cambio, el Register envía los datos modificados al Consumer
- Sobre la base de un algoritmo de equilibrio de carga flexible, el Consumer seleccionará uno de los Provider y ejecutará la invocación, seleccionará automáticamente otro Provider cuando ocurra una falla.
- Tanto el Consumer como el Provider contarán las invocaciones de servicio y el tiempo que lleva en la memoria, y enviarán las estadísticas a Monitorear cada minuto.
Las características de Apache Dubbo incluyen:
- Una interfaz transparente basada en RPC.
- Balanceo de carga inteligente, que soporta múltiples estrategias de balanceo de carga listas para usar
- Registro de servicio automático y descubrimiento.
- Alta extensibilidad, diseño de micro-kernel y plugin que asegura que puede ser fácilmente extendido por la implementación de terceros a través de características principales como protocolo, transporte y serialización.
- Enrutamiento del tráfico en tiempo de ejecución, que se puede configurar en tiempo de ejecución para que el tráfico se pueda enrutar de acuerdo con diferentes reglas, lo que facilita la compatibilidad con características como la implementación azul-verde, el enrutamiento que reconoce el centro de datos, etc.
- Gobierno visualizado del servicio, que proporciona herramientas completas para el gobierno y el mantenimiento del servicio, como la consulta de metadatos del servicio, el estado de mantenimiento y las estadísticas
Para comenzar a usar Dubbo, primero agregue la dependencia de Maven:
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.2<</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.2<</version>
<type>pom</type>
</dependency>
</dependencies>
domingo, 9 de junio de 2019
Columnas en Apache Cassandra
Una columna es la unidad más básica de la estructura de datos en el modelo de datos de Cassandra. Hasta ahora hemos visto que una columna contiene un nombre y un valor. Restringimos cada uno de los valores para que sean de un tipo particular cuando definimos la columna. Vamos profundizar en los diversos tipos que están disponibles para cada columna, pero primero echemos un vistazo a algunos otros atributos de una columna que aún no hemos discutido: marcas de tiempo y tiempo de vida. Estos atributos son clave para entender cómo Cassandra usa el tiempo para mantener los datos actualizados.
Marcas de tiempo: Cada vez que escribe datos en Cassandra, se genera una marca de tiempo para cada valor de columna que se actualiza. Internamente, Cassandra usa estas marcas de tiempo para resolver cualquier cambio conflictivo que se realice en el mismo valor. Generalmente, la última marca de tiempo gana.
Veamos las marcas de tiempo que se generaron para nuestras escrituras anteriores agregando la función writetime() a nuestro comando SELECT. Haremos esto en la columna de apellido e incluiremos un par de otros valores para el contexto:
cqlsh:my_keyspace> SELECT first_name, last_name, writetime(last_name) FROM user;
first_name | last_name | writetime(last_name)
------------+-------------+----------------------
Mary | Rodriguez | 1434591198790252
Bill | Nguyen | 1434591198798235
(2 rows)
Podríamos esperar que si solicitamos la marca de tiempo en first_name obtendríamos un resultado similar. Sin embargo, resulta que Cassandra no nos permite solicitar la marca de tiempo en las columnas de clave principal:
cqlsh:my_keyspace> SELECT WRITETIME(first_name) FROM user;
InvalidRequest: code=2200 [Invalid query] message="Cannot use selection function writeTime on PRIMARY KEY part first_name"
Cassandra también nos permite especificar una marca de tiempo cuando modificamos. Usaremos la opción USING TIMESTAMP para establecer manualmente una marca de tiempo (tenga en cuenta que la marca de tiempo debe ser posterior a la de nuestro comando SELECT, o se ignorará la ACTUALIZACIÓN):
cqlsh:my_keyspace> UPDATE user USING TIMESTAMP 1434373756626000 SET last_name = 'Boateng' WHERE first_name = 'Mary' ;
cqlsh:my_keyspace> SELECT first_name, last_name, WRITETIME(last_name) FROM user WHERE first_name = 'Mary';
first_name | last_name | writetime(last_name)
------------+-------------+---------------------
Mary | Boateng | 1434373756626000
(1 rows)
Esta declaración tiene el efecto de agregar la columna de apellido a la fila identificada por la clave principal "Mary", y establecer la marca de tiempo al valor que proporcionamos.
sábado, 8 de junio de 2019
Apache Ambari
Apache Ambari es un proyecto de software de Apache Software Foundation. Ambari permite a los administradores de sistemas aprovisionar, administrar y monitorear un clúster de Hadoop, y también integrar Hadoop con la infraestructura empresarial existente. Apache Ambari elimina las conjeturas de operar Hadoop y nos permite utilizar Hadoop de forma interactiva y fácil. Ambari era un subproyecto de Hadoop pero ahora es un proyecto de Top level de Apache.
Ambari es utilizado por compañías como IBM, Hortonworks, Cardinal Health, EBay, Expedia, Kayak.com, club de préstamos, Neustar, Macy's, Pandora Radio, Samsung, Shutterfly y Spotify.
Apache Ambari, como parte de la plataforma de datos Hortonworks, permite que las empresas planifiquen, instalen y configuren de manera segura HDP, lo que facilita el mantenimiento y la administración continua del clúster, sin importar el tamaño del clúster.
HDP sanbox es una imagen de los productos de apache que se utilizan en la distribución de HortonWorks y permite administrar todo el software con ambari, de forma muy fácil.
Ambari actualmente soporta 64-bit y corre sobre los siguientes sistemas operativos :
Les dejo un video :
Dejo links :
https://ambari.apache.org/
https://es.hortonworks.com/apache/ambari/
https://en.wikipedia.org/wiki/Apache_Ambari
Ambari es utilizado por compañías como IBM, Hortonworks, Cardinal Health, EBay, Expedia, Kayak.com, club de préstamos, Neustar, Macy's, Pandora Radio, Samsung, Shutterfly y Spotify.
Apache Ambari, como parte de la plataforma de datos Hortonworks, permite que las empresas planifiquen, instalen y configuren de manera segura HDP, lo que facilita el mantenimiento y la administración continua del clúster, sin importar el tamaño del clúster.
HDP sanbox es una imagen de los productos de apache que se utilizan en la distribución de HortonWorks y permite administrar todo el software con ambari, de forma muy fácil.
Ambari actualmente soporta 64-bit y corre sobre los siguientes sistemas operativos :
- RHEL (Redhat Enterprise Linux) 7.4, 7.3, 7.2
- CentOS 7.4, 7.3, 7.2
- OEL (Oracle Enterprise Linux) 7.4, 7.3, 7.2
- Amazon Linux 2
- SLES (SuSE Linux Enterprise Server) 12 SP3, 12 SP2
- Ubuntu 14 and 16
- Debian 9
Les dejo un video :
https://ambari.apache.org/
https://es.hortonworks.com/apache/ambari/
https://en.wikipedia.org/wiki/Apache_Ambari
viernes, 7 de junio de 2019
Cloud data warehousing for Dummies
Otro libro gratuito!!
Esta guía explica data warehousing en la nube y cómo se compara con otras plataformas de datos.
Incluyen:
- Qué es un data warehousing de datos en la nube.
- Tendencias que provocaron la adopción del almacenamiento de datos en la nube.
- Cómo el almacén de datos en la nube se compara con las ofertas tradicionales y noSQL
- Cómo evaluar diferentes soluciones de almacenamiento de datos en la nube.
- Consejos para elegir un almacén de datos en la nube
Data as a feature
Recibí un mail de O'reilly sobre un libro gratuito y bueno, quiero compartirlo :
|
Suscribirse a:
Entradas (Atom)