Cuando estas usando Vertica como base de datos analitica, suele suceder un error  muy muy tipico

[Vertica][VJDBC](2245) ERROR: Attempted to create too many ROS containers for projection x.y

El problema proviene  Read Optimized (ROS) de vertica.

Al cargar datos en Vertica, primero se almacena en una storage  de escritura optimizada (WOS). Luego, cada 5 minutos por defecto ,el tuple movers  va moviendo el contenido del WOS al ROS, donde se indexa y comprime para obtener operaciones de lectura óptimas.

El ROS organiza los datos en contenedores. Cada vez que los motores de tuplas envían datos al ROS, se crea un nuevo contenedor. Vertica permite un máximo de 1024 contenedores por proyección . Cuando se alcanza este límite, la unidad tuple falla y la transacción se retrotrae, lo que provoca el error “Attempted to create too many ROS containers for projection“.

Vertica  automáticamente  corrige este problema a través de un proceso de fusión, que se ejecuta cada 10 minutos de manera predeterminada , lo que fusionará los contenedores existentes en contenedores más grandes, por lo tanto, irá por debajo del límite de 1024.

Que es lo que yo suelo hacer , ejecuto esta query para ver si estoy llegado al limite de 1024:

select projection_name, ros_count from projection_storage order by  2 desc;

Si estoy llegando al limite lanzo el comando :

SELECT DO_TM_TASK('mergeout');

Tambien puedes cmabiar la configuraciòn pero es algo que yo personalmente no haria.

Anuncios

Buenas otra vez

Hoy vengo con una serie de pequeños artículos sobre HP-Vertica , una base de datos columnar  y orientada a análisis de datos, para mi una de las mejores sino la mejor dentro de este ambito.

Hace ya algún tiempo hicimos un pequeño taller de vertica con la ayuda de la gente de HP, a través del grupo de meetup de pentaho.

Uno de los principales problemas que tenemos con vertica es poder ver estado de cluster .

CLI Vertica

Primero necesitamos saber que nodo esta caido y podemos hacerlo de dos maneras mediante CLI

admintools -t list_allnodes | grep UP
su - dbadmin -c "/opt/vertica/bin/admintools -t view_cluster"

O con sql

SELECT node_name, node_address, node_state FROM nodes WHERE node_state = 'UP|DOWN'

Una vez sabemos  que no esta caído ,entramos por ssh y restauramos el nodo que se ha caido

./adminTools -t restart_node -d <database name> -p <password> -F -s <Node IP Address>

Este proceso va a tardar un rato considerable y aunque te pregunte constantemente va a ir restaurando el cluster por detras. Si quieres ver el error o lo que esta haciendo  en cada momento puedes hacer ver el log de arranque.

tail -f catalog-path/database-name/v_database-name_node_catalog/startup.log

Este seria el el fichero que genera

{ "node" : "v_cdmt0_node0001", "stage" : "Database Halted", "text" : Data consistency problems found; Check that all file systems are properly mounted. Also, the –force option can be used to delete corrupted data. "timestamp" : "2016-07-31 18:17:04.122" }

Vertica tiene otros proceso para sacar mas informaciòn de los que hablare en otro post.

 

 

 

Hell kitchen II

Hell kitchen II

Buenos dias,

Os traigo  mi primera versión estable del lanzador de pentaho pdi (para linux)  con nuevas caracteristicas como la posibilidad de crear varios entornos (dev,preproducciòn o producción).¿Que nos da esta posibilidad?, pues varias cosas :

  1. Independencia de entornos
  2. Alto grado de Configuraciòn
    1. Version de PDI
    2. Configuracion de base de datos
  3. Manejo de errores y configuracion  humanreadable

Entre otras cosas ademas estar preparado para usar Azkaban.

Configuraciòn

Para ellos lo que tenemos crear el sistema de entornos , ¿que vamos a tener en esos entornos?, pues el kettle.properties, conexiones de base de datos y configuraciones especificas como por ejemplo memoria de java, por cada entorno:

Creamos los entornos

Lo primero es crear la carpeta enviroments donde meteremos las carpetas con cada uno de los entornos

 mkdir environments
 mkdir environments/live
 cd environments/live

Una vez que hemos creado la carpeta generamos el fichero de configuracion
de hellkitchen, es decir, donde queremos que este pdi (por si queremos usar distintas versiones) y donde guardar los logs.

touch hellkitchen.properties
kettle_path=/opt/data-integration/
kettle_log=/home/..../logs/

ahora vamos a generar el contenido de kettle (es el mismo que te hace la primera vez) , el kettle.properties y el jdbc.properties

mkdir .kettle
cd .kettle
touch kettle.properties
cd ..
ln -s kettle.properties .kettle/kettle.properties
touch jdbc.properties

Como ya hemos dicho  podemos generar tantos entornos como queremos .

hells_kitchen.sh --job=/.......kjb --log-name=log_test --environment=/environment/docker
hells_kitchen.sh --job=/.......kjb --log-name=log_test --environment=/environment/live
Ejecuciòn de distintos entornos

Ahora podemos ejecutar el mismo trabajo cargando distintas propiedades en distintos entornos, con esto podemos hacer cambios muy facilmente entre distintos entronos sin muchas complicaciones y con un alto grado de independencia.
Con el nuevo lanzador tenemos las siguientes opciones :
-t  o –time = time (Optional)
-j  o –job = job file (ktr or kjb)
-l  o –log = bug level in pdi:

  • Error: Only show errors
  • Nothing: Don’t show any output
  • Minimal: Only use minimal logging
  • Basic: This is the default basic logging level (Default)
  • Detailed: Give detailed logging output
  • Debug: For debugging purposes, very detailed output.
  • Rowlevel: Logging at a row level, this can generate a lot of data.
  • Stream: No log show the content (for Azkaban)

-e  o –enviroment = dynamic envairoment (Optional)
-p  o –pdi = path of pdi (Optinal)
-ln o — log = path of log folder (Optinal)-p  o –pdi = path of pdi (Optinal)
-v o –version = Version of PDI and HK
-lo o –lock = prevent running multiple instances of a kettle-job

Como siempre bug, errores o cualquier feedback es bien venido

By Pass Security Version Parte II

By Pass Security Version Parte II

Hoy os traigo la segunda versión de mi byPass

¿Que he cambiado?, pues básicamente que se pueda acceder a los cuadros de mando vía nombre o TAG y no posición como hasta ahora , esto evita que si elimino algún cuadro de mando o alguna URL no afecte a nada de nuestro sistema.

Ha raíz de mi anterior post tengo que decir que hay muchas soluciones para esto aquí os dejo algunas que siempre son de utilidad:

Además he dado una vuelta mas de tuerca a la hora de mejorar el rendimiento de la búsqueda  de los tokens  ahora se guardan  en una tabla hash donde la clave es el token y el value es el DAO con toda la información, eso hace que la búsqueda sea lineal O(l)  y con un rendimiento mucho mejor, como puedes ver en el diagrama de workflow.

blank-flowchart-new-page
workflow

Os adjunto el diagrama UML basico (que esto ya no se lleva) de como se comunica todo y para que podáis ver por que he usado el patron Singelton a la hora desarrollar . Su intención consiste en garantizar que una clase sólo tenga una instancia y proporcionar un punto de acceso global a ella.

UML DAo and Singelton
UML DAo and Singelton

La instalación es igual que la anterior , como bien dice Juanjo en su blog si aun quieres tener mas seguridad puedes añadir un proxy ya sea a nivel del servidor web (ngix) o si tu arquitectura es mas complicada yo te recomiendo que pases a un sistema de DMZ y tengas un proxy-cache (Configuración de Filtros de Contenido) donde delegues esa información y trabajo. Con esto lo que conseguimos es que una vez el usuario ha hecho session no pueda acceder a mas cosas que las que ya el servidor proxy tenga configurado, además es muy buena idea que el usuario que le demos en pentaho sea lo mas restrictivo posible.

flow

Buenas a todos,

El otro día en el trabajo me tuve que pegar para que PDI pueda conectarse a MySQL mediante SSL . No hay que decir que MySQL y SSL en la misma frase es ya de por si es un dolor pero si sumamos a este PDI ya es una verdadera pasada.

Cuando queremos que MySQL se conecto mediante SSL, pues básicamente cuando queremos que el trafico entre ambos sea encriptado  pero no queremos montar IPSEC o VPN.

Al final y buscando y buscando encontré la solución y  la verdad es que creo que me quedo muy elegante hay que modificar spoon pero bueno es lo que hay.

Generación del  JKS (Java Key Store)

Lo primero de todo es generar el Java Key Store a partir de los certificados y las claves del cliente con este comando:

openssl pkcs12 -export -inkey client-key.pem -in client-cert.pem -out client.packe

Después con el paquete generado generamos el Java Key Store, tenemos que tener en cuenta  que el password ha de ser el mismo. Y ya tenemos todo lo necesario para la conexion.

keytool -importkeystore -deststorepass password -destkeypass password -destkeystore myKS.jks -srckeystore client.packet -srcstoretype PKCS12 -srcstorepass password -alias 1
keytool -importcert -alias mysqlCA -trustcacerts -file /root/ca-cert.pem -keystore myKS.jks

Configuración de Spoon

Ahora hay que añadir a spoon los parametros de la maquina virtual.


-Djavax.net.ssl.keyStore=path_to_keystore_file -Djavax.net.ssl.keyStorePassword=password -Djavax.net.ssl.trustStore=path_to_truststore_file -Djavax.net.ssl.trustStorePassword=password

Una vez hemos hecho esto lo que tenemos que hacer es indicar a spoon que la conexion es cifrada y para eso lo podemos hacer en dos sitios:

SimpleJNDI

En el fichero que esta en data-integration/simple-jndi/jdbc.properties

verifyServerCertificate=false&useSSL=true&requireSSL=true

Properties Spoon

En el la conexión , el menú de options añadimos esos mimso parametros

Backup y Restore en #Pentaho de forma facil

Backup y Restore en #Pentaho de forma facil

Siempre he tenido el mismo problema cuando tengo un proyecto en producción como coño hago un backup de todo. Y como hago la restauraciòn del mismo.

  • Usuario
  • Datasource
  • Cuadros de Mando
  • etc..

Muy poca gente sabe que pentaho te da una pequeña ayuda, lo que he hecho es crear un envoltorio al script para que nos sea mas facil usarlo.

-- sample the native call
./import-export.sh --restore --url=http://localhost:8080/pentaho --username=admin --password=password --file-path=/home/Downloads/backup.zip --overwrite=true --logfile=/temp/logfile.log
./import-export.sh --backup --url=http://localhost:8080/pentaho --username=admin - -password=password --file-path=/home/Downloads/backup.zip --logfile=/temp/logfile.log

Con este shell podemos crear facilmente backups de todo e incluso mandarlo por rsync a otros host. Tambien tendremos la posibilidad de restaurar todo el sistema. Este shell no es valido o no esta pensado para un pentaho en cluster.

Como siempre comentarios son muy apreciado

Dynamic number of processing engines in Pentaho

Amazing

Codeks Blog

So about 3 years ago this foxed me, and as it wasn’t particularly important at the time we went with a hard coded number of processing engines.  Randomly whilst driving through the beautiful British countryside last week i realised how simple the solution really is.  Here is what i was passing at the time… (Brocket hall, they do food i think!)

1flowers3

Whoa! hang on a minute, what am I on about – OK the scenario is this – common in a metadata driven system – you want to process all your data, and depending on some attribute send the data to one template or another. Fine.

BUT because we love metadata, and we love plugins, you don’t want to have to change the code just to add a brand new template.  Even if it would just be a copy and paste operation..

Concrete example? Sure. You’re processing signal data. You…

Ver la entrada original 129 palabras más